commit 1dc6f9d83f172ba06b0a7ab1738b70685830b467 Author: LordMZTE Date: Sat Mar 18 23:23:14 2023 +0100 init diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..d48bed8 --- /dev/null +++ b/.clang-format @@ -0,0 +1,130 @@ +--- +AccessModifierOffset: 0 +AlignAfterOpenBracket: BlockIndent +AlignArrayOfStructures: None +AlignConsecutiveAssignments: None +AlignConsecutiveMacros: None +AlignConsecutiveBitFields: None +AlignConsecutiveDeclarations: None +AlignEscapedNewlines: DontAlign +AlignOperands: DontAlign +AlignTrailingComments: false +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: Empty +AllowShortCaseLabelsOnASingleLine: false +AllowShortEnumsOnASingleLine: false +AllowShortFunctionsOnASingleLine: Empty +AllowShortIfStatementsOnASingleLine: Never +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: MultiLine +AttributeMacros: [] +BinPackArguments: false +BinPackParameters: false +BitFieldColonSpacing: After +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: false + SplitEmptyNamespace: false +BreakAfterJavaFieldAnnotations: true +#BreakArrays: false +BreakBeforeBinaryOperators: All +BreakBeforeBraces: Custom +BreakBeforeConceptDeclarations: true +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: AfterColon +BreakInheritanceList: AfterColon +BreakStringLiterals: true +ColumnLimit: 90 +CompactNamespaces: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DeriveLineEnding: false +DerivePointerAlignment: false +DisableFormat: false # wtf +EmptyLineAfterAccessModifier: Never +EmptyLineBeforeAccessModifier: Always +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +ForEachMacros: ["BOOST_FOREACH"] +IfMacros: [] +IncludeBlocks: Regroup +IndentAccessModifiers: false +IndentCaseBlocks: false +IndentCaseLabels: true +IndentExternBlock: Indent +IndentGotoLabels: true +IndentPPDirectives: BeforeHash +#IndentRequiresClause: false +IndentWidth: 4 +IndentWrappedFunctionNames: false +#InsertBraces: false +InsertTrailingCommas: Wrapped +JavaImportGroups: ["java"] +JavaScriptQuotes: Double +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +LambdaBodyIndentation: OuterScope +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: All +PackConstructorInitializers: NextLine +PointerAlignment: Left +QualifierAlignment: Left +ReferenceAlignment: Left +ReflowComments: true +#RemoveSemicolon: true +#RequiresClausePosition: OwnLine +#RequiresExpressionIndentation: OuterScope +SeparateDefinitionBlocks: Always +SortIncludes: CaseInsensitive +SortJavaStaticImport: Before +SortUsingDeclarations: true +SpaceAfterCStyleCast: true +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: false +SpaceAroundPointerQualifiers: After +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: false +SpaceBeforeInheritanceColon: false +SpaceBeforeParens: ControlStatementsExceptControlMacros +SpaceBeforeRangeBasedForLoopColon: true +SpaceBeforeSquareBrackets: false +SpaceInEmptyBlock: false +SpaceInEmptyParentheses: false +SpacesInAngles: Never +SpacesInCStyleCastParentheses: false +SpacesInConditionalStatement: false +SpacesInContainerLiterals: false +SpacesInLineCommentPrefix: + Minimum: 0 + Maximum: -1 +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: c++20 +StatementAttributeLikeMacros: [] +StatementMacros: [] +TabWidth: 4 +TypenameMacros: [] +UseCRLF: false # wtf +UseTab: Never +WhitespaceSensitiveMacros: ["BOOST_PP_STRINGSIZE"] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bbc8ac8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.project +.classpath +bin +.settings +.gradle +.idea +build +run diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..16e5147 --- /dev/null +++ b/build.gradle @@ -0,0 +1,92 @@ +buildscript { + repositories { + mavenCentral() + maven { + name = "forge" + url = "https://maven.minecraftforge.net/" + } + maven { + name = "sonatype" + url = "https://oss.sonatype.org/content/repositories/snapshots/" + } + } + dependencies { + classpath ('com.anatawa12.forge:ForgeGradle:1.2-1.0.+') { + changing = true + } + } +} + +apply plugin: 'forge' +apply plugin: 'maven-publish' + +sourceCompatibility = JavaVersion.VERSION_1_8 +targetCompatibility = JavaVersion.VERSION_1_8 + +version = "0.1.0" +group = "de.mzte" +archivesBaseName = "tcdumper" + +minecraft { + version = "1.7.10-10.13.4.1614-1.7.10" + runDir = "run" + + replaceIn "de/mzte/tcdumper/TcDumper.java" + replace "@VERSION@", project.version +} + +repositories { + maven { url = "https://maven.tilera.xyz" } + //maven { url = "https://jitpack.io" } +} + +dependencies { + implementation "thaumcraft:Thaumcraft:1.7.10-4.2.3.5:deobf" +} + +processResources { + inputs.property "version", project.version + inputs.property "mcversion", project.minecraft.version + + filesMatching('mcmod.info') { + expand 'version':project.version, 'mcversion':project.minecraft.version + } +} + +task deobfJar(type: Jar) { + from sourceSets.main.output + classifier = 'deobf' +} + +task sourcesJar(type: Jar) { + from sourceSets.main.allSource + classifier = 'sources' +} + +publishing { + tasks.publish.dependsOn 'build' + publications { + mavenJava(MavenPublication) { + artifactId = project.archivesBaseName + + artifact deobfJar + artifact sourcesJar + artifact jar + } + } + + repositories { + if (project.hasProperty('mvnURL')) { + maven { + credentials { + username findProperty("mvnUsername") + password findProperty("mvnPassword") + } + url = findProperty("mvnURL") + } + } + else { + mavenLocal() + } + } +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..b761216 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..f6a15a7 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Jul 02 15:54:47 CDT 2014 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.1-bin.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..91a7e26 --- /dev/null +++ b/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/src/main/java/de/mzte/tcdumper/TcDumper.java b/src/main/java/de/mzte/tcdumper/TcDumper.java new file mode 100644 index 0000000..788288c --- /dev/null +++ b/src/main/java/de/mzte/tcdumper/TcDumper.java @@ -0,0 +1,22 @@ +package de.mzte.tcdumper; + +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.EventHandler; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import de.mzte.tcdumper.commands.CommandDumpItemAspects; +import de.mzte.tcdumper.commands.CommandDumpResearches; +import net.minecraftforge.client.ClientCommandHandler; + +@Mod( + modid = "tcdupmer", + name = "TcDumper", + version = "@VERSION@", + dependencies = "required-after:Thaumcraft" +) +public class TcDumper { + @EventHandler + public static void onPostInit(FMLPostInitializationEvent ev) { + ClientCommandHandler.instance.registerCommand(new CommandDumpItemAspects()); + ClientCommandHandler.instance.registerCommand(new CommandDumpResearches()); + } +} diff --git a/src/main/java/de/mzte/tcdumper/TcDumperBaseCommand.java b/src/main/java/de/mzte/tcdumper/TcDumperBaseCommand.java new file mode 100644 index 0000000..4ab63f5 --- /dev/null +++ b/src/main/java/de/mzte/tcdumper/TcDumperBaseCommand.java @@ -0,0 +1,24 @@ +package de.mzte.tcdumper; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; + +public abstract class TcDumperBaseCommand extends CommandBase { + public abstract String getCommandBaseName(); + + @Override + public String getCommandName() { + return "tcdump" + this.getCommandBaseName(); + } + + + @Override + public String getCommandUsage(ICommandSender sender) { + return "/" + this.getCommandName(); + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender p_71519_1_) { + return true; + } +} diff --git a/src/main/java/de/mzte/tcdumper/Util.java b/src/main/java/de/mzte/tcdumper/Util.java new file mode 100644 index 0000000..f00d384 --- /dev/null +++ b/src/main/java/de/mzte/tcdumper/Util.java @@ -0,0 +1,24 @@ +package de.mzte.tcdumper; + +import java.util.Map.Entry; + +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; + +public class Util { + public static String aspectListToString(AspectList al) { + StringBuilder sb = new StringBuilder(); + + for (Entry a : al.aspects.entrySet()) { + if (a.getKey() == null) + continue; + + sb.append(a.getValue()); + sb.append('x'); + sb.append(a.getKey().getName()); + sb.append(' '); + } + + return sb.toString().trim(); + } +} diff --git a/src/main/java/de/mzte/tcdumper/commands/CommandDumpItemAspects.java b/src/main/java/de/mzte/tcdumper/commands/CommandDumpItemAspects.java new file mode 100644 index 0000000..a1197ed --- /dev/null +++ b/src/main/java/de/mzte/tcdumper/commands/CommandDumpItemAspects.java @@ -0,0 +1,54 @@ +package de.mzte.tcdumper.commands; + +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.List; +import java.util.Map.Entry; + +import de.mzte.tcdumper.TcDumperBaseCommand; +import de.mzte.tcdumper.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.command.ICommandSender; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import thaumcraft.api.ThaumcraftApi; +import thaumcraft.api.aspects.AspectList; + +public class CommandDumpItemAspects extends TcDumperBaseCommand { + public static final String FILE_NAME = "tcitemaspects.txt"; + + @Override + public String getCommandBaseName() { + return "itemaspects"; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + try ( + OutputStream out = new BufferedOutputStream(Files.newOutputStream( + Paths.get( + Minecraft.getMinecraft().mcDataDir.getAbsolutePath(), FILE_NAME + ), + StandardOpenOption.CREATE + )) + ) { + for (Entry e : ThaumcraftApi.objectTags.entrySet()) { + Item item = (Item) e.getKey().get(0); + int meta = (int) e.getKey().get(1); + + out.write(("'" + new ItemStack(item, meta).getDisplayName() + + "' = " + Util.aspectListToString(e.getValue()) + "\n") + .getBytes()); + } + + sender.addChatMessage(new ChatComponentText("wrote dump to " + FILE_NAME)); + } catch (IOException e1) { + e1.printStackTrace(); + } + } +} diff --git a/src/main/java/de/mzte/tcdumper/commands/CommandDumpResearches.java b/src/main/java/de/mzte/tcdumper/commands/CommandDumpResearches.java new file mode 100644 index 0000000..07415f4 --- /dev/null +++ b/src/main/java/de/mzte/tcdumper/commands/CommandDumpResearches.java @@ -0,0 +1,52 @@ +package de.mzte.tcdumper.commands; + +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.Map.Entry; + +import de.mzte.tcdumper.TcDumperBaseCommand; +import de.mzte.tcdumper.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; +import thaumcraft.api.research.ResearchCategories; +import thaumcraft.api.research.ResearchCategoryList; +import thaumcraft.api.research.ResearchItem; + +public class CommandDumpResearches extends TcDumperBaseCommand { + public static final String FILE_NAME = "tcresearches.txt"; + + @Override + public String getCommandBaseName() { + return "researches"; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + try ( + OutputStream out = new BufferedOutputStream(Files.newOutputStream( + Paths.get( + Minecraft.getMinecraft().mcDataDir.getAbsolutePath(), FILE_NAME + ), + StandardOpenOption.CREATE + )) + ) { + for (ResearchCategoryList rcl : + ResearchCategories.researchCategories.values()) { + for (Entry e : rcl.research.entrySet()) { + out.write((e.getKey() + " = " + + Util.aspectListToString(e.getValue().tags) + "\n") + .getBytes()); + } + } + + sender.addChatMessage(new ChatComponentText("wrote dump to " + FILE_NAME)); + } catch (IOException e1) { + e1.printStackTrace(); + } + } +}