com.yungnickyoung.minecraft.yungsapi.mixin.BeardifierMixin Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of YungsApi Show documentation
Show all versions of YungsApi Show documentation
A common API for YUNG's Minecraft mods
package com.yungnickyoung.minecraft.yungsapi.mixin;
import com.yungnickyoung.minecraft.yungsapi.world.structure.terrainadaptation.beardifier.EnhancedBeardifierHelper;
import com.yungnickyoung.minecraft.yungsapi.world.structure.YungJigsawStructure;
import com.yungnickyoung.minecraft.yungsapi.world.structure.terrainadaptation.EnhancedTerrainAdaptation;
import com.yungnickyoung.minecraft.yungsapi.world.structure.terrainadaptation.beardifier.EnhancedBeardifierData;
import com.yungnickyoung.minecraft.yungsapi.world.structure.terrainadaptation.beardifier.EnhancedBeardifierRigid;
import com.yungnickyoung.minecraft.yungsapi.world.structure.terrainadaptation.beardifier.EnhancedJigsawJunction;
import it.unimi.dsi.fastutil.objects.ObjectListIterator;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.StructureManager;
import net.minecraft.world.level.levelgen.Beardifier;
import net.minecraft.world.level.levelgen.DensityFunction;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
/**
* Injects behavior required for using {@link EnhancedTerrainAdaptation} with {@link YungJigsawStructure}.
*/
@Mixin(Beardifier.class)
public class BeardifierMixin implements EnhancedBeardifierData {
@Unique
private ObjectListIterator enhancedJunctionIterator;
@Unique
private ObjectListIterator enhancedPieceIterator;
@Inject(method = "forStructuresInChunk", at = @At("RETURN"), cancellable = true)
private static void yungsapi_supportCustomTerrainAdaptations(StructureManager structureManager, ChunkPos chunkPos, CallbackInfoReturnable cir) {
Beardifier enhancedBeardifier = EnhancedBeardifierHelper.forStructuresInChunk(structureManager, chunkPos, cir.getReturnValue());
cir.setReturnValue(enhancedBeardifier);
}
@Inject(method = "compute", at = @At("RETURN"), cancellable = true)
public void yungsapi_calculateDensity(DensityFunction.FunctionContext ctx, CallbackInfoReturnable cir) {
double density = cir.getReturnValue();
double newDensity = EnhancedBeardifierHelper.computeDensity(ctx, density, this);
cir.setReturnValue(newDensity);
}
@Override
public ObjectListIterator getEnhancedPieceIterator() {
return this.enhancedPieceIterator;
}
@Override
public void setEnhancedPieceIterator(ObjectListIterator enhancedPieceIterator) {
this.enhancedPieceIterator = enhancedPieceIterator;
}
@Override
public ObjectListIterator getEnhancedJunctionIterator() {
return enhancedJunctionIterator;
}
@Override
public void setEnhancedJunctionIterator(ObjectListIterator enhancedJunctionIterator) {
this.enhancedJunctionIterator = enhancedJunctionIterator;
}
}