Skip to content

Commit

Permalink
Merge branch 'AlexModGuy:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
Orekuram authored Sep 9, 2024
2 parents 4dff0db + c2bace3 commit dff6c20
Show file tree
Hide file tree
Showing 133 changed files with 4,593 additions and 705 deletions.
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ apply plugin: 'maven-publish'
apply plugin: 'org.spongepowered.mixin'


version = '1.1.4'
version = '1.1.5'
group = 'com.github.alexthe668' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'alexscaves'

Expand Down Expand Up @@ -111,7 +111,7 @@ sourceSets.main.resources { srcDir 'src/generated/resources' }
dependencies {
minecraft 'net.minecraftforge:forge:1.20.1-47.2.20'
annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'
implementation fg.deobf("curse.maven:citadel-331936:5143956")
implementation fg.deobf("curse.maven:citadel-331936:5633260")
compileOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-common-api:${jei_version}"))
compileOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-forge-api:${jei_version}"))
runtimeOnly(fg.deobf("mezz.jei:jei-${jei_mc_version}-forge:${jei_version}"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ private void commonSetup(final FMLCommonSetupEvent event) {
});
readModIncompatibilities();
}

private void clientSetup(final FMLClientSetupEvent event) {
event.enqueueWork(() -> PROXY.clientInit());
}
Expand Down Expand Up @@ -203,8 +204,9 @@ private void readModIncompatibilities() {
} catch (IOException e) {
LOGGER.warn("Failed to load mod conflicts");
}
} else{
} else {
LOGGER.warn("Failed to load mod conflicts");
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.core.particles.SimpleParticleType;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.Entity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,11 @@
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRenderDispatcher;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import com.mojang.math.Axis;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.AbstractClientPlayer;
import net.minecraft.client.renderer.ItemInHandRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
import net.minecraft.util.Mth;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import net.minecraft.tags.BiomeTags;
import net.minecraft.util.FastColor;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.Biomes;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.github.alexmodguy.alexscaves.mixin;

import com.github.alexmodguy.alexscaves.server.level.biome.BiomeSourceAccessor;
import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableSet;
import net.minecraft.core.Holder;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.BiomeSource;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.Supplier;

@Mixin(BiomeSource.class)
public class BiomeSourceMixin implements BiomeSourceAccessor {

@Shadow
public Supplier<Set<Holder<Biome>>> possibleBiomes;
private boolean expanded;
private Map<ResourceKey<Biome>, Holder<Biome>> map = new HashMap<>();

@Override
public void setResourceKeyMap(Map<ResourceKey<Biome>, Holder<Biome>> map) {
this.map = map;
}

@Override
public Map<ResourceKey<Biome>, Holder<Biome>> getResourceKeyMap() {
return map;
}

@Override
public void expandBiomesWith(Set<Holder<Biome>> newGenBiomes) {
if(!expanded){
ImmutableSet.Builder<Holder<Biome>> builder = ImmutableSet.builder();
builder.addAll(this.possibleBiomes.get());
builder.addAll(newGenBiomes);
possibleBiomes = Suppliers.memoize(builder::build);
expanded = true;
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.github.alexmodguy.alexscaves.mixin;

import com.github.alexmodguy.alexscaves.server.level.biome.MultiNoiseBiomeSourceAccessor;
import com.mojang.datafixers.util.Either;
import net.minecraft.server.level.ChunkHolder;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ThreadedLevelLightEngine;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.chunk.ChunkStatus;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.function.Function;

@Mixin(ChunkStatus.class)
public class ChunkStatusMixin {

@Inject(at = @At("HEAD"),
method = "Lnet/minecraft/world/level/chunk/ChunkStatus;generate(Ljava/util/concurrent/Executor;Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/ChunkGenerator;Lnet/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplateManager;Lnet/minecraft/server/level/ThreadedLevelLightEngine;Ljava/util/function/Function;Ljava/util/List;)Ljava/util/concurrent/CompletableFuture;")
private void citadel_fillFromNoise(Executor p_283276_, ServerLevel serverLevel, ChunkGenerator chunkGenerator, StructureTemplateManager p_281305_, ThreadedLevelLightEngine p_282570_, Function<ChunkAccess, CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>>> p_283114_, List<ChunkAccess> p_282723_, CallbackInfoReturnable<CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>>> cir) {
if(chunkGenerator.getBiomeSource() instanceof MultiNoiseBiomeSourceAccessor multiNoiseBiomeSourceAccessor){
multiNoiseBiomeSourceAccessor.setLastSampledSeed(serverLevel.getSeed());
multiNoiseBiomeSourceAccessor.setLastSampledDimension(serverLevel.dimension());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import java.util.Optional;

@Mixin(MapDecoration.class)
public abstract class MapDecorationMixin {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.github.alexmodguy.alexscaves.mixin;

import com.github.alexmodguy.alexscaves.server.config.BiomeGenerationConfig;
import com.github.alexmodguy.alexscaves.server.config.BiomeGenerationNoiseCondition;
import com.github.alexmodguy.alexscaves.server.level.biome.ACBiomeRarity;
import com.github.alexmodguy.alexscaves.server.level.biome.BiomeSourceAccessor;
import com.github.alexmodguy.alexscaves.server.level.biome.MultiNoiseBiomeSourceAccessor;
import com.github.alexmodguy.alexscaves.server.misc.VoronoiGenerator;
import net.minecraft.core.Holder;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.Climate;
import net.minecraft.world.level.biome.MultiNoiseBiomeSource;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import java.util.Map;

@Mixin(value = MultiNoiseBiomeSource.class, priority = -69420)
public class MultiNoiseBiomeSourceMixin implements MultiNoiseBiomeSourceAccessor {

private long lastSampledWorldSeed;

private ResourceKey<Level> lastSampledDimension;

@Inject(at = @At("HEAD"),
method = "Lnet/minecraft/world/level/biome/MultiNoiseBiomeSource;getNoiseBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;)Lnet/minecraft/core/Holder;",
cancellable = true
)
private void citadel_getNoiseBiomeCoords(int x, int y, int z, Climate.Sampler sampler, CallbackInfoReturnable<Holder<Biome>> cir) {
VoronoiGenerator.VoronoiInfo voronoiInfo = ACBiomeRarity.getRareBiomeInfoForQuad(lastSampledWorldSeed, x, z);
if(voronoiInfo != null){
float unquantizedDepth = Climate.unquantizeCoord(sampler.sample(x, y, z).depth());
int foundRarityOffset = ACBiomeRarity.getRareBiomeOffsetId(voronoiInfo);
for (Map.Entry<ResourceKey<Biome>, BiomeGenerationNoiseCondition> condition : BiomeGenerationConfig.BIOMES.entrySet()) {
if (foundRarityOffset == condition.getValue().getRarityOffset() && condition.getValue().test(x, y, z, unquantizedDepth, sampler, lastSampledDimension, voronoiInfo)) {
cir.setReturnValue(((BiomeSourceAccessor)this).getResourceKeyMap().get(condition.getKey()));
}
}
}
}

@Override
public void setLastSampledSeed(long seed) {
lastSampledWorldSeed = seed;
}

@Override
public void setLastSampledDimension(ResourceKey<Level> dimension) {
lastSampledDimension = dimension;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.github.alexmodguy.alexscaves.AlexsCaves;
import com.github.alexmodguy.alexscaves.client.ClientProxy;
import com.github.alexmodguy.alexscaves.server.block.EnergizedGalenaBlock;
import com.github.alexmodguy.alexscaves.server.level.biome.ACBiomeRegistry;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
import net.minecraft.world.level.material.MapColor;
import net.minecraft.world.level.pathfinder.BlockPathTypes;
import net.minecraft.world.level.pathfinder.PathComputationType;
import net.minecraft.world.level.pathfinder.WalkNodeEvaluator;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.EntityCollisionContext;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import net.minecraft.world.level.ServerLevelAccessor;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.MobSpawnSettings;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class ACServerConfig {
public final ForgeConfigSpec.DoubleValue caveCreatureSpawnCountModifier;
public final ForgeConfigSpec.IntValue pathfindingThreads;
public final ForgeConfigSpec.IntValue nucleeperFuseTime;
public final ForgeConfigSpec.DoubleValue luxtructosaurusBlockDropChance;
public final ForgeConfigSpec.IntValue atlatitanMaxExplosionResistance;
public final ForgeConfigSpec.BooleanValue devastatingTremorzillaBeam;
public final ForgeConfigSpec.BooleanValue watcherPossession;
Expand Down Expand Up @@ -52,6 +53,7 @@ public ACServerConfig(final ForgeConfigSpec.Builder builder) {
builder.pop();
builder.push("mob-behavior");
pathfindingThreads = builder.comment("How many cpu cores big mobs(tremorzilla, atlatitan, grottoceratops etc) should utilize when pathing. Bigger number = less impact on TPS").translation("pathfinding_threads").defineInRange("pathfinding_threads", 5, 1, 100);
luxtructosaurusBlockDropChance = builder.comment("Chance that blocks destroyed by luxtructosaurus attacks drop themselves, if mob griefing is enabled.").translation("luxtructosaurus_block_drop_chance").defineInRange("luxtructosaurus_block_drop_chance", 0.75D, 0, 1D);
atlatitanMaxExplosionResistance = builder.comment("The maximum explosion resistance that a block can have to be destroyed by an atlatitan stomp. Set to zero to disable all atlatitan block breaking.").translation("atlatitan_max_block_explosion_resistance").defineInRange("atlatitan_max_block_explosion_resistance", 10, 0, Integer.MAX_VALUE);
nucleeperFuseTime = builder.comment("How long (in game ticks) it takes for a nucleeper to explode.").translation("nucleeper_fuse_time").defineInRange("nucleeper_fuse_time", 300, 20, Integer.MAX_VALUE);
devastatingTremorzillaBeam = builder.comment("True if the Tremorzilla beam breaks even more blocks.").translation("devastating_tremorzilla_beam").define("devastating_tremorzilla_beam", true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,22 +39,23 @@ public class BiomeGenerationConfig {
.dimensions(OVERWORLD).distanceFromSpawn(400).alexscavesRarityOffset(3).continentalness(-0.95F, -0.65F).temperature(-1.0F, 0.5F).depth(0.2F, 1.5F).build();
private static final BiomeGenerationNoiseCondition FORLORN_HOLLOWS_CONDITION = new BiomeGenerationNoiseCondition.Builder()
.dimensions(OVERWORLD).distanceFromSpawn(650).alexscavesRarityOffset(4).continentalness(0.6F, 1F).depth(0.3F, 1.5F).build();
private static LinkedHashMap<ResourceKey<Biome>, BiomeGenerationNoiseCondition> biomes = new LinkedHashMap<>();
public static final LinkedHashMap<ResourceKey<Biome>, BiomeGenerationNoiseCondition> BIOMES = new LinkedHashMap<>();

public static void reloadConfig() {
biomes.put(ACBiomeRegistry.MAGNETIC_CAVES, getConfigData("magnetic_caves", MAGNETIC_CAVES_CONDITION));
biomes.put(ACBiomeRegistry.PRIMORDIAL_CAVES, getConfigData("primordial_caves", PRIMORDIAL_CAVES_CONDITION));
biomes.put(ACBiomeRegistry.TOXIC_CAVES, getConfigData("toxic_caves", TOXIC_CAVES_CONDITION));
biomes.put(ACBiomeRegistry.ABYSSAL_CHASM, getConfigData("abyssal_chasm", ABYSSAL_CHASM_CONDITION));
biomes.put(ACBiomeRegistry.FORLORN_HOLLOWS, getConfigData("forlorn_hollows", FORLORN_HOLLOWS_CONDITION));
BIOMES.put(ACBiomeRegistry.MAGNETIC_CAVES, getConfigData("magnetic_caves", MAGNETIC_CAVES_CONDITION));
BIOMES.put(ACBiomeRegistry.PRIMORDIAL_CAVES, getConfigData("primordial_caves", PRIMORDIAL_CAVES_CONDITION));
BIOMES.put(ACBiomeRegistry.TOXIC_CAVES, getConfigData("toxic_caves", TOXIC_CAVES_CONDITION));
BIOMES.put(ACBiomeRegistry.ABYSSAL_CHASM, getConfigData("abyssal_chasm", ABYSSAL_CHASM_CONDITION));
BIOMES.put(ACBiomeRegistry.FORLORN_HOLLOWS, getConfigData("forlorn_hollows", FORLORN_HOLLOWS_CONDITION));
}

@Nullable
@Deprecated(forRemoval = true, since="1.21")
public static ResourceKey<Biome> getBiomeForEvent(EventReplaceBiome event) {
VoronoiGenerator.VoronoiInfo voronoiInfo = ACBiomeRarity.getRareBiomeInfoForQuad(event.getWorldSeed(), event.getX(), event.getZ());
if(voronoiInfo != null){
int foundRarityOffset = ACBiomeRarity.getRareBiomeOffsetId(voronoiInfo);
for (Map.Entry<ResourceKey<Biome>, BiomeGenerationNoiseCondition> condition : biomes.entrySet()) {
for (Map.Entry<ResourceKey<Biome>, BiomeGenerationNoiseCondition> condition : BIOMES.entrySet()) {
if (foundRarityOffset == condition.getValue().getRarityOffset() && condition.getValue().test(event, voronoiInfo)) {
return condition.getKey();
}
Expand All @@ -64,11 +65,11 @@ public static ResourceKey<Biome> getBiomeForEvent(EventReplaceBiome event) {
}

public static int getBiomeCount() {
return biomes.size();
return BIOMES.size();
}

public static boolean isBiomeDisabledCompletely(ResourceKey<Biome> biome){
BiomeGenerationNoiseCondition noiseCondition = biomes.get(biome);
BiomeGenerationNoiseCondition noiseCondition = BIOMES.get(biome);
return noiseCondition != null && noiseCondition.isDisabledCompletely();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.github.alexmodguy.alexscaves.server.misc.VoronoiGenerator;
import com.github.alexthe666.citadel.server.event.EventReplaceBiome;
import net.minecraft.core.QuartPos;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.Climate;
import net.minecraft.world.phys.Vec3;

Expand Down Expand Up @@ -35,6 +37,7 @@ private BiomeGenerationNoiseCondition(boolean disabledCompletely, int distanceFr
this.dimensions = List.of(dimensions);
}

@Deprecated(forRemoval = true, since="1.21")
public boolean test(EventReplaceBiome event, VoronoiGenerator.VoronoiInfo info) {
if (disabledCompletely) {
return false;
Expand Down Expand Up @@ -78,12 +81,63 @@ public boolean test(EventReplaceBiome event, VoronoiGenerator.VoronoiInfo info)
return true;
}

@Deprecated(forRemoval = true, since="1.21")
private static boolean isFarEnoughFromSpawn(EventReplaceBiome event, double dist) {
int x = QuartPos.fromSection(event.getX());
int z = QuartPos.toBlock(event.getZ());
return x * x + z * z >= dist * dist;
}

public boolean test(int x, int y, int z, float unquantizedDepth, Climate.Sampler climateSampler, ResourceKey<Level> dimension, VoronoiGenerator.VoronoiInfo info) {
if (disabledCompletely) {
return false;
}
if (!isFarEnoughFromSpawn(x, z, distanceFromSpawn)) {
return false;
}
Vec3 rareBiomeCenter = ACBiomeRarity.getRareBiomeCenter(info);
if (rareBiomeCenter == null) {
return false;
}
Climate.TargetPoint centerTargetPoint = climateSampler.sample((int)Math.floor(rareBiomeCenter.x), y, (int)Math.floor(rareBiomeCenter.z));
float f = Climate.unquantizeCoord(centerTargetPoint.continentalness());
float f1 = Climate.unquantizeCoord(centerTargetPoint.erosion());
float f2 = Climate.unquantizeCoord(centerTargetPoint.temperature());
float f3 = Climate.unquantizeCoord(centerTargetPoint.humidity());
float f4 = Climate.unquantizeCoord(centerTargetPoint.weirdness());
//for these values, sample the center of the possible biome instead of every quad
if (continentalness != null && continentalness.length >= 2 && (f < continentalness[0] || f > continentalness[1])) {
return false;
}
if (erosion != null && erosion.length >= 2 && (f1 < erosion[0] || f1 > erosion[1])) {
return false;
}
if (humidity != null && humidity.length >= 2 && (f2 < humidity[0] || f2 > humidity[1])) {
return false;
}
if (temperature != null && temperature.length >= 2 && (f3 < temperature[0] || f3 > temperature[1])) {
return false;
}
if (weirdness != null && weirdness.length >= 2 && (f4 < weirdness[0] || f4 > weirdness[1])) {
return false;
}
// sample depth per coord - we don't want biomes bleeding onto the surface
if (depth != null && depth.length >= 2 && (unquantizedDepth < depth[0] || unquantizedDepth > depth[1])) {
return false;
}
if(dimension != null && !dimensions.contains(dimension.location().toString())){
return false;
}
return true;
}

private static boolean isFarEnoughFromSpawn(int xIn, int zIn, double dist) {
int x = QuartPos.fromSection(xIn);
int z = QuartPos.toBlock(zIn);
return x * x + z * z >= dist * dist;
}


public boolean isDisabledCompletely() {
return disabledCompletely;
}
Expand Down
Loading

0 comments on commit dff6c20

Please sign in to comment.