Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions adapters/mc-neoforge-1-21-1/adapter-build-logic/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
plugins {
`kotlin-dsl`
}

repositories {
gradlePluginPortal()
mavenCentral()
}

dependencies {
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.21")
implementation("net.neoforged.moddev:net.neoforged.moddev.gradle.plugin:2.0.141")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
pluginManagement {
includeBuild("../../../build-logic")
repositories {
gradlePluginPortal()
mavenCentral()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
plugins {
kotlin("jvm")
id("net.neoforged.moddev")
}

val modId: String by properties
val modVersion: String by properties
val neoVersion: String by properties
val parchmentVersion: String by properties
val mcVersion: String by properties

neoForge {
version = neoVersion

parchment {
mappingsVersion = parchmentVersion
minecraftVersion = mcVersion
}

runs {
create("client") {
client()
gameDirectory = project.file("runs/client")
programArguments.addAll("--username", "Developer")
systemProperty("neoforge.enabledGameTestNamespaces", modId)
}
create("client2") {
client()
gameDirectory = project.file("runs/client2")
programArguments.addAll("--username", "Developer2")
systemProperty("neoforge.enabledGameTestNamespaces", modId)
}

create("server") {
server()
gameDirectory = project.file("runs/server")
programArgument("--nogui")
systemProperty("neoforge.enabledGameTestNamespaces", modId)
}

// This run config launches GameTestServer and runs all registered gametests, then exits.
// By default, the server will crash when no gametests are provided.
// The gametest system is also enabled by default for other run configs under the /test command.
create("gameTestServer") {
type = "gameTestServer"
gameDirectory = project.file("runs/gameTestServer")
systemProperty("neoforge.enabledGameTestNamespaces", modId)
}

create("data") {
data()
gameDirectory = project.file("runs/data")

programArguments.addAll("--mod", modId, "--all", "--output", file("src/generated/resources/").absolutePath, "--existing", file("src/main/resources/").absolutePath)
}

configureEach {
// The markers can be added/remove as needed separated by commas.
// "SCAN": For mods scan.
// "REGISTRIES": For firing of registry events.
// "REGISTRYDUMP": For getting the contents of all registries.
systemProperty("forge.logging.markers", "REGISTRIES")

//logLevel = org.slf4j.event.Level.DEBUG

// Colorful logs
jvmArgument("-XX:+AllowEnhancedClassRedefinition")
systemProperty("terminal.jline", "true")
loggingConfigFile.set(project.file("log4j2_config.xml"))
}
}

mods {
create(modId) {
sourceSet(sourceSets.main.get())
}
}
}

repositories {
gradlePluginPortal()
mavenCentral()
}

java {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}

kotlin {
jvmToolchain(21)
}
18 changes: 18 additions & 0 deletions adapters/mc-neoforge-1-21-1/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
plugins {
id("dsgl-mc-adapter.conventions")
id("dsgl-mc-neoforge-1-21-1.conventions")
id("dsgl-releaseable-module.conventions")
}

dsglRelease {
syncKeys.add("modVersion")
}

dependencies {
val coreProject = findProject(":core")
?: findProject(":dsgl:core")
?: error("DSGL core project not found (expected :core or :dsgl:core).")
implementation(coreProject)
testImplementation(kotlin("test-junit"))
testImplementation(kotlin("test"))
}
38 changes: 38 additions & 0 deletions adapters/mc-neoforge-1-21-1/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
publishEnabled=false

# Minecraft and Forge params
neoVersion=21.1.221
neoVersionRange=[21.1.0,)
parchmentVersion=2024.11.17
mcVersion=1.21.1
mcVersionRange=[1.21.1, 1.22)

# Mod params
modGroup=org.dreamfinity
modId=dsgl-demo
modName=dsgl-demo
modArchivesName=dsgl-demo
modAuthor=Veritaris
modIcon=
modDescription=Dreamfinity Simple GUI Library Demo
modCredits=Veritaris
buildVersion=1
modVersion=0.0.1

# Mod dev params
isClientBuild=false
clientRunArgs="--username" "Dreamfinity"
serverRunArgs="--no-gui"
hotReload=true
msdfDebug=false
msdfDebugDecorations=false
msdfDebugPerformance=false
rebuildTrace=false
perfDebug=false
dsglOverlayDebug=true
dsglOverlayControls=true

startParameter.offline=true

# Publishing params
publishProjectDepsOnly=true
80 changes: 80 additions & 0 deletions adapters/mc-neoforge-1-21-1/log4j2_config.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" shutdownHook="disable">
<filters>
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<MarkerFilter marker="NETWORK_PACKETS" onMatch="${sys:forge.logging.marker.networking:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="CLASSLOADING" onMatch="${sys:forge.logging.marker.classloading:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="LAUNCHPLUGIN" onMatch="${sys:forge.logging.marker.launchplugin:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="CLASSDUMP" onMatch="${sys:forge.logging.marker.classdump:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="AXFORM" onMatch="${sys:forge.logging.marker.axform:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="EVENTBUS" onMatch="${sys:forge.logging.marker.eventbus:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="DISTXFORM" onMatch="${sys:forge.logging.marker.distxform:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="SCAN" onMatch="${sys:forge.logging.marker.scan:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="REGISTRIES" onMatch="${sys:forge.logging.marker.registries:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="REGISTRYDUMP" onMatch="${sys:forge.logging.marker.registrydump:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="SPLASH" onMatch="${sys:forge.logging.marker.splash:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="RESOURCE-CACHE" onMatch="${sys:forge.logging.marker.resource.cache:-DENY}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="FORGEMOD" onMatch="${sys:forge.logging.marker.forgemod:-NEUTRAL}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="LOADING" onMatch="${sys:forge.logging.marker.loading:-NEUTRAL}" onMismatch="NEUTRAL"/>
<MarkerFilter marker="CORE" onMatch="${sys:forge.logging.marker.core:-NEUTRAL}" onMismatch="NEUTRAL"/>
</filters>
<Appenders>
<Console name="Console">
<PatternLayout>
<LoggerNamePatternSelector defaultPattern="%style{[%d{HH:mm:ss}]}{blue} %highlightForge{[%t/%level]}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=green, TRACE=blue} %style{(%logger{1})}{cyan} %highlight{%minecraftFormatting{%msg{nolookup}}%n%tEx}{FATAL=red, ERROR=red, WARN=normal, INFO=normal, DEBUG=normal, TRACE=normal}">
<!-- Dont show the logger name for minecraft classes-->
<PatternMatch key="net.minecraft.,com.mojang." pattern="%style{[%d{HH:mm:ss}]}{blue} %highlightForge{[%t/%level]}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=green, TRACE=blue} %style{(Minecraft)}{cyan} %highlight{%minecraftFormatting{%msg{nolookup}}%n%tEx}{FATAL=red, ERROR=red, WARN=normal, INFO=normal, DEBUG=normal, TRACE=normal}"/>
</LoggerNamePatternSelector>
</PatternLayout>
</Console>
<Queue name="ServerGuiConsole" ignoreExceptions="true">
<PatternLayout>
<LoggerNamePatternSelector defaultPattern="[%d{HH:mm:ss}] [%t/%level] [%c{2.}/%markerSimpleName]: %minecraftFormatting{%msg{nolookup}}{strip}%n">
<!-- don't include the full logger name for Mojang's logs since they use full class names and it's very verbose -->
<PatternMatch key="net.minecraft." pattern="[%d{HH:mm:ss}] [%t/%level] [minecraft/%logger{1}]: %minecraftFormatting{%msg{nolookup}}{strip}%n"/>
<PatternMatch key="com.mojang." pattern="[%d{HH:mm:ss}] [%t/%level] [mojang/%logger{1}]: %minecraftFormatting{%msg{nolookup}}{strip}%n"/>
</LoggerNamePatternSelector>
</PatternLayout>
</Queue>
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{ddMMMyyyy HH:mm:ss.SSS}] [%t/%level] [%logger/%markerSimpleName]: %minecraftFormatting{%msg{nolookup}}{strip}%n%xEx"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<OnStartupTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="99" fileIndex="min"/>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="DebugFile" fileName="logs/debug.log" filePattern="logs/debug-%i.log.gz">
<PatternLayout pattern="[%d{ddMMMyyyy HH:mm:ss.SSS}] [%t/%level] [%logger/%markerSimpleName]: %minecraftFormatting{%msg{nolookup}}{strip}%n%xEx"/>
<Policies>
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="200MB"/>
</Policies>
<DefaultRolloverStrategy max="5" fileIndex="min"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- make sure mojang's logging is set to 'info' so that their LOGGER.isDebugEnabled() behavior isn't active -->
<Logger level="${sys:forge.logging.mojang.level:-info}" name="com.mojang"/>
<Logger level="${sys:forge.logging.mojang.level:-info}" name="net.minecraft"/>
<Logger level="${sys:forge.logging.classtransformer.level:-info}" name="cpw.mods.modlauncher.ClassTransformer"/>

<!-- disable FileUtil spam -->
<Logger level="INFO" name="os.ut.FileUtil" additivity="false" />

<!-- Netty reflects into JDK internals, and it's causing useless DEBUG-level error stacktraces. We just ignore them -->
<Logger name="io.netty.util.internal.PlatformDependent0">
<filters>
<RegexFilter regex="^direct buffer constructor: unavailable$" onMatch="DENY" onMismatch="NEUTRAL" />
<RegexFilter regex="^jdk\.internal\.misc\.Unsafe\.allocateUninitializedArray\(int\): unavailable$" onMatch="DENY" onMismatch="NEUTRAL" />
</filters>
</Logger>

<Root level="DEBUG">
<AppenderRef ref="Console" />
<AppenderRef ref="ServerGuiConsole" level="${sys:forge.logging.console.level:-info}"/>
<AppenderRef ref="File" level="${sys:forge.logging.file.level:-info}"/>
<AppenderRef ref="DebugFile" />
</Root>
</Loggers>
</Configuration>
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package org.dreamfinity.dsgl.mcNeoforge1211

import org.dreamfinity.dsgl.core.font.FontPreloadSummary
import org.dreamfinity.dsgl.core.font.FontRegistry
import java.io.File

object DsglFonts {
private val lock = Any()

@Volatile
private var initialized: Boolean = false

@Volatile
private var lastSummary: FontPreloadSummary? = null

private val warmFontIds: Set<String> = linkedSetOf(
FontRegistry.DEFAULT_FONT_ID,
FontRegistry.FONT_UBUNTU,
FontRegistry.FONT_JB_MONO,
FontRegistry.TELEGRAFICO,
FontRegistry.FALLBACK_FONT_ID
)

fun ensureInitialized(gameDir: File, classLoader: ClassLoader = javaClass.classLoader): FontPreloadSummary {
if (initialized) {
return lastSummary ?: FontRegistry.discoverAndPreloadFonts(
externalFontsDir = File(gameDir, "dsgl/fonts"),
classLoader = classLoader
).also { lastSummary = it }
}
synchronized(lock) {
if (initialized) {
return lastSummary ?: FontRegistry.discoverAndPreloadFonts(
externalFontsDir = File(gameDir, "dsgl/fonts"),
classLoader = classLoader
).also { lastSummary = it }
}
val summary = FontRegistry.discoverAndPreloadFonts(
externalFontsDir = File(gameDir, "dsgl/fonts"),
classLoader = classLoader
)
val warmed = FontRegistry.predecodeAtlases(warmFontIds)
if (warmed > 0) {
println("[DSGL-MSDF] predecoded atlases for $warmed warm fonts")
}
lastSummary = summary
initialized = true
return summary
}
}

fun summaryOrNull(): FontPreloadSummary? = lastSummary
}
Loading