Skip to content
Open
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,6 @@ libs/*
._*
/.apt_generated/
/Users/

src/references
.vscode/
205 changes: 92 additions & 113 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,74 +1,84 @@
plugins {
id 'java-library'
id 'eclipse'
id 'maven-publish'
id 'net.minecraftforge.gradle' version '(6.0,6.2)'
id 'org.parchmentmc.librarian.forgegradle' version '1.+'
id 'org.spongepowered.mixin' version '0.7.+'
id 'net.neoforged.moddev' version '2.0.107'
id 'idea'
}

tasks.named('wrapper', Wrapper).configure {
distributionType = Wrapper.DistributionType.BIN
}

version = project.mod_version
group = project.maven_group // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = project.archives_base_name
group = project.mod_group_id

// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17.
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
base {
archivesName = project.mod_id
}

// Mojang ships Java 21 to end users in 1.21.1, so mods should target Java 21.
java.toolchain.languageVersion = JavaLanguageVersion.of(21)

println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}"

minecraft {

mappings channel: "${project.mappings_channel}", version: "${project.mappings_version}"

// makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
neoForge {
// Specify the version of NeoForge to use.
version = project.neo_version

parchment {
mappingsVersion = project.parchment_mappings_version
minecraftVersion = project.parchment_minecraft_version
}

accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
// Access Transformers are automatically detected
// accessTransformers = project.files('src/main/resources/META-INF/accesstransformer.cfg')

// Default run configurations.
// These can be tweaked, removed, or duplicated as needed.
runs {
client {
args '--username', System.env.USERNAME, '--uuid', System.env.UUID
workingDirectory project.file('run')

// Recommended logging data for a userdev environment
property 'forge.logging.markers', 'REGISTRIES'

// Recommended logging level for the console
property 'forge.logging.console.level', 'debug'

// Enable mixins
property 'mixin.env.remapRefMap', 'true'
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"

mods {
golems {
source sourceSets.main
}
}
client()
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
}

server {
workingDirectory project.file('run')
server()
programArgument '--nogui'
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
}

// Recommended logging data for a userdev environment
property 'forge.logging.markers', 'REGISTRIES'
gameTestServer {
type = "gameTestServer"
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
}

// Recommended logging level for the console
property 'forge.logging.console.level', 'debug'
data {
data()
programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
}

// Enable mixins
property 'mixin.env.remapRefMap', 'true'
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
// applies to all the run configs above
configureEach {
systemProperty 'forge.logging.markers', 'REGISTRIES'
logLevel = org.slf4j.event.Level.DEBUG
}
}

mods {
golems {
source sourceSets.main
}
}
mods {
"${mod_id}" {
sourceSet(sourceSets.main)
}
}
}

// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }

// Sets up a dependency configuration called 'localRuntime'.
configurations {
runtimeClasspath.extendsFrom localRuntime
}

repositories {
maven {
name "MMD"
Expand All @@ -84,104 +94,73 @@ repositories {
}

dependencies {
// Forge
minecraft "net.minecraftforge:forge:${project.minecraft_version}-${project.forge_version}"

// Mixin AP
annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'

// The One Probe
implementation fg.deobf("curse.maven:the-one-probe-${project.top_proj}:${project.top_file}")
implementation "curse.maven:the-one-probe-${project.top_proj}:${project.top_file}"
// Jade
implementation fg.deobf("curse.maven:jade-${project.jade_proj}:${project.jade_file}")
implementation "curse.maven:jade-${project.jade_proj}:${project.jade_file}"
}

// This block of code expands all the gradle properties in the specified resource targets.
// It copies them into the targets and expands all the defined properties.
def resourceTargets = ['META-INF/mods.toml', 'pack.mcmeta']
def intoTargets = ["$rootDir/out/production/resources/", "$rootDir/out/production/${project.name}.main/", "$rootDir/bin/main/"]
def replaceProperties = [mod_id: mod_id, mod_name: mod_name, mod_version: mod_version,
mod_authors: mod_authors, mod_description: mod_description,
minecraft_version_range: minecraft_version_range, forge_version_range: forge_version_range,
loader_version_range: loader_version_range]
processResources {
// This block of code expands all declared replace properties in the specified resource targets.
var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) {
var replaceProperties = [
minecraft_version : minecraft_version,
minecraft_version_range: minecraft_version_range,
neo_version : neo_version,
loader_version_range : loader_version_range,
mod_id : mod_id,
mod_name : mod_name,
mod_license : mod_license,
mod_version : mod_version,
mod_authors : mod_authors,
mod_description : mod_description
]
inputs.properties replaceProperties
replaceProperties.put 'project', project

filesMatching(resourceTargets) {
expand replaceProperties
}

intoTargets.each { target ->
if (file(target).exists()) {
copy {
from(sourceSets.main.resources) {
include resourceTargets
expand replaceProperties
}
into target
}
}
}
expand replaceProperties
from "src/main/templates"
into "build/generated/sources/modMetadata"
}
// Include the output of "generateModMetadata" as an input directory for the build
sourceSets.main.resources.srcDir generateModMetadata
// To avoid having to run "generateModMetadata" manually, make it run on every project reload
neoForge.ideSyncTask generateModMetadata

// Example for how to get properties into the manifest for reading by the runtime..
jar {
manifest {
attributes([
"Specification-Title": "Extra-Golems",
"Specification-Vendor": "${mod_authors}",
"Specification-Version": "1", // We are version 1 of ourselves
"Implementation-Title": project.name,
"Specification-Version": "1",
"Implementation-Title": project.mod_id,
"Implementation-Version": "${version}",
"Implementation-Vendor" :"skyjay1",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
}
}

// Example configuration to allow publishing using the maven-publish task
// we define a custom artifact that is sourced from the reobfJar output task
// and then declare that to be published
// Note you'll need to add a repository here
def reobfFile = file("$buildDir/reobfJar/output.jar")
def reobfArtifact = artifacts.add('default', reobfFile) {
type 'jar'
builtBy 'reobfJar'
}
// Example configuration to allow publishing using the maven-publish plugin
publishing {
publications {
mavenJava(MavenPublication) {
artifact reobfArtifact
register('mavenJava', MavenPublication) {
from components.java
}
}
repositories {
maven {
url "file:///${project.projectDir}/mcmodsrepo"
url "file://${project.projectDir}/mcmodsrepo"
}
}
}

javadoc {
failOnError = false
}

task deobfJar(type: Jar, dependsOn: 'jar') {
from "build/source/main"
archiveClassifier = "deobf"
}
artifacts {
archives deobfJar
}

task javadocJar(type: Jar, dependsOn: 'javadoc') {
from "build/docs/javadoc"
archiveClassifier = "javadoc"
}
artifacts {
archives javadocJar
}

tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}

// IDEA no longer automatically downloads sources/javadoc jars for dependencies.
idea {
module {
downloadSources = true
downloadJavadoc = true
}
}
35 changes: 19 additions & 16 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,27 +1,30 @@
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
# This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx4G
org.gradle.daemon=false
### based off of fabric's examplemod, which is in the public domain.
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configuration-cache=false

# Minecraft properties
minecraft_version=1.20.1
minecraft_version_range=[1.20.1,)
mappings_channel=parchment
mappings_version=2023.09.03-1.20.1
minecraft_version=1.21.1
minecraft_version_range=[1.21.1]
parchment_minecraft_version=1.21.1
parchment_mappings_version=2024.11.17

# Mod properties
mod_name=Extra-Golems
mod_id=golems
mod_version=20.1.0.2
mod_authors="skyjay1 and the MMD Team"
mod_description="Adds dozens of golems with unique textures and abilities!"
maven_group=com.mcmoddev.golems
archives_base_name=extragolems
mod_version=21.1.0.0
mod_license=zlib License
mod_authors=skyjay1 and the MMD Team
mod_description=Adds dozens of golems with unique textures and abilities!
mod_group_id=com.mcmoddev.golems

# Dependencies
forge_version=47.2.0
forge_version_range=[47,)
loader_version_range=[47,)
neo_version=21.1.206
loader_version_range=[1,)
top_proj=245211
top_file=4629624
top_file=5836106
jade_proj=324717
jade_file=4986594
jade_file=6291517
4 changes: 3 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
8 changes: 2 additions & 6 deletions settings.gradle
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
pluginManagement {
repositories {
gradlePluginPortal()
maven { url = 'https://maven.minecraftforge.net/' }
maven { url = 'https://maven.parchmentmc.org' }
maven { url = 'https://repo.spongepowered.org/repository/maven-public/' }
mavenCentral()
gradlePluginPortal()
}
}

plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0'
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0'
}
20 changes: 10 additions & 10 deletions src/main/java/com/mcmoddev/golems/EGConfig.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
package com.mcmoddev.golems;

import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.common.ForgeConfigSpec;
import net.neoforged.neoforge.common.ModConfigSpec;

import java.time.LocalDateTime;
import java.time.Month;
import java.util.List;

public final class EGConfig {

private final ForgeConfigSpec.BooleanValue BEDROCK_GOLEM_CREATIVE_ONLY;
private final ForgeConfigSpec.BooleanValue PUMPKIN_BUILDS_GOLEMS;
private final ForgeConfigSpec.BooleanValue ENABLE_FRIENDLY_FIRE;
private final ForgeConfigSpec.BooleanValue ENABLE_USE_SPELL_ITEM;
private final ForgeConfigSpec.BooleanValue ENABLE_HEAL_GOLEMS;
private final ForgeConfigSpec.BooleanValue ENABLE_HOLIDAYS;
private final ForgeConfigSpec.IntValue VILLAGER_GOLEM_SPAWN_CHANCE;
private final ForgeConfigSpec.IntValue DEBUG_GOLEMS_PERMISSION_LEVEL;
private final ModConfigSpec.BooleanValue BEDROCK_GOLEM_CREATIVE_ONLY;
private final ModConfigSpec.BooleanValue PUMPKIN_BUILDS_GOLEMS;
private final ModConfigSpec.BooleanValue ENABLE_FRIENDLY_FIRE;
private final ModConfigSpec.BooleanValue ENABLE_USE_SPELL_ITEM;
private final ModConfigSpec.BooleanValue ENABLE_HEAL_GOLEMS;
private final ModConfigSpec.BooleanValue ENABLE_HOLIDAYS;
private final ModConfigSpec.IntValue VILLAGER_GOLEM_SPAWN_CHANCE;
private final ModConfigSpec.IntValue DEBUG_GOLEMS_PERMISSION_LEVEL;

private boolean aprilFirst;
private boolean halloween;
Expand All @@ -31,7 +31,7 @@ public final class EGConfig {
private int villagerGolemSpawnChance;
private int debugGolemsPermissionLevel;

public EGConfig(final ForgeConfigSpec.Builder builder) {
public EGConfig(final ModConfigSpec.Builder builder) {
// Global values
builder.push("general");
BEDROCK_GOLEM_CREATIVE_ONLY = builder.comment("When true, only players in creative mode can use a Bedrock Golem spawn item")
Expand Down
Loading