A solid foundation for Elytra mods.
Concrete is a varied set of useful stuff that is designed to be shaded into a mod's jar, meaning it's not a runtime dependency and is rather included in the dependent mod itself.
Contains small utility classes that most Concrete mods will want to use, as well as features shared between all modules.
All Concrete modules depend on Common. If a module happens to work without Common, it may stop working at any time without notice.
Contains a fluent builder for Block classes.
Contains a Predicate-based validated IItemHandler, and associated IInventory. Also contains extremely useful replacements for Container and GuiContainer.
Depends on Reflect
Contains an easy-to-use network message framework built on top of plugin message packets, similar to SimpleImpl. Replacement for the now-deprecated LambdaNetwork.
Depends on Reflect
Contains a fake resource pack that automatically generates the most common kinds of block and item models. Done without ASM and without any nasty hacks.
It's strongly recommended to put a README.md in your models/block and models/item
assets directory explaining your use of ResGen. An example is provided in
doc/resgen-README.md
.
Contains a set of method invokers, field accessors, and class instanciators that take advantage of MethodHandles when they are available.
Adds a dead-simple annotation-based configuration system, similar to the Network module.
Depends on Network
Contains a set of pre-baked Message implementations, for painless use with a NetworkContext from the Network package.
Depends on Forgelin
Adds a rules engine that provides an extensible configuration format for allowing highly configurable cause-and-effect behaviors that wouldn't be possible with a traditional config file, but in a more streamlined and efficient manner than open-ended scripting.
Concrete must be shaded into the jar and will throw an exception at runtime if it is not shaded.
Merge the following with your build.gradle to use Concrete:
plugins {
id 'com.github.johnrengelman.shadow' version '1.2.3'
}
repositories {
maven {
url = 'https://repo.elytradev.com'
}
}
jar {
classifier = 'slim'
}
shadowJar {
classifier = ''
relocate 'com.elytradev.concrete', '<me.mymod>.repackage.com.elytradev.concrete'
configurations = [project.configurations.shadow]
}
reobf {
shadowJar { mappingType = 'SEARGE' }
}
tasks.build.dependsOn reobfShadowJar
artifacts {
archives shadowJar
}
dependencies {
deobfCompile 'com.elytradev.concrete:concrete-common:0.3.7-SNAPSHOT'
shadow 'com.elytradev.concrete:concrete-common:0.3.7-SNAPSHOT'
deobfCompile 'com.elytradev.concrete:concrete-<module name>:0.3.7-SNAPSHOT'
shadow 'com.elytradev.concrete:concrete-<module name>:0.3.7-SNAPSHOT'
}
Of course, any other method of shading will work too. The Gradle Shadow plugin is what we recommend, though. (Note: Old versions of Gradle suck at SSL. If you get errors trying to download from our Maven repository, please make sure Gradle and Java are up-to-date. We enforce HTTPS redirects, so switching the URL to HTTP won't fix anything.)
Alternatively, you can use the Elytra Project Skeleton, which is designed for Elytra mods, but should work for any mod project.
Concrete only supports the latest version of Minecraft, but its utilities are generic enough that they are known to sometimes work on older versions if used with caution.