Skip to content

Commit 1f37daa

Browse files
[Fix] Crash with ferritecore
- Added one verison source. - Fixed the crash.
1 parent d1e35b4 commit 1f37daa

4 files changed

Lines changed: 41 additions & 19 deletions

File tree

buildSrc/src/main/groovy/modernfix.common-conventions.gradle

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,28 @@ architectury {
1616
}
1717

1818
group = 'org.embeddedt'
19-
// extract base version from tag, generate other metadata ourselves
20-
def details = versionDetails()
21-
def plusIndex = details.lastTag.indexOf("+")
22-
if(plusIndex == -1) {
23-
plusIndex = details.lastTag.length()
24-
}
25-
def baseVersion = details.lastTag.substring(0, plusIndex)
26-
def dirtyMarker = grgit.status().clean ? "" : ".dirty"
27-
def commitHashMarker = details.commitDistance > 0 ? ("." + details.gitHash.substring(0, Math.min(4, details.gitHash.length()))) : ""
28-
def preMarker = (details.commitDistance > 0 || !details.isCleanTag) ? ("-beta." + details.commitDistance) : ""
29-
if(preMarker.length() > 0) {
30-
// bump to next patch release
31-
def versionParts = baseVersion.tokenize(".")
32-
baseVersion = "${versionParts[0]}.${versionParts[1]}.${versionParts[2].toInteger() + 1}"
19+
// If an explicit version is provided (for example in gradle.properties), prefer it.
20+
if (project.hasProperty('version') && project.version != 'unspecified' && project.version.toString().trim()) {
21+
// keep user-specified project.version
22+
} else {
23+
// extract base version from tag, generate other metadata ourselves
24+
def details = versionDetails()
25+
def plusIndex = details.lastTag.indexOf("+")
26+
if(plusIndex == -1) {
27+
plusIndex = details.lastTag.length()
28+
}
29+
def baseVersion = details.lastTag.substring(0, plusIndex)
30+
def dirtyMarker = grgit.status().clean ? "" : ".dirty"
31+
def commitHashMarker = details.commitDistance > 0 ? ("." + details.gitHash.substring(0, Math.min(4, details.gitHash.length()))) : ""
32+
def preMarker = (details.commitDistance > 0 || !details.isCleanTag) ? ("-beta." + details.commitDistance) : ""
33+
if(preMarker.length() > 0) {
34+
// bump to next patch release
35+
def versionParts = baseVersion.tokenize(".")
36+
baseVersion = "${versionParts[0]}.${versionParts[1]}.${versionParts[2].toInteger() + 1}"
37+
}
38+
def versionString = "${baseVersion}${preMarker}+mc${minecraft_version}${commitHashMarker}${dirtyMarker}"
39+
version = versionString
3340
}
34-
def versionString = "${baseVersion}${preMarker}+mc${minecraft_version}${commitHashMarker}${dirtyMarker}"
35-
version = versionString
3641
archivesBaseName = rootProject.archives_base_name + '-' + project.name
3742

3843
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_21

common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/mojang_registry_size/StateHolderMixin.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import net.minecraft.world.level.block.state.StateHolder;
55
import net.minecraft.world.level.block.state.properties.Property;
66
import org.embeddedt.modernfix.annotation.RequiresMod;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
79
import org.spongepowered.asm.mixin.Mixin;
810
import org.spongepowered.asm.mixin.Shadow;
911
import org.spongepowered.asm.mixin.injection.At;
@@ -19,15 +21,27 @@
1921
@Mixin(StateHolder.class)
2022
@RequiresMod("!ferritecore")
2123
public class StateHolderMixin {
24+
private static final Logger LOGGER = LoggerFactory.getLogger("ModernFix/StateHolderMixin");
2225
private static final Reference2ObjectArrayMap<Property<?>, ?> EMPTY_NEIGHBOURS = new Reference2ObjectArrayMap<>();
26+
private static boolean hasLoggedFerriteCore = false;
2327

2428
@Shadow private Map<Property<?>, ?> neighbours;
2529

2630
/* optimize the case where block has no properties */
2731
@Inject(method = "populateNeighbours", at = @At("RETURN"), require = 0)
2832
private void replaceEmptyTable(CallbackInfo ci) {
29-
if (this.neighbours.isEmpty()) {
30-
this.neighbours = EMPTY_NEIGHBOURS;
33+
// Check if the neighbors map is the actual implementation, not FerriteCore's wrapper
34+
// FerriteCore replaces this with a crash-on-access map, so we need to detect and skip that
35+
try {
36+
if (this.neighbours.isEmpty()) {
37+
this.neighbours = EMPTY_NEIGHBOURS;
38+
}
39+
} catch (UnsupportedOperationException e) {
40+
// FerriteCore is active and using its own optimization, skip our optimization
41+
if (!hasLoggedFerriteCore) {
42+
LOGGER.debug("Disabling ModernFix neighbor table optimization (reason: FerriteCore is present)");
43+
hasLoggedFerriteCore = true;
44+
}
3145
}
3246
}
3347
}

gradle.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,7 @@ use_fabric_api_at_runtime=true
3333

3434
# Look up maven coordinates when changing shadow_version
3535
shadow_version=7.1.2
36+
37+
# Project version (single source of truth for ${version} in metadata)
38+
# Update this to bump the mod version.
39+
version=5.20.6

neoforge/src/main/java/org/embeddedt/modernfix/neoforge/init/ModernFixClientForge.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import net.neoforged.fml.ModLoadingIssue;
1414
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
1515
import net.neoforged.neoforge.client.event.ClientTickEvent;
16-
import net.neoforged.neoforge.client.event.CustomizeGuiOverlayEvent;
1716
import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent;
1817
import net.neoforged.neoforge.client.event.RenderFrameEvent;
1918
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;

0 commit comments

Comments
 (0)