feat: use anvillib

This commit is contained in:
Timo Ley 2023-11-15 18:35:02 +01:00
parent 4cad6de484
commit fc200ca483
11 changed files with 16 additions and 135 deletions

View file

@ -35,6 +35,9 @@ allprojects {
group = rootProject.maven_group
repositories {
maven {
url "https://maven.tilera.xyz"
}
// Add repositories to retrieve artifacts from in here.
// You should only use this when depending on other mods because
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.

View file

@ -10,6 +10,8 @@ dependencies {
// We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies
// Do NOT use other classes from fabric loader
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
modImplementation("net.anvilcraft:anvillib-18:0.2.0") {transitive = false}
// Remove the next line if you don't want to depend on the API
// modApi "dev.architectury:architectury:${rootProject.architectury_version}"
}

View file

@ -1,11 +1,11 @@
package com.cursedcauldron.wildbackport.common.registry.worldgen;
import com.cursedcauldron.wildbackport.common.utils.SupplierHolder;
import com.cursedcauldron.wildbackport.common.worldgen.AdvancedJigsawConfiguration;
import com.cursedcauldron.wildbackport.common.worldgen.features.AncientCityFeature;
import com.cursedcauldron.wildbackport.core.api.CoreRegistry;
import com.cursedcauldron.wildbackport.core.mixin.access.StructureFeatureAccessor;
import net.anvilcraft.anvillib.worldgen.AdvancedStructurePoolFeatureConfig;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.world.level.levelgen.GenerationStep.Decoration;
@ -17,7 +17,7 @@ public class WBStructureFeatures {
public static final Holder<StructureFeature<?>> ANCIENT_CITY
= SupplierHolder.createAndRegister(STRUCTURE_FEATURES, "ancient_city", () -> {
var acf = new AncientCityFeature(AdvancedJigsawConfiguration.CODEC);
var acf = new AncientCityFeature(AdvancedStructurePoolFeatureConfig.CODEC);
StructureFeatureAccessor.getStep().put(
acf, Decoration.UNDERGROUND_STRUCTURES
);

View file

@ -6,12 +6,12 @@ import java.util.stream.Collectors;
import com.cursedcauldron.wildbackport.common.tag.WBBiomeTags;
import com.cursedcauldron.wildbackport.common.utils.SupplierHolder;
import com.cursedcauldron.wildbackport.common.worldgen.AdvancedJigsawConfiguration;
import com.cursedcauldron.wildbackport.common.worldgen.features.AncientCityFeature;
import com.cursedcauldron.wildbackport.common.worldgen.structure.AncientCityStructurePieces;
import com.cursedcauldron.wildbackport.common.worldgen.structure.processors.BlockTagRotProcessor;
import com.cursedcauldron.wildbackport.core.api.CoreRegistry;
import net.anvilcraft.anvillib.worldgen.AdvancedStructurePoolFeatureConfig;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.data.BuiltinRegistries;
@ -49,11 +49,10 @@ public class WBStructures {
()
-> ((AncientCityFeature) WBStructureFeatures.ANCIENT_CITY.value())
.configured(
new AdvancedJigsawConfiguration(
new AdvancedStructurePoolFeatureConfig(
AncientCityStructurePieces.START,
7,
116,
Optional.of(new ResourceLocation("city_anchor"))
116
),
WBBiomeTags.HAS_ANCIENT_CITY,
true,

View file

@ -1,53 +0,0 @@
package com.cursedcauldron.wildbackport.common.worldgen;
import java.util.Optional;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.core.Holder;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.levelgen.feature.configurations.JigsawConfiguration;
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool;
public class AdvancedJigsawConfiguration extends JigsawConfiguration {
public static final Codec<JigsawConfiguration> CODEC = RecordCodecBuilder.create(
(instance) -> {
return instance
.group(
StructureTemplatePool.CODEC.fieldOf("start_pool")
.forGetter(
(self) -> ((AdvancedJigsawConfiguration) self).startPool()
),
Codec.intRange(0, 7).fieldOf("size").forGetter(
(self) -> ((AdvancedJigsawConfiguration) self).maxDepth()
),
Codec.INT.fieldOf("max_distance_from_center")
.forGetter(
(self)
-> ((AdvancedJigsawConfiguration) self)
.maxDistanceFromCenter
),
ResourceLocation.CODEC.optionalFieldOf("start_jigsaw_name")
.forGetter(
(self) -> ((AdvancedJigsawConfiguration) self).startJigsawName
)
)
.apply(instance, AdvancedJigsawConfiguration::new);
}
);
public int maxDistanceFromCenter;
public Optional<ResourceLocation> startJigsawName;
public AdvancedJigsawConfiguration(
Holder<StructureTemplatePool> holder,
int i,
int maxDistanceFromCenter,
Optional<ResourceLocation> startJigsawName
) {
super(holder, i);
this.maxDistanceFromCenter = maxDistanceFromCenter;
this.startJigsawName = startJigsawName;
}
}

View file

@ -30,6 +30,8 @@ dependencies {
// modApi "dev.architectury:architectury-fabric:${rootProject.architectury_version}"
modImplementation("com.github.glitchfiend:TerraBlender-fabric:${minecraft_version}-${terrablender_version}")
modImplementation("net.anvilcraft:anvillib-18-fabric:0.2.0") {transitive = false}
common(project(path: ":common", configuration: "namedElements")) { transitive false }
shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false }
}

View file

@ -1,34 +0,0 @@
package com.cursedcauldron.wildbackport.core.mixin.fabric.common;
import com.cursedcauldron.wildbackport.common.worldgen.AdvancedJigsawConfiguration;
import net.minecraft.world.level.levelgen.feature.configurations.JigsawConfiguration;
import net.minecraft.world.level.levelgen.structure.PoolElementStructurePiece;
import net.minecraft.world.level.levelgen.structure.pools.JigsawPlacement;
import net.minecraft.world.phys.AABB;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
@Mixin(JigsawPlacement.class)
public class JigsawPlacementMixin {
// this is a lambda
@ModifyVariable(
method = "method_39824", at = @At(value = "STORE", ordinal = 0), remap = false
)
private static AABB
adjustAncientCityBoundingBox(
AABB aabb, PoolElementStructurePiece alec, JigsawConfiguration conf
) {
if (conf instanceof AdvancedJigsawConfiguration aconf) {
return new AABB(
aabb.minX + 80 - aconf.maxDistanceFromCenter,
aabb.minY + 80 - aconf.maxDistanceFromCenter,
aabb.minZ + 80 - aconf.maxDistanceFromCenter,
aabb.maxX - 80 + aconf.maxDistanceFromCenter,
aabb.maxY - 80 + aconf.maxDistanceFromCenter,
aabb.maxZ - 80 + aconf.maxDistanceFromCenter
);
}
return aabb;
}
}

View file

@ -9,8 +9,7 @@
"client": [
"client.FogRendererMixin",
"client.SheetsMixin",
"common.BeardifierMixin",
"common.JigsawPlacementMixin"
"common.BeardifierMixin"
],
"injectors": {
"defaultRequire": 1

View file

@ -37,6 +37,8 @@ dependencies {
forge "net.minecraftforge:forge:${rootProject.forge_version}"
modApi "com.github.glitchfiend:TerraBlender-forge:${minecraft_version}-${terrablender_version}"
modImplementation("net.anvilcraft:anvillib-18-forge:0.2.0") {transitive = false}
common(project(path: ":common", configuration: "namedElements")) { transitive false }
shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false }
}

View file

@ -1,38 +0,0 @@
package com.cursedcauldron.wildbackport.core.mixin.forge.common;
import com.cursedcauldron.wildbackport.common.worldgen.AdvancedJigsawConfiguration;
import net.minecraft.world.level.levelgen.feature.configurations.JigsawConfiguration;
import net.minecraft.world.level.levelgen.structure.PoolElementStructurePiece;
import net.minecraft.world.level.levelgen.structure.pools.JigsawPlacement;
import net.minecraft.world.phys.AABB;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
// this is an exact duplicate of this mixin for fabric, but with the target changed to
// SRG mappings. you have failed me, refmap.
@Mixin(JigsawPlacement.class)
public class JigsawPlacementMixin {
// for this nonsense to work in the devenv, replace this with method_39824
// for prod, use m_210268_
// very elegant!
@ModifyVariable(
method = "m_210268_", at = @At(value = "STORE", ordinal = 0), remap = false
)
private static AABB
adjustAncientCityBoundingBox(
AABB aabb, PoolElementStructurePiece alec, JigsawConfiguration conf
) {
if (conf instanceof AdvancedJigsawConfiguration aconf) {
return new AABB(
aabb.minX + 80 - aconf.maxDistanceFromCenter,
aabb.minY + 80 - aconf.maxDistanceFromCenter,
aabb.minZ + 80 - aconf.maxDistanceFromCenter,
aabb.maxX - 80 + aconf.maxDistanceFromCenter,
aabb.maxY - 80 + aconf.maxDistanceFromCenter,
aabb.maxZ - 80 + aconf.maxDistanceFromCenter
);
}
return aabb;
}
}

View file

@ -4,8 +4,7 @@
"package": "com.cursedcauldron.wildbackport.core.mixin.forge",
"compatibilityLevel": "JAVA_17",
"mixins": [
"common.BeardifierMixin",
"common.JigsawPlacementMixin"
"common.BeardifierMixin"
],
"client": [],
"injectors": {