Skip to content

Commit

Permalink
vForge-12. Add deep copy dimension noise settings on world load.
Browse files Browse the repository at this point in the history
  • Loading branch information
Nicholas Young committed Aug 4, 2021
1 parent 152281c commit db2baa8
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 4 deletions.
20 changes: 17 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
buildscript {
repositories {
maven { url = 'https://files.minecraftforge.net/maven' }
maven { url = 'https://repo.spongepowered.org/repository/maven-public/' }
mavenCentral()
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '4.1.+', changing: true
classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT'
}
}
apply plugin: 'net.minecraftforge.gradle'
Expand All @@ -27,7 +29,8 @@ minecraft {
runs {
client {
workingDirectory project.file('run')
// property 'mixin.env.disableRefMap', 'true'
arg "-mixin.config=" + modId + ".mixins.json"
property 'mixin.env.disableRefMap', 'true'
// property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
// property 'forge.logging.console.level', 'debug'

Expand All @@ -36,7 +39,8 @@ minecraft {

server {
workingDirectory project.file('run')
// property 'mixin.env.disableRefMap', 'true'
arg "-mixin.config=" + modId + ".mixins.json"
property 'mixin.env.disableRefMap', 'true'
// property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
// property 'forge.logging.console.level', 'debug'

Expand All @@ -58,6 +62,9 @@ minecraft {
dependencies {
minecraft "net.minecraftforge:forge:" + modMinecraftVersion + "-" + modForgeVersion
implementation 'com.google.code.gson:gson:2.8.6'
if (System.getProperty("idea.sync.active") != "true") {
annotationProcessor 'org.spongepowered:mixin:0.8.2:processor'
}
}

processResources {
Expand Down Expand Up @@ -101,7 +108,8 @@ jar {
"Implementation-Version" : "${version}",
"Implementation-Vendor" : modGroup,
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
"Signing-Fingerprint" : project.hasProperty('signSHA1') ? project.findProperty('signSHA1') : "unsigned"
"Signing-Fingerprint" : project.hasProperty('signSHA1') ? project.findProperty('signSHA1') : "unsigned",
"MixinConfigs": "${modId}.mixins.json"
],)
}
}
Expand Down Expand Up @@ -174,4 +182,10 @@ uploadArchives {
}
}
}
}

apply plugin: 'org.spongepowered.mixin'

mixin {
add sourceSets.main, "${modId}.refmap.json"
}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ org.gradle.jvmargs = -Xmx3G
# No daemon
org.gradle.daemon = false

modBuildNum = Forge-11
modBuildNum = Forge-12
modId = yungsapi
modGroup = com.yungnickyoung.minecraft.yungsapi
modFileName = YungsApi
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.yungnickyoung.minecraft.yungsapi.init.YAModCriteria;
import com.yungnickyoung.minecraft.yungsapi.init.YAModJigsaw;
import com.yungnickyoung.minecraft.yungsapi.init.YAModWorldgen;
import net.minecraftforge.fml.common.Mod;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Expand All @@ -19,5 +20,6 @@ public class YungsApi {
public YungsApi() {
YAModJigsaw.init();
YAModCriteria.init();
YAModWorldgen.init();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.yungnickyoung.minecraft.yungsapi.init;

import com.yungnickyoung.minecraft.yungsapi.mixin.ChunkGeneratorAccessor;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.gen.ChunkGenerator;
import net.minecraft.world.gen.settings.DimensionStructuresSettings;
import net.minecraft.world.gen.settings.StructureSpreadSettings;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.world.WorldEvent;

import java.util.Optional;

public class YAModWorldgen {
public static void init() {
MinecraftForge.EVENT_BUS.addListener(YAModWorldgen::deepCopyDimensionalSpacing);
}

/**
* Deep copying the noise settings prevents bugs related to modded dimensions that use
* the same noise settings as existing dimensions.
* Credits to TelepathicGrunt.
*/
private static void deepCopyDimensionalSpacing(final WorldEvent.Load event) {
if (event.getWorld() instanceof ServerWorld) {
ServerWorld serverWorld = (ServerWorld) event.getWorld();

// Workaround for Terraforged
ResourceLocation chunkGenResourceLocation = Registry.CHUNK_GENERATOR_CODEC.getKey(((ChunkGeneratorAccessor) serverWorld.getChunkProvider().generator).yungsapi_getCodec());
if (chunkGenResourceLocation != null && chunkGenResourceLocation.getNamespace().equals("terraforged")) {
return;
}

ChunkGenerator chunkGenerator = serverWorld.getChunkProvider().generator;

// Grab old copy of stronghold spacing settings
StructureSpreadSettings oldStrongholdSettings = chunkGenerator.func_235957_b_().func_236199_b_();

// Make a deep copy and wrap it in an optional as DimensionStructuresSettings requires an optional
Optional<StructureSpreadSettings> newStrongholdSettings = oldStrongholdSettings == null ?
Optional.empty() :
Optional.of(new StructureSpreadSettings(
oldStrongholdSettings.func_236660_a_(),
oldStrongholdSettings.func_236662_b_(),
oldStrongholdSettings.func_236663_c_()));

// Create new deep copied DimensionStructuresSettings
// We do not need to create a new structure spacing map instance here as our patch into
// DimensionStructuresSettings will already create the new map instance for us.
DimensionStructuresSettings newSettings = new DimensionStructuresSettings(newStrongholdSettings, chunkGenerator.func_235957_b_().func_236195_a_());

((ChunkGeneratorAccessor) chunkGenerator).yungsapi_setSettings(newSettings);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.yungnickyoung.minecraft.yungsapi.mixin;

import com.mojang.serialization.Codec;
import net.minecraft.world.gen.ChunkGenerator;
import net.minecraft.world.gen.settings.DimensionStructuresSettings;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import org.spongepowered.asm.mixin.gen.Invoker;

@Mixin(ChunkGenerator.class)
public interface ChunkGeneratorAccessor {
@Accessor("settings")
void yungsapi_setSettings(DimensionStructuresSettings dimensionStructuresSettings);

@Invoker("func_230347_a_")
Codec<ChunkGenerator> yungsapi_getCodec();
}
13 changes: 13 additions & 0 deletions src/main/resources/yungsapi.mixins.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"required": true,
"package": "com.yungnickyoung.minecraft.yungsapi.mixin",
"compatibilityLevel": "JAVA_8",
"refmap": "yungsapi.refmap.json",
"mixins": [
"ChunkGeneratorAccessor"
],
"injectors": {
"defaultRequire": 1
},
"minVersion": "0.8"
}

0 comments on commit db2baa8

Please sign in to comment.