From 06873938b68717bc65bc574656b576e6d920c7db Mon Sep 17 00:00:00 2001 From: Mohammed Alteneiji Date: Thu, 2 Apr 2026 11:50:33 +0400 Subject: [PATCH] setup velocity, ValioBungee api --- api/build.gradle.kts | 15 ----- ...NetworkPlayer.java => ValioBungeeAPI.java} | 2 +- .../api/ValioBungeeAPIProvider.java | 38 ++++++++++++ .../valiobungee/api/entity/NetworkPlayer.java | 36 +++++++++++ .../api/{ => entity}/NetworkProxy.java | 11 +++- api/velocity/build.gradle.kts | 49 +++++++++++++++ .../velocity/api/VelocityValioBungeeAPI.java} | 7 +-- build.gradle.kts | 6 +- .../valiobungee/core/PlayerManager.java | 21 +++++++ .../valiobungee/core/ValioBungeePlatform.java | 15 ++++- .../core/api/AbstractValioBungeeAPI.java | 23 ++++++++ .../api/entities/AbstractNetworkPlayer.java | 59 +++++++++++++++++++ .../AbstractNetworkProxy.java} | 22 +++++-- .../api/entities/NetworkEntitiesProvider.java | 32 ++++++++++ gradle.properties | 1 - settings.gradle.kts | 14 ++++- velocity/build.gradle.kts | 35 +++++++++++ .../velocity/VelocityValioBungeePlugin.java | 50 ++++++++++++++++ 18 files changed, 403 insertions(+), 33 deletions(-) rename api/src/main/java/net/limework/valiobungee/api/{NetworkPlayer.java => ValioBungeeAPI.java} (94%) create mode 100644 api/src/main/java/net/limework/valiobungee/api/ValioBungeeAPIProvider.java create mode 100644 api/src/main/java/net/limework/valiobungee/api/entity/NetworkPlayer.java rename api/src/main/java/net/limework/valiobungee/api/{ => entity}/NetworkProxy.java (83%) create mode 100644 api/velocity/build.gradle.kts rename api/{src/main/java-templates/net/limework/valiobungee/api/APIConstantVariables.java.peb => velocity/src/main/java/net/limework/valiobungee/velocity/api/VelocityValioBungeeAPI.java} (79%) create mode 100644 core/src/main/java/net/limework/valiobungee/core/PlayerManager.java create mode 100644 core/src/main/java/net/limework/valiobungee/core/api/AbstractValioBungeeAPI.java create mode 100644 core/src/main/java/net/limework/valiobungee/core/api/entities/AbstractNetworkPlayer.java rename core/src/main/java/net/limework/valiobungee/core/api/{impl/ImplNetworkProxy.java => entities/AbstractNetworkProxy.java} (68%) create mode 100644 core/src/main/java/net/limework/valiobungee/core/api/entities/NetworkEntitiesProvider.java create mode 100644 velocity/build.gradle.kts create mode 100644 velocity/src/main/java/net/limework/valiobungee/velocity/VelocityValioBungeePlugin.java diff --git a/api/build.gradle.kts b/api/build.gradle.kts index d0c2bca..0ed72af 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -1,20 +1,5 @@ description = "Api functions for valiobungee" -plugins { - alias(libs.plugins.blossom) - alias(libs.plugins.indragit) -} - - -sourceSets { - main { - blossom { - javaSources { - property("apiversion", project.property("api-version").toString()) - } - } - } -} java { withJavadocJar() diff --git a/api/src/main/java/net/limework/valiobungee/api/NetworkPlayer.java b/api/src/main/java/net/limework/valiobungee/api/ValioBungeeAPI.java similarity index 94% rename from api/src/main/java/net/limework/valiobungee/api/NetworkPlayer.java rename to api/src/main/java/net/limework/valiobungee/api/ValioBungeeAPI.java index 4521415..f1e2bd3 100644 --- a/api/src/main/java/net/limework/valiobungee/api/NetworkPlayer.java +++ b/api/src/main/java/net/limework/valiobungee/api/ValioBungeeAPI.java @@ -15,4 +15,4 @@ */ package net.limework.valiobungee.api; -public interface NetworkPlayer {} +public interface ValioBungeeAPI {} diff --git a/api/src/main/java/net/limework/valiobungee/api/ValioBungeeAPIProvider.java b/api/src/main/java/net/limework/valiobungee/api/ValioBungeeAPIProvider.java new file mode 100644 index 0000000..667dda9 --- /dev/null +++ b/api/src/main/java/net/limework/valiobungee/api/ValioBungeeAPIProvider.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2026 ValioBungee contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package net.limework.valiobungee.api; + +/** + * this class provides the API object and access to the version and git commit + * + * @since 1.0.0 + */ +public interface ValioBungeeAPIProvider { + /** + * @return The api object {@link ValioBungeeAPI} + */ + ValioBungeeAPI getAPI(); + + /** + * @return version of the build + */ + String getVersion(); + + /** + * @return GIT COMMIT based on the build + */ + String getGitCommit(); +} diff --git a/api/src/main/java/net/limework/valiobungee/api/entity/NetworkPlayer.java b/api/src/main/java/net/limework/valiobungee/api/entity/NetworkPlayer.java new file mode 100644 index 0000000..bf4ef46 --- /dev/null +++ b/api/src/main/java/net/limework/valiobungee/api/entity/NetworkPlayer.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2026 ValioBungee contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package net.limework.valiobungee.api.entity; + +import java.util.UUID; + +/** + * Network player. + * + * @author Ham1255 + * @since 1.0.0 + */ +public interface NetworkPlayer { + /** + * @return player unique id + */ + UUID getUUID(); + + /** + * @return proxy player on + */ + NetworkProxy getProxy(); +} diff --git a/api/src/main/java/net/limework/valiobungee/api/NetworkProxy.java b/api/src/main/java/net/limework/valiobungee/api/entity/NetworkProxy.java similarity index 83% rename from api/src/main/java/net/limework/valiobungee/api/NetworkProxy.java rename to api/src/main/java/net/limework/valiobungee/api/entity/NetworkProxy.java index 1f637e8..0a2be68 100644 --- a/api/src/main/java/net/limework/valiobungee/api/NetworkProxy.java +++ b/api/src/main/java/net/limework/valiobungee/api/entity/NetworkProxy.java @@ -13,7 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package net.limework.valiobungee.api; +package net.limework.valiobungee.api.entity; + +import java.util.Set; /** * Proxy is an object for online proxy in a network @@ -30,7 +32,12 @@ public interface NetworkProxy { /** * @return online players number in this proxy */ - int onlinePlayers(); + int onlinePlayersCount(); + + /** + * @return Returns set of players in this proxy + */ + Set networkPlayers(); /** * @return returns true if this object is proxy on it diff --git a/api/velocity/build.gradle.kts b/api/velocity/build.gradle.kts new file mode 100644 index 0000000..36dcb28 --- /dev/null +++ b/api/velocity/build.gradle.kts @@ -0,0 +1,49 @@ +plugins { + `java-library` + `maven-publish` +} + +dependencies { + compileOnly(libs.platform.velocity) + api(project(":valiobungee-api")) +} + +description = "ValioBungee Velocity API" + +java { + withJavadocJar() + withSourcesJar() +} + +tasks { + withType { + dependsOn(project(":valiobungee-api").getTasksByName("javadoc", false)) + val options = options as StandardJavadocDocletOptions + options.use() + options.isDocFilesSubDirs = true + options.links( + "https://jd.papermc.io/velocity/3.5.0/", // velocity api + ) + val apiDocs = File(rootProject.projectDir, "api/build/docs/javadoc") + //options.linksOffline("https://ci.limework.net/ValioBungee/api/build/docs/javadoc", apiDocs.path) + } + compileJava { + options.encoding = Charsets.UTF_8.name() + options.release.set(21) // required by velocity + } + javadoc { + options.encoding = Charsets.UTF_8.name() + } + processResources { + filteringCharset = Charsets.UTF_8.name() + } + +} + +publishing { + publications { + create("maven") { + from(components["java"]) + } + } +} diff --git a/api/src/main/java-templates/net/limework/valiobungee/api/APIConstantVariables.java.peb b/api/velocity/src/main/java/net/limework/valiobungee/velocity/api/VelocityValioBungeeAPI.java similarity index 79% rename from api/src/main/java-templates/net/limework/valiobungee/api/APIConstantVariables.java.peb rename to api/velocity/src/main/java/net/limework/valiobungee/velocity/api/VelocityValioBungeeAPI.java index 3012852..167ae8f 100644 --- a/api/src/main/java-templates/net/limework/valiobungee/api/APIConstantVariables.java.peb +++ b/api/velocity/src/main/java/net/limework/valiobungee/velocity/api/VelocityValioBungeeAPI.java @@ -13,9 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package net.limework.valiobungee.api; +package net.limework.valiobungee.velocity.api; -public class APIConstantVariables { +import net.limework.valiobungee.api.ValioBungeeAPI; - public static final String API_VERSION = "{{ apiversion }}"; -} +public interface VelocityValioBungeeAPI extends ValioBungeeAPI {} diff --git a/build.gradle.kts b/build.gradle.kts index 7934b91..8b2b23f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,11 +26,13 @@ subprojects { } extensions.configure { var redisBungeeProjects = sequenceOf("RedisBungee-API", "RedisBungee-Lang", "RedisBungee-Commands", "RedisBungee-Bungee", "RedisBungee-Proxy-Bungee", "RedisBungee-Velocity", "RedisBungee-Proxy-Velocity") + var apiProjects = sequenceOf("valiobungee-api", "valiobungee-velocity-api") + java { removeUnusedImports() googleJavaFormat() - if (project.name == "valiobungee-api") { - licenseHeaderFile(file("copyright_header.txt")) + if (apiProjects.contains(project.name)) { + licenseHeaderFile(rootProject.file("api/copyright_header.txt")) } else if (redisBungeeProjects.contains(project.name)) { licenseHeaderFile(rootProject.file("redisbungee/copyright_header.txt")) } else { diff --git a/core/src/main/java/net/limework/valiobungee/core/PlayerManager.java b/core/src/main/java/net/limework/valiobungee/core/PlayerManager.java new file mode 100644 index 0000000..ffa77b7 --- /dev/null +++ b/core/src/main/java/net/limework/valiobungee/core/PlayerManager.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2026 ValioBungee contributors + * + * This file is part of ValioBungee. + * + * ValioBungee 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. + * + * ValioBungee 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 ValioBungee. If not, see . + */ +package net.limework.valiobungee.core; + +public abstract class PlayerManager {} diff --git a/core/src/main/java/net/limework/valiobungee/core/ValioBungeePlatform.java b/core/src/main/java/net/limework/valiobungee/core/ValioBungeePlatform.java index 31ae8fb..433caeb 100644 --- a/core/src/main/java/net/limework/valiobungee/core/ValioBungeePlatform.java +++ b/core/src/main/java/net/limework/valiobungee/core/ValioBungeePlatform.java @@ -18,7 +18,10 @@ */ package net.limework.valiobungee.core; -public interface ValioBungeePlatform { +import net.limework.valiobungee.api.ValioBungeeAPIProvider; +import net.limework.valiobungee.core.api.entities.NetworkEntitiesProvider; + +public interface ValioBungeePlatform extends NetworkEntitiesProvider, ValioBungeeAPIProvider { int localOnlinePlayers(); @@ -29,4 +32,14 @@ public interface ValioBungeePlatform { String proxyId(); ProxyManager proxyManager(); + + @Override + default String getGitCommit() { + return ConstantVariables.GIT_COMMIT; + } + + @Override + default String getVersion() { + return ConstantVariables.VERSION; + } } diff --git a/core/src/main/java/net/limework/valiobungee/core/api/AbstractValioBungeeAPI.java b/core/src/main/java/net/limework/valiobungee/core/api/AbstractValioBungeeAPI.java new file mode 100644 index 0000000..9dbe987 --- /dev/null +++ b/core/src/main/java/net/limework/valiobungee/core/api/AbstractValioBungeeAPI.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2026 ValioBungee contributors + * + * This file is part of ValioBungee. + * + * ValioBungee 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. + * + * ValioBungee 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 ValioBungee. If not, see . + */ +package net.limework.valiobungee.core.api; + +import net.limework.valiobungee.api.ValioBungeeAPI; + +public class AbstractValioBungeeAPI implements ValioBungeeAPI {} diff --git a/core/src/main/java/net/limework/valiobungee/core/api/entities/AbstractNetworkPlayer.java b/core/src/main/java/net/limework/valiobungee/core/api/entities/AbstractNetworkPlayer.java new file mode 100644 index 0000000..a11ac25 --- /dev/null +++ b/core/src/main/java/net/limework/valiobungee/core/api/entities/AbstractNetworkPlayer.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2026 ValioBungee contributors + * + * This file is part of ValioBungee. + * + * ValioBungee 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. + * + * ValioBungee 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 ValioBungee. If not, see . + */ +package net.limework.valiobungee.core.api.entities; + +import java.util.Objects; +import java.util.UUID; +import net.limework.valiobungee.api.entity.NetworkPlayer; +import net.limework.valiobungee.api.entity.NetworkProxy; +import net.limework.valiobungee.core.ValioBungeePlatform; + +public abstract class AbstractNetworkPlayer implements NetworkPlayer { + + private final ValioBungeePlatform platform; + private final UUID uuid; + private final NetworkProxy proxy; + + public AbstractNetworkPlayer(ValioBungeePlatform platform, UUID uuid, NetworkProxy proxy) { + this.platform = platform; + this.uuid = uuid; + this.proxy = proxy; + } + + @Override + public UUID getUUID() { + return this.uuid; + } + + @Override + public NetworkProxy getProxy() { + return this.proxy; + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof AbstractNetworkPlayer that)) return false; + return Objects.equals(uuid, that.uuid) && Objects.equals(proxy, that.proxy); + } + + @Override + public int hashCode() { + return Objects.hash(uuid, proxy); + } +} diff --git a/core/src/main/java/net/limework/valiobungee/core/api/impl/ImplNetworkProxy.java b/core/src/main/java/net/limework/valiobungee/core/api/entities/AbstractNetworkProxy.java similarity index 68% rename from core/src/main/java/net/limework/valiobungee/core/api/impl/ImplNetworkProxy.java rename to core/src/main/java/net/limework/valiobungee/core/api/entities/AbstractNetworkProxy.java index e3ddec4..f90ce39 100644 --- a/core/src/main/java/net/limework/valiobungee/core/api/impl/ImplNetworkProxy.java +++ b/core/src/main/java/net/limework/valiobungee/core/api/entities/AbstractNetworkProxy.java @@ -16,18 +16,19 @@ * You should have received a copy of the GNU General Public License * along with ValioBungee. If not, see . */ -package net.limework.valiobungee.core.api.impl; +package net.limework.valiobungee.core.api.entities; -import net.limework.valiobungee.api.NetworkProxy; +import java.util.Objects; +import net.limework.valiobungee.api.entity.NetworkProxy; import net.limework.valiobungee.core.ValioBungeePlatform; -public class ImplNetworkProxy implements NetworkProxy { +public abstract class AbstractNetworkProxy implements NetworkProxy { private final ValioBungeePlatform platform; private final String proxyId; - public ImplNetworkProxy(ValioBungeePlatform platform, String proxyId) { + public AbstractNetworkProxy(ValioBungeePlatform platform, String proxyId) { this.platform = platform; this.proxyId = proxyId; } @@ -38,7 +39,7 @@ public class ImplNetworkProxy implements NetworkProxy { } @Override - public int onlinePlayers() { + public int onlinePlayersCount() { return this.platform.proxyManager().onlinePlayersCount(this.proxyId); } @@ -46,4 +47,15 @@ public class ImplNetworkProxy implements NetworkProxy { public boolean isMe() { return this.platform.proxyId().equals(proxyId); } + + @Override + public boolean equals(Object o) { + if (!(o instanceof AbstractNetworkProxy that)) return false; + return Objects.equals(proxyId, that.proxyId); + } + + @Override + public int hashCode() { + return Objects.hashCode(proxyId); + } } diff --git a/core/src/main/java/net/limework/valiobungee/core/api/entities/NetworkEntitiesProvider.java b/core/src/main/java/net/limework/valiobungee/core/api/entities/NetworkEntitiesProvider.java new file mode 100644 index 0000000..2e75b5a --- /dev/null +++ b/core/src/main/java/net/limework/valiobungee/core/api/entities/NetworkEntitiesProvider.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2026 ValioBungee contributors + * + * This file is part of ValioBungee. + * + * ValioBungee 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. + * + * ValioBungee 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 ValioBungee. If not, see . + */ +package net.limework.valiobungee.core.api.entities; + +import java.util.UUID; +import net.limework.valiobungee.api.entity.NetworkPlayer; +import net.limework.valiobungee.api.entity.NetworkProxy; + +public interface NetworkEntitiesProvider { + + NetworkPlayer getNetworkPlayer(UUID uuid); + + NetworkProxy getNetworkProxy(String id); + + NetworkProxy getSelfProxy(); +} diff --git a/gradle.properties b/gradle.properties index 27abe91..47ef183 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,5 @@ group=net.limework version=1.0.0-SNAPSHOT -api-version=v1 redisbungee-group=com.imaginarycode.minecraft redisbungee-version=0.13.0-SNAPSHOT \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 07554c0..4750dcd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,5 @@ @file:Suppress("UnstableApiUsage") + pluginManagement { repositories { gradlePluginPortal() @@ -9,8 +10,14 @@ rootProject.name = "ValioBungee" fun configureProject(name: String) { val projectName = ":valiobungee-$name" - configureProject(projectName,name) + configureProject(projectName, name) } + +fun configureAPIProject(name: String) { + val projectName = ":valiobungee-$name-api" + configureProject(projectName, "api/$name") +} + fun configureProject(name: String, path: String) { include(name) project(name).projectDir = file(path) @@ -27,7 +34,10 @@ dependencyResolutionManagement { } // main project stuff -sequenceOf("core", "api").forEach{configureProject(it)} +sequenceOf("api", "core", "velocity").forEach { configureProject(it) } +// api +sequenceOf("velocity").forEach { configureAPIProject(it) } + // RedisBunggee Project configureProject(":RedisBungee-API", "redisbungee/api") configureProject(":RedisBungee-Lang", "redisbungee/lang") diff --git a/velocity/build.gradle.kts b/velocity/build.gradle.kts new file mode 100644 index 0000000..863ab8d --- /dev/null +++ b/velocity/build.gradle.kts @@ -0,0 +1,35 @@ +plugins { + java + alias(libs.plugins.shadow) + alias(libs.plugins.run.velocity) +} + + +dependencies { + implementation(project(":valiobungee-velocity-api")) + implementation(project(":valiobungee-core")) + compileOnly(libs.platform.velocity) + annotationProcessor(libs.platform.velocity) +} + +description = "ValioBungee Velocity implementation" + +java { + withSourcesJar() +} + +tasks { + runVelocity { + velocityVersion(libs.versions.velocity.get()) + } + compileJava { + options.encoding = Charsets.UTF_8.name() + options.release.set(21) // required by velocity + } + processResources { + filteringCharset = Charsets.UTF_8.name() + } + + +} + diff --git a/velocity/src/main/java/net/limework/valiobungee/velocity/VelocityValioBungeePlugin.java b/velocity/src/main/java/net/limework/valiobungee/velocity/VelocityValioBungeePlugin.java new file mode 100644 index 0000000..9a139d1 --- /dev/null +++ b/velocity/src/main/java/net/limework/valiobungee/velocity/VelocityValioBungeePlugin.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2026 ValioBungee contributors + * + * This file is part of ValioBungee. + * + * ValioBungee 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. + * + * ValioBungee 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 ValioBungee. If not, see . + */ +package net.limework.valiobungee.velocity; + +import com.velocitypowered.api.plugin.Plugin; +import com.velocitypowered.api.plugin.annotation.DataDirectory; +import com.velocitypowered.api.proxy.ProxyServer; +import net.limework.valiobungee.core.ConstantVariables; +import net.limework.valiobungee.core.ValioBungeePlatform; +import org.slf4j.Logger; + +import java.nio.file.Path; + +@Plugin( + id = "valiobungee", + name = "valiobungee", + version = ConstantVariables.VERSION, + url = "https://github.com/ProxioDev/ValioBungee", + authors = {"limework", "ProxioDev"}) +public class VelocityValioBungeePlugin implements ValioBungeePlatform { + + private final ProxyServer server; + private final Logger logger; + private final Path dataFolder; + + public VelocityValioBungeePlugin( ProxyServer server, Logger logger, @DataDirectory Path dataDirectory) { + this.server = server; + this.logger = logger; + this.dataFolder = dataDirectory; + } + + + +}