sinth0r4s / examplemod1.7.10 Goto Github PK
View Code? Open in Web Editor NEWAn example mod for Minecraft 1.7.10 with Forge focussed on a stable setup.
License: MIT License
An example mod for Minecraft 1.7.10 with Forge focussed on a stable setup.
License: MIT License
The version of ForgeGradle this project uses is unavailable on jitpack.io.
How can I make the VERSION field a custom value, such as 1.0, 1.1, instead of the current git version?
Reason: https://youtrack.jetbrains.com/issue/IDEA-265203
As Vlad already said correctly: Build logic must never rely on CWD. Use Project.file, Project.projectDir, Project.buildDir, Project.rootDir etc instead. This applies to plugins as well. Plugins relying on CWD are broken and need to be fixed.
A loose collection of ideas on how it might be possible to test build scripts automatically. I've already had moments where I broke something with cleanup and fixes
is there perhaps a plugin I'm missing?
I did brew install gitversion
and I get reasonable output:
{
"Major": 9,
"Minor": 12,
"Patch": 8,
"PreReleaseTag": "DrParadox7-master.1",
"PreReleaseTagWithDash": "-DrParadox7-master.1",
"PreReleaseLabel": "DrParadox7-master",
"PreReleaseLabelWithDash": "-DrParadox7-master",
"PreReleaseNumber": 1,
"WeightedPreReleaseNumber": 1,
"BuildMetaData": 6,
"BuildMetaDataPadded": "0006",
"FullBuildMetaData": "6.Branch.DrParadox7-master.Sha.e3a78fe1857d3715c2ee3faeec66848e5171dad2",
"MajorMinorPatch": "9.12.8",
"SemVer": "9.12.8-DrParadox7-master.1",
"LegacySemVer": "9.12.8-DrParadox7-master1",
"LegacySemVerPadded": "9.12.8-DrParadox7-maste0001",
"AssemblySemVer": "9.12.8.0",
"AssemblySemFileVer": "9.12.8.0",
"FullSemVer": "9.12.8-DrParadox7-master.1+6",
"InformationalVersion": "9.12.8-DrParadox7-master.1+6.Branch.DrParadox7-master.Sha.e3a78fe1857d3715c2ee3faeec66848e5171dad2",
"BranchName": "DrParadox7_master",
"EscapedBranchName": "DrParadox7-master",
"Sha": "e3a78fe1857d3715c2ee3faeec66848e5171dad2",
"ShortSha": "e3a78fe",
"NuGetVersionV2": "9.12.8-drparadox7-maste0001",
"NuGetVersion": "9.12.8-drparadox7-maste0001",
"NuGetPreReleaseTagV2": "drparadox7-maste0001",
"NuGetPreReleaseTag": "drparadox7-maste0001",
"VersionSourceSha": "1e26a2674a2eb0b39e16da4a8acd2013f299d74a",
"CommitsSinceVersionSource": 6,
"CommitsSinceVersionSourcePadded": "0006",
"UncommittedChanges": 0,
"CommitDate": "2021-11-30"
}
but building Railcraft (for example) produces a Railcraft-1.7.10-latest-2-ge3a78fe.jar
which apparently has no version number
It would be nice to have automatic minor or major version bump on each PR. This way nobody needs to remember to tag things.
Using git remote get-url origin
we can get url like [email protected]:TheElan/org-build-system-updater.git
, from it a groupId can be extracted as github.com:TheElan -> github.com.TheElan
and name as org-build-system-updater as artifactId
This way we are both compliant with jitpack scheme on other maven as well as locally without a need to setup it manually for each project. This would also work nicely with forks.
The only problem I can see here is jitpack building behavior. It looks like it doesn't clone but copy files, which means there is no git repo when it's building, might need to find some workaround either changing smth in jitpack.yml
.
It would be good to include at least CI (but potentially other files) in upgrade process.
This includes handling files being moved and deleted.
bombcar@lappy386 ~/Documents/GitHub/CodeChickenLib (fixbuild) $ ./gradlew clean setupDecompWorkspace idea genI
> Task :idea
Generated IDEA project at file:///Users/bombcar/Documents/GitHub/CodeChickenLib/CodeChickenLib.ipr
> Task :genIntellijRuns
java.lang.NullPointerException
at net.minecraftforge.gradle.user.UserBasePlugin.add(UserBasePlugin.java:552)
at net.minecraftforge.gradle.user.UserBasePlugin.injectIntellijRuns(UserBasePlugin.java:519)
at net.minecraftforge.gradle.user.UserBasePlugin$3.execute(UserBasePlugin.java:446)
at net.minecraftforge.gradle.user.UserBasePlugin$3.execute(UserBasePlugin.java:415)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:732)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:705)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:494)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:479)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:462)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$400(ExecuteActionsTaskExecuter.java:105)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:273)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:251)
at org.gradle.internal.execution.steps.ExecuteStep.lambda$executeOperation$1(ExecuteStep.java:66)
at java.util.Optional.orElseGet(Optional.java:267)
at org.gradle.internal.execution.steps.ExecuteStep.executeOperation(ExecuteStep.java:66)
at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:34)
at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:47)
at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:44)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:34)
at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:72)
at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:42)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:53)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:39)
at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:44)
at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:77)
at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:58)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:54)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:32)
at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:57)
at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:38)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:63)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:30)
at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:176)
at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:76)
at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:47)
at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:43)
at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:32)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:39)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:25)
at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:102)
at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:95)
at java.util.Optional.map(Optional.java:215)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:83)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:96)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:52)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:83)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:54)
at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:88)
at java.util.Optional.orElseGet(Optional.java:267)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:88)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:46)
at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:34)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:43)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$3.withWorkspace(ExecuteActionsTaskExecuter.java:286)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:43)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:33)
at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:40)
at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:30)
at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:54)
at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:40)
at org.gradle.internal.execution.impl.DefaultExecutionEngine.rebuild(DefaultExecutionEngine.java:46)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$0(ExecuteActionsTaskExecuter.java:182)
at java.util.Optional.map(Optional.java:215)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:182)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:411)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:398)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:391)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:377)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.lang.Thread.run(Thread.java:748)
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.9.1/userguide/command_line_interface.html#sec:command_line_warnings
Now this was run on codechickenlib - which makes sense; a library might not be able to generate runs, but we should detect it's a library and just politely warn out.
Also we should print the "build script" ID when it explodes, mine was 8fa7883b6196c1765266f4e6ddf3118d5043aafb
It would be nice to have a unified encoding in the projects on both file source level and compiled code level. Needs some research, here are some useful links:
https://illegalargumentexception.blogspot.com/2009/05/java-rough-guide-to-character-encoding.html
https://stackoverflow.com/questions/5258526/java-source-file-encoding-with-chinese-character
It would be nice to test if MC at least starts and loads world correctly with your changes. There is a libs which allow integration tests.
The proposition is as follows:
A list of PR's that test the build script:
Does not run in dev. Likely culprit: CoFHCore Fixed
CI Fails Fixed with setupDecompWorkspace in GitHub CI
It is possible to use a system installation of gradle with the script. If that has a version missmatch we should tell the user to run the provided wrapper.
Workflow allow specifying containers for the job, we should use some java container.
This should speed up build times.
I thought the build.gradle was supposed to inform IntelliJ what to use, but it's defaulting to 11 and I can't make it go back.
Command line ./gradew works fine - as do other GTNH mods.
Add a gradle task for automatic profiling setup
As a continuation of #15
It would be nice to have some example tests, to show how they can be done.
On my server, if I remove or forget a mod, it pops up a window saying all these world blocks will be deleted (even if none are present iirc).
We should have a CI check for that per mod, so if 'chisel' becomes 'chisel-g43g32' somehow, it'l flag it.
FMLCorePluginContainsFMLMod
and loadNormalModAfterApplingMixins
into one parameterdev
and sources
jarmain
into example branchesFMLCorePluginContainsFMLMod
required if Mixins are used? Strip otherwiseprefix<version>
into accountOptionals:
Update happens on next automatic commit and CI is skipped, maybe we shouldn't skip CI and just make it so only this workflow is triggered on it
Add support for multiple tag prefixes: for example dev
and release
. Add configuration options for an optional organisation.gradle
Try to find out what causes wired behaviour, on system where only jre was present and dev used a bundled version of 11th in IDEA there was a problem of gradle not downloading jdk and attempting to use jre.
Running ./gradlew build
should ensure proper java setup
Test cases to try out:
Fiddle with PATH and JAVA_HOME (empty, present (pointing to java install dir), absent)
Add plugin(s) which perform static analysis and include them in CI step along with action which will pinpoint lines in question. (E.g. stream not closed, infinite loop, etc)
compile 'org.springframework:spring-core:3.0.+'
). It might update to newer versions, but will skip untagged dev commits. Benefit: Stays more up-to-date. Negativ: A tagged commit can still break the system, yet it is less like because it is specifically choosenAll the GradleExceptions are red underlined with "unable to resolve GradleException", and the first two imports don't work, saying "unable to resolve class ..."
Not sure where I went wrong but I defiantly did lol... Help would be much appreciated!
problem occurred configuring root project 'ExampleMod1.7.10-main'.
Could not open cp_proj generic class cache for build file '/Minecarft/ExampleMod1.7.10-main/build.gradle' (.gradle/caches/6.9.1/scripts/no4yshs0nedrc26qe3co4g14).
BUG! exception in phase 'semantic analysis' in source unit 'BuildScript' Unsupported class file major version 65
Just a list of things to mention in this guide:
gradle/
folder with the one provided by this examplebuild.gradle
or build.gradle.kts
to new file dependencies.gradle
build.gradle
or build.gradle.kts
to new file repositories.gradle
gradle.properties
to your modsrc/main/resources/mcmod.info
contains ${modId}
, ${modName}
. ${modVersion}
and ${minecraftVersion}
.gitignore
in your projectjitpack.yml
into your project.github/workflows/gradle.yml
to your project (including folders)If you migrate a project with mixins:
mixins.mymodid.json
and add information to gradle.properties
mixins.mymodid.json
and add information to gradle.properties
mixins.mymodid.json
repo had an issue compiling OpenComputer on Windows - it crashed out due to lack of RAM.
there are jvm options in the gradlew and gradle.bat but the same limit didn’t seem to crash me out but it may have reused a previous gradle.
It would be nice for those to be reasonable amounts and easily changed in one place.
What’s interesting is if CI worked with them - did it actually use them? They were like 64m
Would be a much pleasant experience editing scripts.
Do you know how to solve it? I am trying to make a 1.7.10 mod today but seems there are some problems after clicking the setupDecompWorkspace button
The server returned HTTP response code: 403 for URL: https://s3.amazonaws.com/Minecraft.Download/versions/1.7.10/1.7.10.jar
Add an optional property to override the archive name.
Crops++ goes by CropsPP-XXX.jar
but the internal name is berriespp
. GT++ goes by gt-plus-plus
but the internal name is miscutils
Please add a new branch that will contain the lightest version of repository - for example, its build.gradle will contain only necessary lines like in this example https://github.com/anatawa12/migrating-ForgeGradle-2.3-to-4.x/blob/master/build.gradle
dev and sources jar have a weird mix between proper string and GRADLETOKEN_MODID
in the visible sources. It does cause issues in dev.
Add support for multiple api packages?
Needs some changes in buildscript and also additional steps in workflow, can use this github tutoria as a reference
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.