From fc387781bba9d875f657bf84c9d88bc135ab1ff7 Mon Sep 17 00:00:00 2001 From: Kyle Gunger Date: Sat, 9 Jan 2021 03:36:12 -0500 Subject: New layout ~ Switch from net.corechg.mc to net.corechg ~ Update to newer build system --- LICENSE | 142 +++++++++-- README.md | 14 +- build.gradle | 42 ++-- gradle.properties | 12 +- gradle/wrapper/gradle-wrapper.jar | Bin 58910 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 +- gradlew.bat | 21 +- src/main/java/net/corechg/mc/transit/Transit.java | 13 - .../mc/transit/basic/AbstractAcceptorNode.java | 51 ---- .../net/corechg/mc/transit/basic/AbstractNode.java | 45 ---- .../mc/transit/basic/AbstractProviderNode.java | 47 ---- .../mc/transit/basic/AbstractTwoWayNode.java | 47 ---- .../mc/transit/basic/system/AbstractSystem.java | 13 - .../transit/basic/system/AbstractSystemNode.java | 12 - .../mc/transit/network/packet/IStaticPacket.java | 23 -- .../mc/transit/network/packet/MetaPacket.java | 35 --- .../mc/transit/network/packet/StaticPacket.java | 36 --- .../network/packet/dynamic/DynamicPacket.java | 43 ---- .../network/packet/dynamic/IDynamicPacket.java | 16 -- .../network/packet/dynamic/MetaDynamicPacket.java | 44 ---- .../mc/transit/network/system/Connection.java | 49 ---- .../corechg/mc/transit/network/system/INode.java | 53 ---- .../corechg/mc/transit/network/system/ISystem.java | 15 -- .../transit/network/system/swap/IAcceptorNode.java | 37 --- .../transit/network/system/swap/IProviderNode.java | 27 --- .../java/net/corechg/mc/transit/type/TFluid.java | 33 --- .../java/net/corechg/mc/transit/type/TMana.java | 31 --- .../java/net/corechg/mc/transit/type/Type.java | 66 ----- .../mc/transit/type/group/GroupRegistry.java | 56 ----- .../corechg/mc/transit/type/group/TypeGroup.java | 267 --------------------- .../mc/transit/type/group/simple/SimpleGroups.java | 32 --- .../mc/transit/type/simple/SimpleTypes.java | 22 -- src/main/java/net/corechg/transit/Transit.java | 13 + .../transit/basic/AbstractAcceptorNode.java | 51 ++++ .../net/corechg/transit/basic/AbstractNode.java | 45 ++++ .../transit/basic/AbstractProviderNode.java | 47 ++++ .../corechg/transit/basic/AbstractTwoWayNode.java | 47 ++++ .../transit/basic/system/AbstractSystem.java | 13 + .../transit/basic/system/AbstractSystemNode.java | 12 + .../transit/network/packet/IStaticPacket.java | 23 ++ .../corechg/transit/network/packet/MetaPacket.java | 35 +++ .../transit/network/packet/StaticPacket.java | 36 +++ .../network/packet/dynamic/DynamicPacket.java | 43 ++++ .../network/packet/dynamic/IDynamicPacket.java | 16 ++ .../network/packet/dynamic/MetaDynamicPacket.java | 44 ++++ .../corechg/transit/network/system/Connection.java | 49 ++++ .../net/corechg/transit/network/system/INode.java | 53 ++++ .../corechg/transit/network/system/ISystem.java | 15 ++ .../transit/network/system/swap/IAcceptorNode.java | 37 +++ .../transit/network/system/swap/IProviderNode.java | 27 +++ src/main/java/net/corechg/transit/type/TFluid.java | 33 +++ src/main/java/net/corechg/transit/type/TMana.java | 31 +++ src/main/java/net/corechg/transit/type/Type.java | 66 +++++ .../corechg/transit/type/group/GroupRegistry.java | 56 +++++ .../net/corechg/transit/type/group/TypeGroup.java | 267 +++++++++++++++++++++ .../transit/type/group/simple/SimpleGroups.java | 32 +++ .../corechg/transit/type/simple/SimpleTypes.java | 22 ++ src/main/resources/fabric.mod.json | 6 +- 59 files changed, 1279 insertions(+), 1188 deletions(-) delete mode 100644 src/main/java/net/corechg/mc/transit/Transit.java delete mode 100644 src/main/java/net/corechg/mc/transit/basic/AbstractAcceptorNode.java delete mode 100644 src/main/java/net/corechg/mc/transit/basic/AbstractNode.java delete mode 100644 src/main/java/net/corechg/mc/transit/basic/AbstractProviderNode.java delete mode 100644 src/main/java/net/corechg/mc/transit/basic/AbstractTwoWayNode.java delete mode 100644 src/main/java/net/corechg/mc/transit/basic/system/AbstractSystem.java delete mode 100644 src/main/java/net/corechg/mc/transit/basic/system/AbstractSystemNode.java delete mode 100644 src/main/java/net/corechg/mc/transit/network/packet/IStaticPacket.java delete mode 100644 src/main/java/net/corechg/mc/transit/network/packet/MetaPacket.java delete mode 100644 src/main/java/net/corechg/mc/transit/network/packet/StaticPacket.java delete mode 100644 src/main/java/net/corechg/mc/transit/network/packet/dynamic/DynamicPacket.java delete mode 100644 src/main/java/net/corechg/mc/transit/network/packet/dynamic/IDynamicPacket.java delete mode 100644 src/main/java/net/corechg/mc/transit/network/packet/dynamic/MetaDynamicPacket.java delete mode 100644 src/main/java/net/corechg/mc/transit/network/system/Connection.java delete mode 100644 src/main/java/net/corechg/mc/transit/network/system/INode.java delete mode 100644 src/main/java/net/corechg/mc/transit/network/system/ISystem.java delete mode 100644 src/main/java/net/corechg/mc/transit/network/system/swap/IAcceptorNode.java delete mode 100644 src/main/java/net/corechg/mc/transit/network/system/swap/IProviderNode.java delete mode 100644 src/main/java/net/corechg/mc/transit/type/TFluid.java delete mode 100644 src/main/java/net/corechg/mc/transit/type/TMana.java delete mode 100644 src/main/java/net/corechg/mc/transit/type/Type.java delete mode 100644 src/main/java/net/corechg/mc/transit/type/group/GroupRegistry.java delete mode 100644 src/main/java/net/corechg/mc/transit/type/group/TypeGroup.java delete mode 100644 src/main/java/net/corechg/mc/transit/type/group/simple/SimpleGroups.java delete mode 100644 src/main/java/net/corechg/mc/transit/type/simple/SimpleTypes.java create mode 100644 src/main/java/net/corechg/transit/Transit.java create mode 100644 src/main/java/net/corechg/transit/basic/AbstractAcceptorNode.java create mode 100644 src/main/java/net/corechg/transit/basic/AbstractNode.java create mode 100644 src/main/java/net/corechg/transit/basic/AbstractProviderNode.java create mode 100644 src/main/java/net/corechg/transit/basic/AbstractTwoWayNode.java create mode 100644 src/main/java/net/corechg/transit/basic/system/AbstractSystem.java create mode 100644 src/main/java/net/corechg/transit/basic/system/AbstractSystemNode.java create mode 100644 src/main/java/net/corechg/transit/network/packet/IStaticPacket.java create mode 100644 src/main/java/net/corechg/transit/network/packet/MetaPacket.java create mode 100644 src/main/java/net/corechg/transit/network/packet/StaticPacket.java create mode 100644 src/main/java/net/corechg/transit/network/packet/dynamic/DynamicPacket.java create mode 100644 src/main/java/net/corechg/transit/network/packet/dynamic/IDynamicPacket.java create mode 100644 src/main/java/net/corechg/transit/network/packet/dynamic/MetaDynamicPacket.java create mode 100644 src/main/java/net/corechg/transit/network/system/Connection.java create mode 100644 src/main/java/net/corechg/transit/network/system/INode.java create mode 100644 src/main/java/net/corechg/transit/network/system/ISystem.java create mode 100644 src/main/java/net/corechg/transit/network/system/swap/IAcceptorNode.java create mode 100644 src/main/java/net/corechg/transit/network/system/swap/IProviderNode.java create mode 100644 src/main/java/net/corechg/transit/type/TFluid.java create mode 100644 src/main/java/net/corechg/transit/type/TMana.java create mode 100644 src/main/java/net/corechg/transit/type/Type.java create mode 100644 src/main/java/net/corechg/transit/type/group/GroupRegistry.java create mode 100644 src/main/java/net/corechg/transit/type/group/TypeGroup.java create mode 100644 src/main/java/net/corechg/transit/type/group/simple/SimpleGroups.java create mode 100644 src/main/java/net/corechg/transit/type/simple/SimpleTypes.java diff --git a/LICENSE b/LICENSE index 6490f86..0e259d4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,121 @@ -MIT License - -Copyright (c) 2020 Kyle Gunger - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/README.md b/README.md index 873c2b5..fd96346 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,9 @@ -# TransitAPI -Transit is an attempt to provide simple uniform helpers for converting and transfering abstract types in Minecraft. +# Fabric Example Mod -Transit makes no assumptions about what you transfer or how you transfer it, It only provides basic types for those that need it, and a network based API for compatibility. - -## A note on convention -When working with blocks, the convention is such: -1. The BlockEntity will impliment the INode/IAcceptorNode/IProviderNode interfaces. -2. The Placed block will ask the blocks around it to become a provider and or an acceptor, not the other way around. +## Setup +For setup instructions please see the [fabric wiki page](https://fabricmc.net/wiki/tutorial:setup) that relates to the IDE that you are using. ## License -This mod is available under the MIT licence. + +This template is available under the CC0 license. Feel free to learn from it and incorporate it in your own projects. diff --git a/build.gradle b/build.gradle index 220d900..62083f9 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ version = project.mod_version group = project.maven_group dependencies { - //to change the versions see the gradle.properties file + // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" @@ -31,23 +31,33 @@ processResources { } } -// ensure that the encoding is set to UTF-8, no matter what the system default is -// this fixes some edge cases with special characters not displaying correctly -// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html -tasks.withType(JavaCompile) { - options.encoding = "UTF-8" +tasks.withType(JavaCompile).configureEach { + // ensure that the encoding is set to UTF-8, no matter what the system default is + // this fixes some edge cases with special characters not displaying correctly + // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html + // If Javadoc is generated, this must be specified in that task too. + it.options.encoding = "UTF-8" + + // The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too + // JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used. + // We'll use that if it's available, but otherwise we'll use the older option. + def targetVersion = 8 + if (JavaVersion.current().isJava9Compatible()) { + it.options.release = targetVersion + } } -// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task -// if it is present. -// If you remove this task, sources will not be generated. -task sourcesJar(type: Jar, dependsOn: classes) { - classifier = "sources" - from sourceSets.main.allSource +java { + // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task + // if it is present. + // If you remove this line, sources will not be generated. + withSourcesJar() } jar { - from "LICENSE" + from("LICENSE") { + rename { "${it}_${project.archivesBaseName}"} + } } // configure the maven publication @@ -64,9 +74,9 @@ publishing { } } - // select the repositories you want to publish to + // Select the repositories you want to publish to + // To publish to maven local, no extra repositories are necessary. Just use the task `publishToMavenLocal`. repositories { - // uncomment to publish to the local maven - // mavenLocal() + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. } } diff --git a/gradle.properties b/gradle.properties index 002da7b..d82678b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,15 +3,15 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version=1.16.3 - yarn_mappings=1.16.3+build.17 - loader_version=0.10.0+build.208 + minecraft_version=1.16.4 + yarn_mappings=1.16.4+build.6 + loader_version=0.10.6+build.214 # Mod Properties - mod_version = 0.13.0 - maven_group = net.corechg.mc + mod_version = 0.14.0 + maven_group = net.corechg archives_base_name = transit-api # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.22.0+build.408-1.16 + fabric_version=0.25.1+build.416-1.16 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 62d4c05..e708b1c 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 12d38de..be52383 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index fbd7c51..4f906e0 100755 --- a/gradlew +++ b/gradlew @@ -130,7 +130,7 @@ fi if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath diff --git a/gradlew.bat b/gradlew.bat index 5093609..107acd3 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,21 +64,6 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line @@ -86,7 +71,7 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/src/main/java/net/corechg/mc/transit/Transit.java b/src/main/java/net/corechg/mc/transit/Transit.java deleted file mode 100644 index 36b60bf..0000000 --- a/src/main/java/net/corechg/mc/transit/Transit.java +++ /dev/null @@ -1,13 +0,0 @@ -package net.corechg.mc.transit; - -import net.fabricmc.api.ModInitializer; -import net.corechg.mc.transit.type.group.simple.SimpleGroups; - -public class Transit implements ModInitializer { - - @Override - public void onInitialize() { - SimpleGroups.init(); - } - -} diff --git a/src/main/java/net/corechg/mc/transit/basic/AbstractAcceptorNode.java b/src/main/java/net/corechg/mc/transit/basic/AbstractAcceptorNode.java deleted file mode 100644 index d569557..0000000 --- a/src/main/java/net/corechg/mc/transit/basic/AbstractAcceptorNode.java +++ /dev/null @@ -1,51 +0,0 @@ -package net.corechg.mc.transit.basic; - -import net.corechg.mc.transit.network.packet.IStaticPacket; -import net.corechg.mc.transit.network.system.Connection; -import net.corechg.mc.transit.network.system.swap.*; -import net.minecraft.block.entity.BlockEntityType; - -public abstract class AbstractAcceptorNode extends AbstractNode implements IAcceptorNode { - - public AbstractAcceptorNode(BlockEntityType type) { - super(type); - } - - @Override - public abstract boolean accept(IStaticPacket packet, String group); - - @Override - public boolean linkProvider(IProviderNode requestor, String group) { - if(this.hasGroup(group)) - { - for (Connection c : connections) { - if(c.getNode() == requestor) - return false; - } - - connections.add(new Connection(requestor, (short) 2)); - - return true; - } - - return false; - } - - @Override - public boolean unlinkProvider(IProviderNode requestor) { - for (Connection c : connections) { - if(c.getNode() == requestor) - { - if(c.isAccepting()) - c.setProviding(false); - else - connections.remove(c); - - return true; - } - } - - return false; - } - -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/basic/AbstractNode.java b/src/main/java/net/corechg/mc/transit/basic/AbstractNode.java deleted file mode 100644 index 01c537c..0000000 --- a/src/main/java/net/corechg/mc/transit/basic/AbstractNode.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.corechg.mc.transit.basic; - -import java.util.*; - -import net.corechg.mc.transit.network.system.*; -import net.minecraft.block.entity.*; - -public abstract class AbstractNode extends BlockEntity implements INode { - - public AbstractNode(BlockEntityType type) { - super(type); - } - - HashMap data = new HashMap(); - ArrayList connections = new ArrayList(0); - - @Override - public abstract boolean hasGroup(String groupID); - - @Override - public ISystem getSystem() { - return null; - } - - @Override - public Object getData(String groupID) { - return data.get(groupID); - } - - @Override - public void setData(Object dat, String groupID) { - data.put(groupID, dat); - } - - @Override - public Connection[] getConnections() { - return (Connection[]) connections.toArray(); - } - - @Override - public int connectionCount() { - return connections.size(); - } - -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/basic/AbstractProviderNode.java b/src/main/java/net/corechg/mc/transit/basic/AbstractProviderNode.java deleted file mode 100644 index 7ddc41b..0000000 --- a/src/main/java/net/corechg/mc/transit/basic/AbstractProviderNode.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.corechg.mc.transit.basic; - -import net.corechg.mc.transit.network.system.Connection; -import net.corechg.mc.transit.network.system.swap.*; -import net.minecraft.block.entity.BlockEntityType; - -public abstract class AbstractProviderNode extends AbstractNode implements IProviderNode { - - public AbstractProviderNode(BlockEntityType type) { - super(type); - } - - @Override - public boolean linkAcceptor(IAcceptorNode requestor, String group) { - if(this.hasGroup(group)) - { - for (Connection c : connections) { - if(c.getNode() == requestor) - return false; - } - - connections.add(new Connection(requestor, (short) 1)); - - return true; - } - - return false; - } - - @Override - public boolean unlinkAcceptor(IAcceptorNode requestor) { - for (Connection c : connections) { - if(c.getNode() == requestor) - { - if(c.isProviding()) - c.setAccepting(false); - else - connections.remove(c); - - return true; - } - } - - return false; - } - -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/basic/AbstractTwoWayNode.java b/src/main/java/net/corechg/mc/transit/basic/AbstractTwoWayNode.java deleted file mode 100644 index 1d37245..0000000 --- a/src/main/java/net/corechg/mc/transit/basic/AbstractTwoWayNode.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.corechg.mc.transit.basic; - -import net.corechg.mc.transit.network.system.Connection; -import net.corechg.mc.transit.network.system.swap.*; -import net.minecraft.block.entity.BlockEntityType; - -public abstract class AbstractTwoWayNode extends AbstractAcceptorNode implements IProviderNode { - - public AbstractTwoWayNode(BlockEntityType type) { - super(type); - } - - @Override - public boolean linkAcceptor(IAcceptorNode requestor, String group) { - if(this.hasGroup(group)) - { - for (Connection c : connections) { - if(c.getNode() == requestor) - return false; - } - - connections.add(new Connection(requestor, (short) 1)); - - return true; - } - - return false; - } - - @Override - public boolean unlinkAcceptor(IAcceptorNode requestor) { - for (Connection c : connections) { - if(c.getNode() == requestor) - { - if(c.isProviding()) - c.setAccepting(false); - else - connections.remove(c); - - return true; - } - } - - return false; - } - -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/basic/system/AbstractSystem.java b/src/main/java/net/corechg/mc/transit/basic/system/AbstractSystem.java deleted file mode 100644 index 637a072..0000000 --- a/src/main/java/net/corechg/mc/transit/basic/system/AbstractSystem.java +++ /dev/null @@ -1,13 +0,0 @@ -package net.corechg.mc.transit.basic.system; - -import net.corechg.mc.transit.network.system.*; - -public abstract class AbstractSystem implements ISystem { - - @Override - public INode[] getNodes() { - // TODO Auto-generated method stub - return null; - } - -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/basic/system/AbstractSystemNode.java b/src/main/java/net/corechg/mc/transit/basic/system/AbstractSystemNode.java deleted file mode 100644 index c65c6a2..0000000 --- a/src/main/java/net/corechg/mc/transit/basic/system/AbstractSystemNode.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.corechg.mc.transit.basic.system; - -import net.corechg.mc.transit.basic.*; -import net.minecraft.block.entity.BlockEntityType; - -public abstract class AbstractSystemNode extends AbstractNode { - - public AbstractSystemNode(BlockEntityType type) { - super(type); - } - -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/network/packet/IStaticPacket.java b/src/main/java/net/corechg/mc/transit/network/packet/IStaticPacket.java deleted file mode 100644 index 27dd3fb..0000000 --- a/src/main/java/net/corechg/mc/transit/network/packet/IStaticPacket.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.corechg.mc.transit.network.packet; - -import net.corechg.mc.transit.type.Type; - -/** Interface describing an unchanging packet. - * @author Kyle Gunger - * - * @param The data type (Object) that the packet transfers. - */ -public interface IStaticPacket -{ - /**Get the packet's data. - * - * @return The packet's data - */ - public D getData(); - - /**Get the packet's type. - * - * @return IType<> The type of the packet - */ - public Type getType(); -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/network/packet/MetaPacket.java b/src/main/java/net/corechg/mc/transit/network/packet/MetaPacket.java deleted file mode 100644 index 3195198..0000000 --- a/src/main/java/net/corechg/mc/transit/network/packet/MetaPacket.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.corechg.mc.transit.network.packet; - -import net.corechg.mc.transit.type.Type; - -/** Static packet with extra data attached. - * @author Kyle Gunger - * - * @param The data type (Object) that the packet transfers - * @param The type of metadata -*/ -public class MetaPacket extends StaticPacket -{ - private M metaData; - - /** Constructor - * - * @param dat The data to store - * @param t The Type of the data - * @param meta The metadata to store - */ - public MetaPacket(D dat, Type t, M meta) - { - super(dat, t); - metaData = meta; - } - - /** Get the metadata of the packet. - * - * @return The packet's metadata - */ - public M getMetaData() - { - return metaData; - } -} diff --git a/src/main/java/net/corechg/mc/transit/network/packet/StaticPacket.java b/src/main/java/net/corechg/mc/transit/network/packet/StaticPacket.java deleted file mode 100644 index cf37b02..0000000 --- a/src/main/java/net/corechg/mc/transit/network/packet/StaticPacket.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.corechg.mc.transit.network.packet; - -import net.corechg.mc.transit.type.Type; - -/** Simple packet which stores an unchanging value. - * @author Kyle Gunger - * - * @param The data type (Object) that the packet transfers. - */ -public class StaticPacket implements IStaticPacket -{ - private D data; - private Type type; - - /** Constructor. Stores the given data and uses the given type. - * - * @param dat The packet's data - * @param t The packet's type - */ - public StaticPacket(D dat, Type t) - { - data = dat; - type = t; - } - - @Override - public D getData() - { - return data; - } - - @Override - public Type getType() { - return type; - } -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/network/packet/dynamic/DynamicPacket.java b/src/main/java/net/corechg/mc/transit/network/packet/dynamic/DynamicPacket.java deleted file mode 100644 index e59a762..0000000 --- a/src/main/java/net/corechg/mc/transit/network/packet/dynamic/DynamicPacket.java +++ /dev/null @@ -1,43 +0,0 @@ -package net.corechg.mc.transit.network.packet.dynamic; - -import net.corechg.mc.transit.type.Type; - -/** - * Simple packet which stores a fluid value. - * - * @author Kyle Gunger - * - * @param The data type (Object) that the packet transfers - */ -public class DynamicPacket implements IDynamicPacket { - private D data; - private Type type; - - /** Constructor. Stores the given data and uses the given type. - * - * @param dat The packet's data - * @param t The packet's type - */ - public DynamicPacket(D dat, Type t) - { - data = dat; - type = t; - } - - @Override - public D getData() - { - return data; - } - - @Override - public void setData(D dat) - { - data = dat; - } - - @Override - public Type getType() { - return type; - } -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/network/packet/dynamic/IDynamicPacket.java b/src/main/java/net/corechg/mc/transit/network/packet/dynamic/IDynamicPacket.java deleted file mode 100644 index 096d289..0000000 --- a/src/main/java/net/corechg/mc/transit/network/packet/dynamic/IDynamicPacket.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.corechg.mc.transit.network.packet.dynamic; - -import net.corechg.mc.transit.network.packet.IStaticPacket; - -/** Interface describing a fluid packet. - * @author Kyle Gunger - * - * @param The data type (Object) that the packet transfers - */ -public interface IDynamicPacket extends IStaticPacket{ - /**Set the packet's data. - * - * @return The packet's data - */ - public void setData(D dat); -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/network/packet/dynamic/MetaDynamicPacket.java b/src/main/java/net/corechg/mc/transit/network/packet/dynamic/MetaDynamicPacket.java deleted file mode 100644 index fd4c24d..0000000 --- a/src/main/java/net/corechg/mc/transit/network/packet/dynamic/MetaDynamicPacket.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.corechg.mc.transit.network.packet.dynamic; - -import net.corechg.mc.transit.type.Type; - -/** Static packet with extra data attached. - * @author Kyle Gunger - * - * @param The data type (Object) that the packet transfers - * @param The type of metadata -*/ -public class MetaDynamicPacket extends DynamicPacket -{ - private M metaData; - - /** Constructor - * - * @param dat The data to store - * @param t The Type of the data - * @param meta The metadata to store - */ - public MetaDynamicPacket(D dat, Type t, M meta) - { - super(dat, t); - metaData = meta; - } - - /** Get the metadata of the packet. - * - * @return The packet's metadata - */ - public M getMetaData() - { - return metaData; - } - - /** Set the metadata of the packet. - * - * @param meta The packet's new metadata - */ - public void setMetaData(M meta) - { - metaData = meta; - } -} diff --git a/src/main/java/net/corechg/mc/transit/network/system/Connection.java b/src/main/java/net/corechg/mc/transit/network/system/Connection.java deleted file mode 100644 index bb53f93..0000000 --- a/src/main/java/net/corechg/mc/transit/network/system/Connection.java +++ /dev/null @@ -1,49 +0,0 @@ -package net.corechg.mc.transit.network.system; - -public class Connection { - INode node; - short mask; - - public Connection(INode n) - { - node = n; - mask = 0; - } - - public Connection(INode n, short m) - { - node = n; - mask = m; - } - - public INode getNode() - { - return node; - } - - public boolean isAccepting() - { - return (mask & 1) == 1; - } - - public void setAccepting(boolean value) - { - if(isAccepting() && value == false) - mask -= 1; - else if(!isAccepting() && value == true) - mask += 1; - } - - public boolean isProviding() - { - return (mask & 2) == 2; - } - - public void setProviding(boolean value) - { - if(isProviding() && value == false) - mask -= 2; - else if(!isProviding() && value == true) - mask += 2; - } -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/network/system/INode.java b/src/main/java/net/corechg/mc/transit/network/system/INode.java deleted file mode 100644 index 71733e6..0000000 --- a/src/main/java/net/corechg/mc/transit/network/system/INode.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.corechg.mc.transit.network.system; - -/** - * @author Kyle Gunger - * @apiNote A node inside or outside a system. - */ -public interface INode -{ - - /**Returns true if the group given is used by the node - * - * @param groupID the group to querry - * @return bool - */ - public boolean hasGroup(String groupID); - - - /**Get the system managing the node or {@code null} if there isn't one - * - * @return System - */ - public ISystem getSystem(); - - - /** Get the data of one of the TypeGroups the Node supports - * - * @param groupID - * @return - */ - public Object getData(String groupID); - - - /** Set the group data for the node - * - * @param dat - * @param groupID - */ - public void setData(Object dat, String groupID); - - - /** Get the nodes that this node is connected to - * - * @return Node[] - */ - public Connection[] getConnections(); - - - /** Get the number of nodes that this node is connected to - * - * @return int - */ - public int connectionCount(); -} diff --git a/src/main/java/net/corechg/mc/transit/network/system/ISystem.java b/src/main/java/net/corechg/mc/transit/network/system/ISystem.java deleted file mode 100644 index 0ebb656..0000000 --- a/src/main/java/net/corechg/mc/transit/network/system/ISystem.java +++ /dev/null @@ -1,15 +0,0 @@ -package net.corechg.mc.transit.network.system; - - -/** - * @author Kyle Gunger - * @apiNote An ISystem represents a system of nodes which has been optimized for performance. A node can exist on its own, but an ISystem can't exist without a node. - */ -public interface ISystem -{ - /**The nodes stored by the system - * - * @return INode[] - */ - public INode[] getNodes(); -} diff --git a/src/main/java/net/corechg/mc/transit/network/system/swap/IAcceptorNode.java b/src/main/java/net/corechg/mc/transit/network/system/swap/IAcceptorNode.java deleted file mode 100644 index 61f6022..0000000 --- a/src/main/java/net/corechg/mc/transit/network/system/swap/IAcceptorNode.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.corechg.mc.transit.network.system.swap; - -import net.corechg.mc.transit.network.packet.IStaticPacket; -import net.corechg.mc.transit.network.system.INode; - -/** - * @author Kyle Gunger - * @apiNote A node which can accept packets of specific types - */ -public interface IAcceptorNode extends INode -{ - - /** Link another node as a provider - * - * @param requester The object to be a provider - * @param group - * @return - */ - public boolean linkProvider(IProviderNode requestor, String group); - - - /** Unlink a provider from the acceptor - * - * @param requestor - * @return - */ - public boolean unlinkProvider(IProviderNode requestor); - - - /** Accept a packet from a provider - * - * @param packet - * @param group - * @return - */ - public boolean accept(IStaticPacket packet, String group); -} diff --git a/src/main/java/net/corechg/mc/transit/network/system/swap/IProviderNode.java b/src/main/java/net/corechg/mc/transit/network/system/swap/IProviderNode.java deleted file mode 100644 index 62a45b7..0000000 --- a/src/main/java/net/corechg/mc/transit/network/system/swap/IProviderNode.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.corechg.mc.transit.network.system.swap; - -import net.corechg.mc.transit.network.system.INode; - -/** - * @author Kyle Gunger - * @apiNote A node which can provide packets of specific types - */ -public interface IProviderNode extends INode{ - - /** Link another node as an acceptor - * - * @param requester The object requesting the Acceptor - * @param group - * @return boolean - */ - public boolean linkAcceptor(IAcceptorNode requestor, String group); - - - /** Unlink a provider from the acceptor - * - * @param requestor - * @return - */ - public boolean unlinkAcceptor(IAcceptorNode requestor); - -} diff --git a/src/main/java/net/corechg/mc/transit/type/TFluid.java b/src/main/java/net/corechg/mc/transit/type/TFluid.java deleted file mode 100644 index 9f00a9b..0000000 --- a/src/main/java/net/corechg/mc/transit/type/TFluid.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.corechg.mc.transit.type; - -import net.minecraft.fluid.Fluid; - -/** Units of fluid. - * @author Kyle Gunger - */ -public class TFluid { - private Fluid fluid; - private Number millibuckets; - - /** Constructor - * - * @param f Fluid stored (Water/Lava/etc.) - * @param mb Count of fluid (mB) - */ - public TFluid(Fluid f, Number mb) { - fluid = f; - millibuckets = mb; - } - - /** Get the fluid stored. - */ - public Fluid getFluid() { - return fluid; - } - - /** Get the millibuckets stored. - */ - public Number getMilliBuckets() { - return millibuckets; - } -} \ No newline at end of file diff --git a/src/main/java/net/corechg/mc/transit/type/TMana.java b/src/main/java/net/corechg/mc/transit/type/TMana.java deleted file mode 100644 index 16983b7..0000000 --- a/src/main/java/net/corechg/mc/transit/type/TMana.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.corechg.mc.transit.type; - -/** Units of mana. - * @author Kyle Gunger - */ -public class TMana { - private String type; - private Number count; - - /** Constructor - * - * @param t Type of mana (Fire/Water/Dark/Light/etc.) leave empty string for an untyped mana system. - * @param ct Count of mana - */ - public TMana(String t, Number ct) { - type = t; - count = ct; - } - - /** Get the mana type. - */ - public String getType() { - return type; - } - - /** Get the mana stored. - */ - public Number getCount() { - return count; - } -} diff --git a/src/main/java/net/corechg/mc/transit/type/Type.java b/src/main/java/net/corechg/mc/transit/type/Type.java deleted file mode 100644 index 7ac670e..0000000 --- a/src/main/java/net/corechg/mc/transit/type/Type.java +++ /dev/null @@ -1,66 +0,0 @@ -package net.corechg.mc.transit.type; - -import net.corechg.mc.transit.network.packet.*; - -/**@author Kyle Gunger - * - * @param T The type of object transfered by packets of this type - */ -public class Type -{ - protected final String typeID; - protected final String groupID; - - public Type(String tID, String gID) - { - typeID = tID; - groupID = gID; - } - - /** Return the packet's data formatted in the group's base type. - * If creating a new type, extend this class and override this function. - * - * @param packet The packet (of this type) - * @param group The group asking for the conversion - * @return The packet's data in the default type - */ - public T toBase(IStaticPacket packet, String group) - { - return packet.getData(); - } - - /** Create a packet which has the current type from the data in the base type. - * If creating a new type, extend this class and override this function. - * - * @param base The base data - * @param group The group that the data comes from - * @return IStaticPacket The packet - */ - public IStaticPacket fromBase(T base, String group) - { - return new StaticPacket(base, this); - } - - /** The type identifier. Gives the normal type identity of the type. - * - * @return String - */ - public final String getType() - { - return typeID; - } - - /** The group identifier. Gives the normal group identity of the type. - * - * @return String - */ - public final String getGroup() - { - return groupID; - } - - @Override - public final String toString() { - return groupID + ":" + typeID; - } -} diff --git a/src/main/java/net/corechg/mc/transit/type/group/GroupRegistry.java b/src/main/java/net/corechg/mc/transit/type/group/GroupRegistry.java deleted file mode 100644 index 2d0d17f..0000000 --- a/src/main/java/net/corechg/mc/transit/type/group/GroupRegistry.java +++ /dev/null @@ -1,56 +0,0 @@ -package net.corechg.mc.transit.type.group; - -import java.util.ArrayList; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import net.corechg.mc.transit.type.Type; - -public final class GroupRegistry { - private static final ArrayList> GROUPS = new ArrayList>(0); - - private static final Logger LOG = LogManager.getFormatterLogger("Transit|GroupRegistry"); - - private GroupRegistry() {} - - public static final boolean addGroup(TypeGroup group) - { - for(TypeGroup g : GROUPS) - { - if(g.getGroup().equals(group.getGroup())) - { - LOG.warn("Failed to add group " + group + " to the registry. Did another mod add a group with the same name?"); - return false; - } - } - - GROUPS.add(group); - LOG.info("Successfully added group " + group + " to the registry."); - return true; - } - - @SuppressWarnings("unchecked") - public static final TypeGroup groupByID(String groupID) - { - for(TypeGroup g : GROUPS) - { - if(g.getGroup().equals(groupID)){ - try{ - return (TypeGroup) g; - }catch(ClassCastException e) { - return null; - } - } - } - - return null; - - } - - public static final Type typeByIdentity(String groupID, String typeID) - { - return GroupRegistry.groupByID(groupID).getType(typeID); - } - -} diff --git a/src/main/java/net/corechg/mc/transit/type/group/TypeGroup.java b/src/main/java/net/corechg/mc/transit/type/group/TypeGroup.java deleted file mode 100644 index 4717119..0000000 --- a/src/main/java/net/corechg/mc/transit/type/group/TypeGroup.java +++ /dev/null @@ -1,267 +0,0 @@ -package net.corechg.mc.transit.type.group; - -import java.util.ArrayList; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import net.corechg.mc.transit.network.packet.*; -import net.corechg.mc.transit.type.Type; - -/** - * @author Kyle Gunger - * @param The base object which all grouped Types should convert between. - */ -public class TypeGroup -{ - // The base Type (provides the group's identifier) - private Type baseType; - - // The list of types. - private final ArrayList> TYPES = new ArrayList>(0); - - // Logger for events in the TypeGroup. - private static final Logger LOG = LogManager.getFormatterLogger("Transit|Group"); - - - public TypeGroup(Type base) - { - baseType = base; - addType(base); - } - - - // Type management - - /** Add a Type to the TypeGroup. - * The Type must have a group-type combo not already found in this TypeGroup. - * Returns {@code true} if the group was added. - * - * @param type The Type to add - * @return - */ - public boolean addType(Type type) - { - if(!isInGroup(type)) - { - TYPES.add(type); - LOG.info("Added type " + type + " to group " + getGroup()); - return true; - } - - LOG.info("Failed to add type " + type + " to group " + getGroup() + ". Was the type already added?"); - return false; - } - - /** Remove a Type from the TypeGroup. - * - * @param type The Type to remove - * @return - */ - public boolean removeType(Type type) - { - if(type.equals(baseType)) { - LOG.warn("[WARN] Failed to remove type " + type + " from group " + getGroup() + ". This is the base type and can not be removed."); - return false; - } - - if(TYPES.indexOf(type) != -1) - { - LOG.info("Removed type " + TYPES.remove(TYPES.indexOf(type)) + " from group " + getGroup()); - return true; - } - - LOG.warn("[WARN] Failed to remove type " + type + " from group " + getGroup() + ". Are we sure that the type was added to the group first?"); - return false; - } - - /** Remove a type from the group based on it's group-type identifier. - * - * @param type - * @return - */ - public boolean removeType(String groupID, String typeID) - { - if(baseType.toString() == groupID + ":" + typeID) { - LOG.warn("[WARN] Failed to remove type " + baseType + " from group " + getGroup() + ". This is the base type and can not be removed."); - return false; - } - - for(Type type : TYPES) - { - if(type.toString() == groupID + ":" + typeID) - { - LOG.info("Removed type " + TYPES.remove(TYPES.indexOf(type)) + " from group " + getGroup()); - return true; - } - } - - LOG.warn("[WARN] Failed to remove type " + groupID + ":" + typeID + " from group " + getGroup() + ". Are we sure that the type was added to the group first?"); - return false; - } - - /** Remove a type from the group based on it's group-type identifier. - * - * @param type - * @return - */ - public boolean removeType(String typeID) - { - return removeType(getGroup(), typeID); - } - - - // Check if a type is in the group - - /**Check if the type is in the group - * - * @param type - * @return boolean - */ - public boolean isInGroup(Type type) - { - for(Type t : TYPES) - { - if(t.equals(type)) return true; - } - return false; - } - - /**Check if the type is in the group - * - * @param groupID - * @param typeID - * @return boolean - */ - public boolean isInGroup(String groupID, String typeID) - { - for(Type t : TYPES) - { - if(t.toString() == groupID + ":" + typeID) return true; - } - return false; - } - - /**Check if the type is in the group - * - * @param typeID - * @return boolean - */ - public boolean isInGroup(String typeID) - { - return isInGroup(getGroup(), typeID); - } - - // Get a type in the group - - /**Get the type from the group - * - * @param groupID The ID of the group the type is originally from - * @param typeID The ID of the type - * @return Type - */ - public Type getType(String groupID, String typeID) - { - for(Type t : TYPES) - { - if(t.toString() == groupID + ":" + typeID) return t; - } - - return null; - } - - /**Get the type from the group - * - * @param typeID The ID of the type - * @return Type - */ - public Type getType(String typeID) - { - return getType(getGroup(), typeID); - } - - - // Type conversion - - /** Actually convert the packet - * - * @param packet - * @param type - * @return - */ - protected IStaticPacket convertPacketRaw(IStaticPacket packet, Type type) - { - return type.fromBase(packet.getType().toBase(packet, getGroup()), getGroup()); - } - - /**Convert a packet to a new type Returns null if the type isn't in the group. - * - * @param packet The packet to convert - * @param type The type to convert to - * @return Packet - */ - public IStaticPacket convertPacket(IStaticPacket packet, Type type) - { - if(isInGroup(packet.getType()) && isInGroup(type)) - { - return convertPacketRaw(packet, type); - } - - return null; - } - - /**Convert a packet to a new type Returns null if the type isn't found. - * - * @param packet The packet to convert - * @param groupID The groupID of the Type to convert to - * @param typeID The typeID of the Type to convert to - * @return Packet - */ - public IStaticPacket convertPacket(IStaticPacket packet, String groupID, String typeID) - { - Type toType = getType(groupID, typeID); - if(toType != null) - { - return convertPacketRaw(packet, toType); - } - - return null; - } - - /**Convert a packet to a new type. Returns null if the type isn't found. - * - * @param packet The packet to convert - * @param typeID The typeID of the Type to convert to - * @return Packet - */ - public IStaticPacket convertPacket(IStaticPacket packet, String typeID) - { - Type toType = getType(typeID); - if(toType != null) - { - return convertPacketRaw(packet, toType); - } - - return null; - } - - /** The group identifier. Given by the Base Group - * @return String - */ - public final String getGroup() - { - return baseType.getGroup(); - } - - /** The base group type - * @return Type - */ - public final Type getBase() { - return baseType; - } - - @Override - public final String toString() { - return this.getGroup(); - } -} diff --git a/src/main/java/net/corechg/mc/transit/type/group/simple/SimpleGroups.java b/src/main/java/net/corechg/mc/transit/type/group/simple/SimpleGroups.java deleted file mode 100644 index 73e0df7..0000000 --- a/src/main/java/net/corechg/mc/transit/type/group/simple/SimpleGroups.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.corechg.mc.transit.type.group.simple; - -import net.minecraft.item.ItemStack; -import net.corechg.mc.transit.type.group.*; -import net.corechg.mc.transit.type.simple.SimpleTypes; -import net.corechg.mc.transit.type.*; - -public final class SimpleGroups { - /** Transfers energy. Basic unit is TJoule (Transit Joule). - */ - public static final TypeGroup ENERGY_GROUP = new TypeGroup(SimpleTypes.TransitJoule); - - /** Transfers mana. Basic unit is TMana (Transit Mana). - */ - public static final TypeGroup MANA_GROUP = new TypeGroup(SimpleTypes.TransitMana); - - /** Transfers items. Basic type is ItemStack. - */ - public static final TypeGroup ITEM_GROUP = new TypeGroup(SimpleTypes.Item); - - /** Transfers fluids. Basic unit is TFluid. - */ - public static final TypeGroup FLUID_GROUP = new TypeGroup(SimpleTypes.Fluid); - - public static final void init() - { - GroupRegistry.addGroup(ENERGY_GROUP); - GroupRegistry.addGroup(MANA_GROUP); - GroupRegistry.addGroup(ITEM_GROUP); - GroupRegistry.addGroup(FLUID_GROUP); - } -} diff --git a/src/main/java/net/corechg/mc/transit/type/simple/SimpleTypes.java b/src/main/java/net/corechg/mc/transit/type/simple/SimpleTypes.java deleted file mode 100644 index 79ee9a8..0000000 --- a/src/main/java/net/corechg/mc/transit/type/simple/SimpleTypes.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.corechg.mc.transit.type.simple; - -import net.minecraft.item.ItemStack; -import net.corechg.mc.transit.type.*; - -public final class SimpleTypes { - /** Transfers energy. Energy is stored as a numeric, base value is TJoule (TransitJoule) - */ - public static final Type TransitJoule = new Type("TJoule", "ENERGY"); - - /** Transfers mana. TMana stores mana count and type. - */ - public static final Type TransitMana = new Type("TMana", "MANA"); - - /** Transfers items in a itemstack. - */ - public static final Type Item = new Type("Item", "ITEM"); - - /** Transfers fluid. TFluid stores fluid and mB. - */ - public static final Type Fluid = new Type("Fluid", "FLUID"); -} diff --git a/src/main/java/net/corechg/transit/Transit.java b/src/main/java/net/corechg/transit/Transit.java new file mode 100644 index 0000000..3cf4917 --- /dev/null +++ b/src/main/java/net/corechg/transit/Transit.java @@ -0,0 +1,13 @@ +package net.corechg.transit; + +import net.fabricmc.api.ModInitializer; +import net.corechg.transit.type.group.simple.SimpleGroups; + +public class Transit implements ModInitializer { + + @Override + public void onInitialize() { + SimpleGroups.init(); + } + +} diff --git a/src/main/java/net/corechg/transit/basic/AbstractAcceptorNode.java b/src/main/java/net/corechg/transit/basic/AbstractAcceptorNode.java new file mode 100644 index 0000000..eafc71e --- /dev/null +++ b/src/main/java/net/corechg/transit/basic/AbstractAcceptorNode.java @@ -0,0 +1,51 @@ +package net.corechg.transit.basic; + +import net.corechg.transit.network.packet.IStaticPacket; +import net.corechg.transit.network.system.Connection; +import net.corechg.transit.network.system.swap.*; +import net.minecraft.block.entity.BlockEntityType; + +public abstract class AbstractAcceptorNode extends AbstractNode implements IAcceptorNode { + + public AbstractAcceptorNode(BlockEntityType type) { + super(type); + } + + @Override + public abstract boolean accept(IStaticPacket packet, String group); + + @Override + public boolean linkProvider(IProviderNode requestor, String group) { + if(this.hasGroup(group)) + { + for (Connection c : connections) { + if(c.getNode() == requestor) + return false; + } + + connections.add(new Connection(requestor, (short) 2)); + + return true; + } + + return false; + } + + @Override + public boolean unlinkProvider(IProviderNode requestor) { + for (Connection c : connections) { + if(c.getNode() == requestor) + { + if(c.isAccepting()) + c.setProviding(false); + else + connections.remove(c); + + return true; + } + } + + return false; + } + +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/basic/AbstractNode.java b/src/main/java/net/corechg/transit/basic/AbstractNode.java new file mode 100644 index 0000000..9c66951 --- /dev/null +++ b/src/main/java/net/corechg/transit/basic/AbstractNode.java @@ -0,0 +1,45 @@ +package net.corechg.transit.basic; + +import java.util.*; + +import net.corechg.transit.network.system.*; +import net.minecraft.block.entity.*; + +public abstract class AbstractNode extends BlockEntity implements INode { + + public AbstractNode(BlockEntityType type) { + super(type); + } + + HashMap data = new HashMap(); + ArrayList connections = new ArrayList(0); + + @Override + public abstract boolean hasGroup(String groupID); + + @Override + public ISystem getSystem() { + return null; + } + + @Override + public Object getData(String groupID) { + return data.get(groupID); + } + + @Override + public void setData(Object dat, String groupID) { + data.put(groupID, dat); + } + + @Override + public Connection[] getConnections() { + return (Connection[]) connections.toArray(); + } + + @Override + public int connectionCount() { + return connections.size(); + } + +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/basic/AbstractProviderNode.java b/src/main/java/net/corechg/transit/basic/AbstractProviderNode.java new file mode 100644 index 0000000..f57c397 --- /dev/null +++ b/src/main/java/net/corechg/transit/basic/AbstractProviderNode.java @@ -0,0 +1,47 @@ +package net.corechg.transit.basic; + +import net.corechg.transit.network.system.Connection; +import net.corechg.transit.network.system.swap.*; +import net.minecraft.block.entity.BlockEntityType; + +public abstract class AbstractProviderNode extends AbstractNode implements IProviderNode { + + public AbstractProviderNode(BlockEntityType type) { + super(type); + } + + @Override + public boolean linkAcceptor(IAcceptorNode requestor, String group) { + if(this.hasGroup(group)) + { + for (Connection c : connections) { + if(c.getNode() == requestor) + return false; + } + + connections.add(new Connection(requestor, (short) 1)); + + return true; + } + + return false; + } + + @Override + public boolean unlinkAcceptor(IAcceptorNode requestor) { + for (Connection c : connections) { + if(c.getNode() == requestor) + { + if(c.isProviding()) + c.setAccepting(false); + else + connections.remove(c); + + return true; + } + } + + return false; + } + +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/basic/AbstractTwoWayNode.java b/src/main/java/net/corechg/transit/basic/AbstractTwoWayNode.java new file mode 100644 index 0000000..1fa90af --- /dev/null +++ b/src/main/java/net/corechg/transit/basic/AbstractTwoWayNode.java @@ -0,0 +1,47 @@ +package net.corechg.transit.basic; + +import net.corechg.transit.network.system.Connection; +import net.corechg.transit.network.system.swap.*; +import net.minecraft.block.entity.BlockEntityType; + +public abstract class AbstractTwoWayNode extends AbstractAcceptorNode implements IProviderNode { + + public AbstractTwoWayNode(BlockEntityType type) { + super(type); + } + + @Override + public boolean linkAcceptor(IAcceptorNode requestor, String group) { + if(this.hasGroup(group)) + { + for (Connection c : connections) { + if(c.getNode() == requestor) + return false; + } + + connections.add(new Connection(requestor, (short) 1)); + + return true; + } + + return false; + } + + @Override + public boolean unlinkAcceptor(IAcceptorNode requestor) { + for (Connection c : connections) { + if(c.getNode() == requestor) + { + if(c.isProviding()) + c.setAccepting(false); + else + connections.remove(c); + + return true; + } + } + + return false; + } + +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/basic/system/AbstractSystem.java b/src/main/java/net/corechg/transit/basic/system/AbstractSystem.java new file mode 100644 index 0000000..0d1c147 --- /dev/null +++ b/src/main/java/net/corechg/transit/basic/system/AbstractSystem.java @@ -0,0 +1,13 @@ +package net.corechg.transit.basic.system; + +import net.corechg.transit.network.system.*; + +public abstract class AbstractSystem implements ISystem { + + @Override + public INode[] getNodes() { + // TODO Auto-generated method stub + return null; + } + +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/basic/system/AbstractSystemNode.java b/src/main/java/net/corechg/transit/basic/system/AbstractSystemNode.java new file mode 100644 index 0000000..642b0e4 --- /dev/null +++ b/src/main/java/net/corechg/transit/basic/system/AbstractSystemNode.java @@ -0,0 +1,12 @@ +package net.corechg.transit.basic.system; + +import net.corechg.transit.basic.*; +import net.minecraft.block.entity.BlockEntityType; + +public abstract class AbstractSystemNode extends AbstractNode { + + public AbstractSystemNode(BlockEntityType type) { + super(type); + } + +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/network/packet/IStaticPacket.java b/src/main/java/net/corechg/transit/network/packet/IStaticPacket.java new file mode 100644 index 0000000..74d5110 --- /dev/null +++ b/src/main/java/net/corechg/transit/network/packet/IStaticPacket.java @@ -0,0 +1,23 @@ +package net.corechg.transit.network.packet; + +import net.corechg.transit.type.Type; + +/** Interface describing an unchanging packet. + * @author Kyle Gunger + * + * @param The data type (Object) that the packet transfers. + */ +public interface IStaticPacket +{ + /**Get the packet's data. + * + * @return The packet's data + */ + public D getData(); + + /**Get the packet's type. + * + * @return IType<> The type of the packet + */ + public Type getType(); +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/network/packet/MetaPacket.java b/src/main/java/net/corechg/transit/network/packet/MetaPacket.java new file mode 100644 index 0000000..e043aa1 --- /dev/null +++ b/src/main/java/net/corechg/transit/network/packet/MetaPacket.java @@ -0,0 +1,35 @@ +package net.corechg.transit.network.packet; + +import net.corechg.transit.type.Type; + +/** Static packet with extra data attached. + * @author Kyle Gunger + * + * @param The data type (Object) that the packet transfers + * @param The type of metadata +*/ +public class MetaPacket extends StaticPacket +{ + private M metaData; + + /** Constructor + * + * @param dat The data to store + * @param t The Type of the data + * @param meta The metadata to store + */ + public MetaPacket(D dat, Type t, M meta) + { + super(dat, t); + metaData = meta; + } + + /** Get the metadata of the packet. + * + * @return The packet's metadata + */ + public M getMetaData() + { + return metaData; + } +} diff --git a/src/main/java/net/corechg/transit/network/packet/StaticPacket.java b/src/main/java/net/corechg/transit/network/packet/StaticPacket.java new file mode 100644 index 0000000..2596a8f --- /dev/null +++ b/src/main/java/net/corechg/transit/network/packet/StaticPacket.java @@ -0,0 +1,36 @@ +package net.corechg.transit.network.packet; + +import net.corechg.transit.type.Type; + +/** Simple packet which stores an unchanging value. + * @author Kyle Gunger + * + * @param The data type (Object) that the packet transfers. + */ +public class StaticPacket implements IStaticPacket +{ + private D data; + private Type type; + + /** Constructor. Stores the given data and uses the given type. + * + * @param dat The packet's data + * @param t The packet's type + */ + public StaticPacket(D dat, Type t) + { + data = dat; + type = t; + } + + @Override + public D getData() + { + return data; + } + + @Override + public Type getType() { + return type; + } +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/network/packet/dynamic/DynamicPacket.java b/src/main/java/net/corechg/transit/network/packet/dynamic/DynamicPacket.java new file mode 100644 index 0000000..73f3669 --- /dev/null +++ b/src/main/java/net/corechg/transit/network/packet/dynamic/DynamicPacket.java @@ -0,0 +1,43 @@ +package net.corechg.transit.network.packet.dynamic; + +import net.corechg.transit.type.Type; + +/** + * Simple packet which stores a fluid value. + * + * @author Kyle Gunger + * + * @param The data type (Object) that the packet transfers + */ +public class DynamicPacket implements IDynamicPacket { + private D data; + private Type type; + + /** Constructor. Stores the given data and uses the given type. + * + * @param dat The packet's data + * @param t The packet's type + */ + public DynamicPacket(D dat, Type t) + { + data = dat; + type = t; + } + + @Override + public D getData() + { + return data; + } + + @Override + public void setData(D dat) + { + data = dat; + } + + @Override + public Type getType() { + return type; + } +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/network/packet/dynamic/IDynamicPacket.java b/src/main/java/net/corechg/transit/network/packet/dynamic/IDynamicPacket.java new file mode 100644 index 0000000..6cf3018 --- /dev/null +++ b/src/main/java/net/corechg/transit/network/packet/dynamic/IDynamicPacket.java @@ -0,0 +1,16 @@ +package net.corechg.transit.network.packet.dynamic; + +import net.corechg.transit.network.packet.IStaticPacket; + +/** Interface describing a fluid packet. + * @author Kyle Gunger + * + * @param The data type (Object) that the packet transfers + */ +public interface IDynamicPacket extends IStaticPacket{ + /**Set the packet's data. + * + * @return The packet's data + */ + public void setData(D dat); +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/network/packet/dynamic/MetaDynamicPacket.java b/src/main/java/net/corechg/transit/network/packet/dynamic/MetaDynamicPacket.java new file mode 100644 index 0000000..50418b9 --- /dev/null +++ b/src/main/java/net/corechg/transit/network/packet/dynamic/MetaDynamicPacket.java @@ -0,0 +1,44 @@ +package net.corechg.transit.network.packet.dynamic; + +import net.corechg.transit.type.Type; + +/** Static packet with extra data attached. + * @author Kyle Gunger + * + * @param The data type (Object) that the packet transfers + * @param The type of metadata +*/ +public class MetaDynamicPacket extends DynamicPacket +{ + private M metaData; + + /** Constructor + * + * @param dat The data to store + * @param t The Type of the data + * @param meta The metadata to store + */ + public MetaDynamicPacket(D dat, Type t, M meta) + { + super(dat, t); + metaData = meta; + } + + /** Get the metadata of the packet. + * + * @return The packet's metadata + */ + public M getMetaData() + { + return metaData; + } + + /** Set the metadata of the packet. + * + * @param meta The packet's new metadata + */ + public void setMetaData(M meta) + { + metaData = meta; + } +} diff --git a/src/main/java/net/corechg/transit/network/system/Connection.java b/src/main/java/net/corechg/transit/network/system/Connection.java new file mode 100644 index 0000000..5e34895 --- /dev/null +++ b/src/main/java/net/corechg/transit/network/system/Connection.java @@ -0,0 +1,49 @@ +package net.corechg.transit.network.system; + +public class Connection { + INode node; + short mask; + + public Connection(INode n) + { + node = n; + mask = 0; + } + + public Connection(INode n, short m) + { + node = n; + mask = m; + } + + public INode getNode() + { + return node; + } + + public boolean isAccepting() + { + return (mask & 1) == 1; + } + + public void setAccepting(boolean value) + { + if(isAccepting() && value == false) + mask -= 1; + else if(!isAccepting() && value == true) + mask += 1; + } + + public boolean isProviding() + { + return (mask & 2) == 2; + } + + public void setProviding(boolean value) + { + if(isProviding() && value == false) + mask -= 2; + else if(!isProviding() && value == true) + mask += 2; + } +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/network/system/INode.java b/src/main/java/net/corechg/transit/network/system/INode.java new file mode 100644 index 0000000..6be7d27 --- /dev/null +++ b/src/main/java/net/corechg/transit/network/system/INode.java @@ -0,0 +1,53 @@ +package net.corechg.transit.network.system; + +/** + * @author Kyle Gunger + * @apiNote A node inside or outside a system. + */ +public interface INode +{ + + /**Returns true if the group given is used by the node + * + * @param groupID the group to querry + * @return bool + */ + public boolean hasGroup(String groupID); + + + /**Get the system managing the node or {@code null} if there isn't one + * + * @return System + */ + public ISystem getSystem(); + + + /** Get the data of one of the TypeGroups the Node supports + * + * @param groupID + * @return + */ + public Object getData(String groupID); + + + /** Set the group data for the node + * + * @param dat + * @param groupID + */ + public void setData(Object dat, String groupID); + + + /** Get the nodes that this node is connected to + * + * @return Node[] + */ + public Connection[] getConnections(); + + + /** Get the number of nodes that this node is connected to + * + * @return int + */ + public int connectionCount(); +} diff --git a/src/main/java/net/corechg/transit/network/system/ISystem.java b/src/main/java/net/corechg/transit/network/system/ISystem.java new file mode 100644 index 0000000..693a3ed --- /dev/null +++ b/src/main/java/net/corechg/transit/network/system/ISystem.java @@ -0,0 +1,15 @@ +package net.corechg.transit.network.system; + + +/** + * @author Kyle Gunger + * @apiNote An ISystem represents a system of nodes which has been optimized for performance. A node can exist on its own, but an ISystem can't exist without a node. + */ +public interface ISystem +{ + /**The nodes stored by the system + * + * @return INode[] + */ + public INode[] getNodes(); +} diff --git a/src/main/java/net/corechg/transit/network/system/swap/IAcceptorNode.java b/src/main/java/net/corechg/transit/network/system/swap/IAcceptorNode.java new file mode 100644 index 0000000..5214d03 --- /dev/null +++ b/src/main/java/net/corechg/transit/network/system/swap/IAcceptorNode.java @@ -0,0 +1,37 @@ +package net.corechg.transit.network.system.swap; + +import net.corechg.transit.network.packet.IStaticPacket; +import net.corechg.transit.network.system.INode; + +/** + * @author Kyle Gunger + * @apiNote A node which can accept packets of specific types + */ +public interface IAcceptorNode extends INode +{ + + /** Link another node as a provider + * + * @param requester The object to be a provider + * @param group + * @return + */ + public boolean linkProvider(IProviderNode requestor, String group); + + + /** Unlink a provider from the acceptor + * + * @param requestor + * @return + */ + public boolean unlinkProvider(IProviderNode requestor); + + + /** Accept a packet from a provider + * + * @param packet + * @param group + * @return + */ + public boolean accept(IStaticPacket packet, String group); +} diff --git a/src/main/java/net/corechg/transit/network/system/swap/IProviderNode.java b/src/main/java/net/corechg/transit/network/system/swap/IProviderNode.java new file mode 100644 index 0000000..b40030e --- /dev/null +++ b/src/main/java/net/corechg/transit/network/system/swap/IProviderNode.java @@ -0,0 +1,27 @@ +package net.corechg.transit.network.system.swap; + +import net.corechg.transit.network.system.INode; + +/** + * @author Kyle Gunger + * @apiNote A node which can provide packets of specific types + */ +public interface IProviderNode extends INode{ + + /** Link another node as an acceptor + * + * @param requester The object requesting the Acceptor + * @param group + * @return boolean + */ + public boolean linkAcceptor(IAcceptorNode requestor, String group); + + + /** Unlink a provider from the acceptor + * + * @param requestor + * @return + */ + public boolean unlinkAcceptor(IAcceptorNode requestor); + +} diff --git a/src/main/java/net/corechg/transit/type/TFluid.java b/src/main/java/net/corechg/transit/type/TFluid.java new file mode 100644 index 0000000..6886ab2 --- /dev/null +++ b/src/main/java/net/corechg/transit/type/TFluid.java @@ -0,0 +1,33 @@ +package net.corechg.transit.type; + +import net.minecraft.fluid.Fluid; + +/** Units of fluid. + * @author Kyle Gunger + */ +public class TFluid { + private Fluid fluid; + private Number millibuckets; + + /** Constructor + * + * @param f Fluid stored (Water/Lava/etc.) + * @param mb Count of fluid (mB) + */ + public TFluid(Fluid f, Number mb) { + fluid = f; + millibuckets = mb; + } + + /** Get the fluid stored. + */ + public Fluid getFluid() { + return fluid; + } + + /** Get the millibuckets stored. + */ + public Number getMilliBuckets() { + return millibuckets; + } +} \ No newline at end of file diff --git a/src/main/java/net/corechg/transit/type/TMana.java b/src/main/java/net/corechg/transit/type/TMana.java new file mode 100644 index 0000000..7a2e9f8 --- /dev/null +++ b/src/main/java/net/corechg/transit/type/TMana.java @@ -0,0 +1,31 @@ +package net.corechg.transit.type; + +/** Units of mana. + * @author Kyle Gunger + */ +public class TMana { + private String type; + private Number count; + + /** Constructor + * + * @param t Type of mana (Fire/Water/Dark/Light/etc.) leave empty string for an untyped mana system. + * @param ct Count of mana + */ + public TMana(String t, Number ct) { + type = t; + count = ct; + } + + /** Get the mana type. + */ + public String getType() { + return type; + } + + /** Get the mana stored. + */ + public Number getCount() { + return count; + } +} diff --git a/src/main/java/net/corechg/transit/type/Type.java b/src/main/java/net/corechg/transit/type/Type.java new file mode 100644 index 0000000..9fb79f5 --- /dev/null +++ b/src/main/java/net/corechg/transit/type/Type.java @@ -0,0 +1,66 @@ +package net.corechg.transit.type; + +import net.corechg.transit.network.packet.*; + +/**@author Kyle Gunger + * + * @param T The type of object transfered by packets of this type + */ +public class Type +{ + protected final String typeID; + protected final String groupID; + + public Type(String tID, String gID) + { + typeID = tID; + groupID = gID; + } + + /** Return the packet's data formatted in the group's base type. + * If creating a new type, extend this class and override this function. + * + * @param packet The packet (of this type) + * @param group The group asking for the conversion + * @return The packet's data in the default type + */ + public T toBase(IStaticPacket packet, String group) + { + return packet.getData(); + } + + /** Create a packet which has the current type from the data in the base type. + * If creating a new type, extend this class and override this function. + * + * @param base The base data + * @param group The group that the data comes from + * @return IStaticPacket The packet + */ + public IStaticPacket fromBase(T base, String group) + { + return new StaticPacket(base, this); + } + + /** The type identifier. Gives the normal type identity of the type. + * + * @return String + */ + public final String getType() + { + return typeID; + } + + /** The group identifier. Gives the normal group identity of the type. + * + * @return String + */ + public final String getGroup() + { + return groupID; + } + + @Override + public final String toString() { + return groupID + ":" + typeID; + } +} diff --git a/src/main/java/net/corechg/transit/type/group/GroupRegistry.java b/src/main/java/net/corechg/transit/type/group/GroupRegistry.java new file mode 100644 index 0000000..d811770 --- /dev/null +++ b/src/main/java/net/corechg/transit/type/group/GroupRegistry.java @@ -0,0 +1,56 @@ +package net.corechg.transit.type.group; + +import java.util.ArrayList; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.corechg.transit.type.Type; + +public final class GroupRegistry { + private static final ArrayList> GROUPS = new ArrayList>(0); + + private static final Logger LOG = LogManager.getFormatterLogger("Transit|GroupRegistry"); + + private GroupRegistry() {} + + public static final boolean addGroup(TypeGroup group) + { + for(TypeGroup g : GROUPS) + { + if(g.getGroup().equals(group.getGroup())) + { + LOG.warn("Failed to add group " + group + " to the registry. Did another mod add a group with the same name?"); + return false; + } + } + + GROUPS.add(group); + LOG.info("Successfully added group " + group + " to the registry."); + return true; + } + + @SuppressWarnings("unchecked") + public static final TypeGroup groupByID(String groupID) + { + for(TypeGroup g : GROUPS) + { + if(g.getGroup().equals(groupID)){ + try{ + return (TypeGroup) g; + }catch(ClassCastException e) { + return null; + } + } + } + + return null; + + } + + public static final Type typeByIdentity(String groupID, String typeID) + { + return GroupRegistry.groupByID(groupID).getType(typeID); + } + +} diff --git a/src/main/java/net/corechg/transit/type/group/TypeGroup.java b/src/main/java/net/corechg/transit/type/group/TypeGroup.java new file mode 100644 index 0000000..eecf6d4 --- /dev/null +++ b/src/main/java/net/corechg/transit/type/group/TypeGroup.java @@ -0,0 +1,267 @@ +package net.corechg.transit.type.group; + +import java.util.ArrayList; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import net.corechg.transit.network.packet.*; +import net.corechg.transit.type.Type; + +/** + * @author Kyle Gunger + * @param The base object which all grouped Types should convert between. + */ +public class TypeGroup +{ + // The base Type (provides the group's identifier) + private Type baseType; + + // The list of types. + private final ArrayList> TYPES = new ArrayList>(0); + + // Logger for events in the TypeGroup. + private static final Logger LOG = LogManager.getFormatterLogger("Transit|Group"); + + + public TypeGroup(Type base) + { + baseType = base; + addType(base); + } + + + // Type management + + /** Add a Type to the TypeGroup. + * The Type must have a group-type combo not already found in this TypeGroup. + * Returns {@code true} if the group was added. + * + * @param type The Type to add + * @return + */ + public boolean addType(Type type) + { + if(!isInGroup(type)) + { + TYPES.add(type); + LOG.info("Added type " + type + " to group " + getGroup()); + return true; + } + + LOG.info("Failed to add type " + type + " to group " + getGroup() + ". Was the type already added?"); + return false; + } + + /** Remove a Type from the TypeGroup. + * + * @param type The Type to remove + * @return + */ + public boolean removeType(Type type) + { + if(type.equals(baseType)) { + LOG.warn("[WARN] Failed to remove type " + type + " from group " + getGroup() + ". This is the base type and can not be removed."); + return false; + } + + if(TYPES.indexOf(type) != -1) + { + LOG.info("Removed type " + TYPES.remove(TYPES.indexOf(type)) + " from group " + getGroup()); + return true; + } + + LOG.warn("[WARN] Failed to remove type " + type + " from group " + getGroup() + ". Are we sure that the type was added to the group first?"); + return false; + } + + /** Remove a type from the group based on it's group-type identifier. + * + * @param type + * @return + */ + public boolean removeType(String groupID, String typeID) + { + if(baseType.toString() == groupID + ":" + typeID) { + LOG.warn("[WARN] Failed to remove type " + baseType + " from group " + getGroup() + ". This is the base type and can not be removed."); + return false; + } + + for(Type type : TYPES) + { + if(type.toString() == groupID + ":" + typeID) + { + LOG.info("Removed type " + TYPES.remove(TYPES.indexOf(type)) + " from group " + getGroup()); + return true; + } + } + + LOG.warn("[WARN] Failed to remove type " + groupID + ":" + typeID + " from group " + getGroup() + ". Are we sure that the type was added to the group first?"); + return false; + } + + /** Remove a type from the group based on it's group-type identifier. + * + * @param type + * @return + */ + public boolean removeType(String typeID) + { + return removeType(getGroup(), typeID); + } + + + // Check if a type is in the group + + /**Check if the type is in the group + * + * @param type + * @return boolean + */ + public boolean isInGroup(Type type) + { + for(Type t : TYPES) + { + if(t.equals(type)) return true; + } + return false; + } + + /**Check if the type is in the group + * + * @param groupID + * @param typeID + * @return boolean + */ + public boolean isInGroup(String groupID, String typeID) + { + for(Type t : TYPES) + { + if(t.toString() == groupID + ":" + typeID) return true; + } + return false; + } + + /**Check if the type is in the group + * + * @param typeID + * @return boolean + */ + public boolean isInGroup(String typeID) + { + return isInGroup(getGroup(), typeID); + } + + // Get a type in the group + + /**Get the type from the group + * + * @param groupID The ID of the group the type is originally from + * @param typeID The ID of the type + * @return Type + */ + public Type getType(String groupID, String typeID) + { + for(Type t : TYPES) + { + if(t.toString() == groupID + ":" + typeID) return t; + } + + return null; + } + + /**Get the type from the group + * + * @param typeID The ID of the type + * @return Type + */ + public Type getType(String typeID) + { + return getType(getGroup(), typeID); + } + + + // Type conversion + + /** Actually convert the packet + * + * @param packet + * @param type + * @return + */ + protected IStaticPacket convertPacketRaw(IStaticPacket packet, Type type) + { + return type.fromBase(packet.getType().toBase(packet, getGroup()), getGroup()); + } + + /**Convert a packet to a new type Returns null if the type isn't in the group. + * + * @param packet The packet to convert + * @param type The type to convert to + * @return Packet + */ + public IStaticPacket convertPacket(IStaticPacket packet, Type type) + { + if(isInGroup(packet.getType()) && isInGroup(type)) + { + return convertPacketRaw(packet, type); + } + + return null; + } + + /**Convert a packet to a new type Returns null if the type isn't found. + * + * @param packet The packet to convert + * @param groupID The groupID of the Type to convert to + * @param typeID The typeID of the Type to convert to + * @return Packet + */ + public IStaticPacket convertPacket(IStaticPacket packet, String groupID, String typeID) + { + Type toType = getType(groupID, typeID); + if(toType != null) + { + return convertPacketRaw(packet, toType); + } + + return null; + } + + /**Convert a packet to a new type. Returns null if the type isn't found. + * + * @param packet The packet to convert + * @param typeID The typeID of the Type to convert to + * @return Packet + */ + public IStaticPacket convertPacket(IStaticPacket packet, String typeID) + { + Type toType = getType(typeID); + if(toType != null) + { + return convertPacketRaw(packet, toType); + } + + return null; + } + + /** The group identifier. Given by the Base Group + * @return String + */ + public final String getGroup() + { + return baseType.getGroup(); + } + + /** The base group type + * @return Type + */ + public final Type getBase() { + return baseType; + } + + @Override + public final String toString() { + return this.getGroup(); + } +} diff --git a/src/main/java/net/corechg/transit/type/group/simple/SimpleGroups.java b/src/main/java/net/corechg/transit/type/group/simple/SimpleGroups.java new file mode 100644 index 0000000..d45970d --- /dev/null +++ b/src/main/java/net/corechg/transit/type/group/simple/SimpleGroups.java @@ -0,0 +1,32 @@ +package net.corechg.transit.type.group.simple; + +import net.minecraft.item.ItemStack; +import net.corechg.transit.type.group.*; +import net.corechg.transit.type.simple.SimpleTypes; +import net.corechg.transit.type.*; + +public final class SimpleGroups { + /** Transfers energy. Basic unit is TJoule (Transit Joule). + */ + public static final TypeGroup ENERGY_GROUP = new TypeGroup(SimpleTypes.TransitJoule); + + /** Transfers mana. Basic unit is TMana (Transit Mana). + */ + public static final TypeGroup MANA_GROUP = new TypeGroup(SimpleTypes.TransitMana); + + /** Transfers items. Basic type is ItemStack. + */ + public static final TypeGroup ITEM_GROUP = new TypeGroup(SimpleTypes.Item); + + /** Transfers fluids. Basic unit is TFluid. + */ + public static final TypeGroup FLUID_GROUP = new TypeGroup(SimpleTypes.Fluid); + + public static final void init() + { + GroupRegistry.addGroup(ENERGY_GROUP); + GroupRegistry.addGroup(MANA_GROUP); + GroupRegistry.addGroup(ITEM_GROUP); + GroupRegistry.addGroup(FLUID_GROUP); + } +} diff --git a/src/main/java/net/corechg/transit/type/simple/SimpleTypes.java b/src/main/java/net/corechg/transit/type/simple/SimpleTypes.java new file mode 100644 index 0000000..f608bdd --- /dev/null +++ b/src/main/java/net/corechg/transit/type/simple/SimpleTypes.java @@ -0,0 +1,22 @@ +package net.corechg.transit.type.simple; + +import net.minecraft.item.ItemStack; +import net.corechg.transit.type.*; + +public final class SimpleTypes { + /** Transfers energy. Energy is stored as a numeric, base value is TJoule (TransitJoule) + */ + public static final Type TransitJoule = new Type("TJoule", "ENERGY"); + + /** Transfers mana. TMana stores mana count and type. + */ + public static final Type TransitMana = new Type("TMana", "MANA"); + + /** Transfers items in a itemstack. + */ + public static final Type Item = new Type("Item", "ITEM"); + + /** Transfers fluid. TFluid stores fluid and mB. + */ + public static final Type Fluid = new Type("Fluid", "FLUID"); +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 409db16..f3f38ce 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, "id": "transit-api", - "version": "0.13.0", + "version": "0.14.0", "name": "Transit API", "description": "Move things about!", @@ -20,12 +20,12 @@ "environment": "*", "entrypoints": { "main": [ - "net.corechg.mc.transit.Transit" + "net.corechg.transit.Transit" ] }, "depends": { - "fabricloader": ">=0.9", + "fabricloader": ">=0.7.4", "minecraft": "1.16.x" } } -- cgit v1.2.3