mirror of
https://gitlab.com/cable-mc/cobblemon.git
synced 2026-11-01 13:58:54 -05:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
58cdf2e756 |
No files matched your search
@@ -20,6 +20,8 @@ import net.minecraft.world.level.levelgen.structure.pools.alias.PoolAliasLookup;
|
|||||||
import net.minecraft.world.level.levelgen.structure.templatesystem.LiquidSettings;
|
import net.minecraft.world.level.levelgen.structure.templatesystem.LiquidSettings;
|
||||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessor;
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessor;
|
||||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorList;
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorList;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
@@ -31,6 +33,9 @@ import java.util.Optional;
|
|||||||
@Mixin(JigsawPlacement.class)
|
@Mixin(JigsawPlacement.class)
|
||||||
public class JigsawPlacementMixin {
|
public class JigsawPlacementMixin {
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
private static final Logger cobblemon$LOGGER = LoggerFactory.getLogger("Cobblemon/HeightRangeVeto");
|
||||||
|
|
||||||
@Inject(
|
@Inject(
|
||||||
method = "addPieces(Lnet/minecraft/world/level/levelgen/structure/Structure$GenerationContext;Lnet/minecraft/core/Holder;Ljava/util/Optional;ILnet/minecraft/core/BlockPos;ZLjava/util/Optional;ILnet/minecraft/world/level/levelgen/structure/pools/alias/PoolAliasLookup;Lnet/minecraft/world/level/levelgen/structure/pools/DimensionPadding;Lnet/minecraft/world/level/levelgen/structure/templatesystem/LiquidSettings;)Ljava/util/Optional;",
|
method = "addPieces(Lnet/minecraft/world/level/levelgen/structure/Structure$GenerationContext;Lnet/minecraft/core/Holder;Ljava/util/Optional;ILnet/minecraft/core/BlockPos;ZLjava/util/Optional;ILnet/minecraft/world/level/levelgen/structure/pools/alias/PoolAliasLookup;Lnet/minecraft/world/level/levelgen/structure/pools/DimensionPadding;Lnet/minecraft/world/level/levelgen/structure/templatesystem/LiquidSettings;)Ljava/util/Optional;",
|
||||||
at = @At("RETURN"),
|
at = @At("RETURN"),
|
||||||
@@ -54,18 +59,30 @@ public class JigsawPlacementMixin {
|
|||||||
if (result.isEmpty()) {
|
if (result.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BlockPos spawnPos = result.get().position();
|
BlockPos spawnPos = result.get().position();
|
||||||
boolean canPlace = cobblemon$canAnyStartElementPlace(context, startPool, spawnPos);
|
String poolId = startPool.unwrapKey().map(key -> key.location().toString()).orElse("unknown");
|
||||||
|
boolean canPlace = cobblemon$canStructurePlace(context, startPool, spawnPos);
|
||||||
|
|
||||||
|
cobblemon$LOGGER.info(
|
||||||
|
"[HeightRangeVeto] addPieces evaluated requestedPos={} spawnPos={} startPool={} -> canPlace={}",
|
||||||
|
pos, spawnPos, poolId, canPlace
|
||||||
|
);
|
||||||
|
|
||||||
if (canPlace) {
|
if (canPlace) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cobblemon$LOGGER.info(
|
||||||
|
"[HeightRangeVeto] Vetoing structure start at {} (startPool={})",
|
||||||
|
spawnPos, poolId
|
||||||
|
);
|
||||||
|
|
||||||
cir.setReturnValue(Optional.empty());
|
cir.setReturnValue(Optional.empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Unique
|
@Unique
|
||||||
private static boolean cobblemon$canAnyStartElementPlace(
|
private static boolean cobblemon$canStructurePlace(
|
||||||
Structure.GenerationContext generationContext,
|
Structure.GenerationContext generationContext,
|
||||||
Holder<StructureTemplatePool> startPool,
|
Holder<StructureTemplatePool> startPool,
|
||||||
BlockPos startPos
|
BlockPos startPos
|
||||||
@@ -74,7 +91,7 @@ public class JigsawPlacementMixin {
|
|||||||
Optional<HeightRangeStructureProcessor> heightRangeProcessor = cobblemon$getHeightRangeProcessor(element);
|
Optional<HeightRangeStructureProcessor> heightRangeProcessor = cobblemon$getHeightRangeProcessor(element);
|
||||||
|
|
||||||
if (heightRangeProcessor.isEmpty()) {
|
if (heightRangeProcessor.isEmpty()) {
|
||||||
return true;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
HeightRangeStructureProcessor processor = heightRangeProcessor.get();
|
HeightRangeStructureProcessor processor = heightRangeProcessor.get();
|
||||||
@@ -85,12 +102,17 @@ public class JigsawPlacementMixin {
|
|||||||
startPos
|
startPos
|
||||||
);
|
);
|
||||||
|
|
||||||
if (valid) {
|
cobblemon$LOGGER.info(
|
||||||
return true;
|
"[HeightRangeVeto] template={} pos={} valid={}",
|
||||||
|
element, startPos, valid
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!valid) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Unique
|
@Unique
|
||||||
|
|||||||
+11
-1
@@ -20,6 +20,7 @@ import net.minecraft.world.level.levelgen.RandomState
|
|||||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings
|
||||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessor
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessor
|
||||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate
|
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
|
||||||
class HeightRangeStructureProcessor(
|
class HeightRangeStructureProcessor(
|
||||||
val minOffset: Int,
|
val minOffset: Int,
|
||||||
@@ -43,7 +44,14 @@ class HeightRangeStructureProcessor(
|
|||||||
val referenceY = reference.getY(chunkGenerator, heightAccessor, randomState, pos)
|
val referenceY = reference.getY(chunkGenerator, heightAccessor, randomState, pos)
|
||||||
val minY = referenceY + minOffset
|
val minY = referenceY + minOffset
|
||||||
val maxY = referenceY + maxOffset
|
val maxY = referenceY + maxOffset
|
||||||
return pos.y in minY..maxY
|
val valid = pos.y in minY..maxY
|
||||||
|
|
||||||
|
LOGGER.info(
|
||||||
|
"[HeightRangeVeto] isValidPlacement pos={} reference={} referenceY={} minY={} maxY={} pos.y={} -> valid={}",
|
||||||
|
pos, reference, referenceY, minY, maxY, pos.y, valid
|
||||||
|
)
|
||||||
|
|
||||||
|
return valid
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun processBlock(
|
override fun processBlock(
|
||||||
@@ -105,6 +113,8 @@ class HeightRangeStructureProcessor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
private val LOGGER = LoggerFactory.getLogger("Cobblemon/HeightRangeStructureProcessor")
|
||||||
|
|
||||||
val CODEC: MapCodec<HeightRangeStructureProcessor> = RecordCodecBuilder.mapCodec { instance ->
|
val CODEC: MapCodec<HeightRangeStructureProcessor> = RecordCodecBuilder.mapCodec { instance ->
|
||||||
instance.group(
|
instance.group(
|
||||||
Codec.INT.fieldOf("min_offset").forGetter { it.minOffset },
|
Codec.INT.fieldOf("min_offset").forGetter { it.minOffset },
|
||||||
|
|||||||
Reference in new issue
Block a user