use of org.terasology.gestalt.module.ModuleEnvironment in project Terasology by MovingBlocks.
the class HeadlessEnvironment method setupStorageManager.
@Override
protected void setupStorageManager() throws IOException {
ModuleManager moduleManager = context.get(ModuleManager.class);
EngineEntityManager engineEntityManager = context.get(EngineEntityManager.class);
BlockManager blockManager = context.get(BlockManager.class);
RecordAndReplaySerializer recordAndReplaySerializer = context.get(RecordAndReplaySerializer.class);
Path savePath = PathManager.getInstance().getSavePath("world1");
RecordAndReplayUtils recordAndReplayUtils = new RecordAndReplayUtils();
RecordAndReplayCurrentStatus recordAndReplayCurrentStatus = context.get(RecordAndReplayCurrentStatus.class);
ModuleEnvironment environment = context.get(ModuleManager.class).getEnvironment();
context.put(BlockFamilyLibrary.class, new BlockFamilyLibrary(environment, context));
ExtraBlockDataManager extraDataManager = context.get(ExtraBlockDataManager.class);
context.put(StorageManager.class, new ReadWriteStorageManager(savePath, moduleManager.getEnvironment(), engineEntityManager, blockManager, extraDataManager, recordAndReplaySerializer, recordAndReplayUtils, recordAndReplayCurrentStatus));
}
use of org.terasology.gestalt.module.ModuleEnvironment in project Terasology by MovingBlocks.
the class CompleteApiScraper method getApi.
/**
* @return Project's Packages, Interfaces, Classes and Methods
* @throws Exception if the module environment cannot be loaded
*/
static StringBuffer getApi() throws Exception {
ModuleManager moduleManager = ModuleManagerFactory.create();
ModuleEnvironment environment = moduleManager.getEnvironment();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Multimap<String, String> api = Multimaps.newMultimap(new HashMap<String, Collection<String>>(), ArrayList::new);
for (Class<?> apiClass : environment.getTypesAnnotatedWith(API.class)) {
boolean isPackage = apiClass.isSynthetic();
URL location;
String category;
String apiPackage = "";
if (isPackage) {
apiPackage = apiClass.getPackage().getName();
location = classLoader.getResource(apiPackage.replace('.', '/'));
} else {
location = apiClass.getResource('/' + apiClass.getName().replace('.', '/') + ".class");
}
if (location == null) {
logger.error("Failed to get a class/package location, skipping " + apiClass);
continue;
}
switch(location.getProtocol()) {
case "jar":
// Find out what jar it came from and consider that the category
String categoryFragment = location.getPath();
int bang = categoryFragment.lastIndexOf("!");
int hyphen = categoryFragment.lastIndexOf("-", bang);
int slash = categoryFragment.lastIndexOf("/", hyphen);
category = categoryFragment.substring(slash + 1, hyphen);
if (isPackage) {
api.put(category, apiPackage + " (PACKAGE)");
} else {
addToApi(category, apiClass, api);
}
break;
case "file":
// If file based we know it is local so organize it like that
category = TERASOLOGY_API_CLASS_CATEGORY;
if (isPackage) {
api.put(category, apiPackage + " (PACKAGE)");
} else {
addToApi(category, apiClass, api);
}
break;
default:
logger.error("Unknown protocol for: " + apiClass + ", came from " + location);
}
}
api.putAll(EXTERNAL, ExternalApiWhitelist.CLASSES.stream().map(clazz -> clazz.getName() + " (CLASS)").collect(Collectors.toSet()));
api.putAll(EXTERNAL, ExternalApiWhitelist.PACKAGES.stream().map(packagee -> packagee + " (PACKAGE)").collect(Collectors.toSet()));
// Puts the information in the StringBuffer
StringBuffer stringApi = new StringBuffer();
stringApi.append("# Modding API:\n");
for (String key : api.keySet()) {
stringApi.append("## ");
stringApi.append(key);
stringApi.append("\n");
for (String value : api.get(key)) {
stringApi.append("* ");
stringApi.append(value);
stringApi.append("\n");
}
stringApi.append("\n");
}
return stringApi;
}
use of org.terasology.gestalt.module.ModuleEnvironment in project Terasology by MovingBlocks.
the class BindsSubsystemTest method setUpMockModuleEnvironment.
private void setUpMockModuleEnvironment() {
ModuleManager moduleManager = mock(ModuleManager.class);
ModuleRegistry moduleRegistry = new TableModuleRegistry();
Module module = mock(Module.class);
when(module.getId()).thenReturn(new Name(TEST_MODULE));
when(module.getVersion()).thenReturn(new Version(0, 0, 1, true));
when(module.getMetadata()).thenReturn(new ModuleMetadata());
moduleRegistry.add(module);
when(moduleManager.getRegistry()).thenReturn(moduleRegistry);
ModuleEnvironment environment = mock(ModuleEnvironment.class);
when(moduleManager.loadEnvironment(any(), anyBoolean())).thenReturn(environment);
when(moduleManager.getEnvironment()).thenReturn(environment);
registerBindButtonClasses = new ArrayList<>();
when(environment.getTypesAnnotatedWith(eq(RegisterBindButton.class))).thenReturn(registerBindButtonClasses);
when(environment.getTypesAnnotatedWith(eq(RegisterBindButton.class), any())).thenReturn(registerBindButtonClasses);
registerRealBindAxisClasses = new ArrayList<>();
when(environment.getTypesAnnotatedWith(eq(RegisterBindAxis.class))).thenReturn(registerRealBindAxisClasses);
when(environment.getTypesAnnotatedWith(eq(RegisterBindAxis.class), any())).thenReturn(registerRealBindAxisClasses);
when(environment.getModuleProviding(any())).thenReturn(new Name(TEST_MODULE));
context.put(ModuleManager.class, moduleManager);
}
use of org.terasology.gestalt.module.ModuleEnvironment in project Terasology by MovingBlocks.
the class ApiScraper method main.
/**
* @param args (ignored)
* @throws Exception if the module environment cannot be loaded
*/
public static void main(String[] args) throws Exception {
ModuleManager moduleManager = ModuleManagerFactory.create();
ModuleEnvironment environment = moduleManager.getEnvironment();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
SortedSetMultimap<String, String> sortedApi = Multimaps.newSortedSetMultimap(new HashMap<>(), TreeSet::new);
for (Class<?> apiClass : environment.getTypesAnnotatedWith(API.class)) {
// System.out.println("Processing: " + apiClass);
boolean isPackage = apiClass.isSynthetic();
URL location;
String category;
String apiPackage = "";
if (isPackage) {
apiPackage = apiClass.getPackage().getName();
location = classLoader.getResource(apiPackage.replace('.', '/'));
} else {
location = apiClass.getResource('/' + apiClass.getName().replace('.', '/') + ".class");
}
if (location == null) {
System.out.println("Failed to get a class/package location, skipping " + apiClass);
continue;
}
switch(location.getProtocol()) {
case "jar":
// Find out what jar it came from and consider that the category
String categoryFragment = location.getPath();
// System.out.println("category fragment as path: " + categoryFragment);
int bang = categoryFragment.lastIndexOf("!");
int hyphen = categoryFragment.lastIndexOf("-", bang);
int slash = categoryFragment.lastIndexOf("/", hyphen);
category = categoryFragment.substring(slash + 1, hyphen);
if (isPackage) {
// System.out.println("Jar-based Package: " + apiPackage + ", came from " + location);
sortedApi.put(category, apiPackage + " (PACKAGE)");
} else {
// System.out.println("Jar-based Class: " + apiClass + ", came from " + location);
sortedApi.put(category, apiClass.getName() + (apiClass.isInterface() ? " (INTERFACE)" : " (CLASS)"));
}
break;
case "file":
// If file based we know it is local so organize it like that
category = "terasology engine";
if (isPackage) {
// System.out.println("Local Package: " + apiPackage + ", came from " + location);
sortedApi.put(category, apiPackage + " (PACKAGE)");
} else {
// System.out.println("Local Class: " + apiClass + ", came from " + location);
sortedApi.put(category, apiClass.getName() + (apiClass.isInterface() ? " (INTERFACE)" : " (CLASS)"));
}
break;
default:
System.out.println("Unknown protocol for: " + apiClass + ", came from " + location);
}
}
sortedApi.putAll("external", ExternalApiWhitelist.CLASSES.stream().map(clazz -> clazz.getName() + " (CLASS)").collect(Collectors.toSet()));
sortedApi.putAll("external", ExternalApiWhitelist.PACKAGES.stream().map(packagee -> packagee + " (PACKAGE)").collect(Collectors.toSet()));
System.out.println("# Modding API:\n");
for (String key : sortedApi.keySet()) {
System.out.println("## " + key + "\n");
for (String value : sortedApi.get(key)) {
System.out.println("* " + value);
}
System.out.println("");
}
}
use of org.terasology.gestalt.module.ModuleEnvironment in project Terasology by MovingBlocks.
the class StorageManagerTest method setup.
@BeforeEach
public void setup(@TempDir Path tempHome) throws Exception {
super.setup();
PathManager.getInstance().useOverrideHomePath(tempHome);
savePath = PathManager.getInstance().getSavePath("testSave");
assert !Files.isRegularFile(tempHome.resolve("global.dat"));
entityManager = context.get(EngineEntityManager.class);
moduleEnvironment = mock(ModuleEnvironment.class);
blockManager = context.get(BlockManager.class);
extraDataManager = context.get(ExtraBlockDataManager.class);
ModuleManager moduleManager = mock(ModuleManager.class);
when(moduleManager.getEnvironment()).thenReturn(moduleEnvironment);
RecordedEventStore recordedEventStore = new RecordedEventStore();
recordAndReplayUtils = new RecordAndReplayUtils();
CharacterStateEventPositionMap characterStateEventPositionMap = new CharacterStateEventPositionMap();
DirectionAndOriginPosRecorderList directionAndOriginPosRecorderList = new DirectionAndOriginPosRecorderList();
recordAndReplaySerializer = new RecordAndReplaySerializer(entityManager, recordedEventStore, recordAndReplayUtils, characterStateEventPositionMap, directionAndOriginPosRecorderList, moduleManager, mock(TypeRegistry.class));
recordAndReplayCurrentStatus = context.get(RecordAndReplayCurrentStatus.class);
esm = new ReadWriteStorageManager(savePath, moduleEnvironment, entityManager, blockManager, extraDataManager, false, recordAndReplaySerializer, recordAndReplayUtils, recordAndReplayCurrentStatus);
context.put(StorageManager.class, esm);
this.character = entityManager.create();
Client client = createClientMock(PLAYER_ID, character);
NetworkSystem networkSystem = mock(NetworkSystem.class);
when(networkSystem.getMode()).thenReturn(NetworkMode.NONE);
when(networkSystem.getPlayers()).thenReturn(Arrays.asList(client));
context.put(NetworkSystem.class, networkSystem);
AssetManager assetManager = context.get(AssetManager.class);
BlockFamilyDefinitionData data = new BlockFamilyDefinitionData();
data.setBlockFamily(SymmetricFamily.class);
assetManager.loadAsset(new ResourceUrn("test:testblock"), data, BlockFamilyDefinition.class);
assetManager.loadAsset(new ResourceUrn("test:testblock2"), data, BlockFamilyDefinition.class);
testBlock = context.get(BlockManager.class).getBlock("test:testblock");
testBlock2 = context.get(BlockManager.class).getBlock("test:testblock2");
context.put(ChunkProvider.class, mock(ChunkProvider.class));
WorldProvider worldProvider = mock(WorldProvider.class);
when(worldProvider.getWorldInfo()).thenReturn(new WorldInfo());
context.put(WorldProvider.class, worldProvider);
}
Aggregations