Skip to content

Commit 4f2ea60

Browse files
committed
2.0.21
1 parent 94c2d0c commit 4f2ea60

9 files changed

Lines changed: 61 additions & 32 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.0.21
2+
3+
- Fixed compatibility with "Towns and Towers"
4+
15
## 2.0.20
26

37
- Ported to 26.1

common/src/main/java/com/faboslav/structurify/common/api/StructurifyChunkGenerator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public interface StructurifyChunkGenerator
88
{
99
Map<Long, StructureSectionClaim> structurify$getStructureSectionClaims();
1010

11+
Map<Long, Boolean> structurify$getStructureChecks();
12+
1113
Map<Long, Boolean> structurify$getFlatnessChecks();
1214

1315
Map<Long, Boolean> structurify$getBiomeChecks();

common/src/main/java/com/faboslav/structurify/common/commands/StructurifyCommand.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,8 +271,6 @@ private static int getStructureList(CommandSourceStack source) {
271271

272272
var structureStarts = level.structureManager().startsForStructure(ChunkPosUtil.createChunkPos(commandPos), structure -> true).stream().filter(structureStart -> structureStart.getBoundingBox().inflatedBy(16).isInside(commandPos)).toList();
273273

274-
Structurify.getLogger().info("Found " + structureStarts.size() + " structures at " + commandPos);
275-
276274
if (structureStarts.isEmpty()) {
277275
source.sendSuccess(() -> Component.literal("There is no structures at ").append(getClickablePos(commandPos)).append(Component.literal(".")), !source.isPlayer());
278276
return 1;

common/src/main/java/com/faboslav/structurify/common/config/data/WorldgenDataProvider.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,21 @@ public static Map<String, StructureData> loadStructures() {
244244
}
245245
}
246246

247+
// Towns and Towers uses "fluid_springs" step for its structures
248+
if(structureId.contains("towns_and_towers")) {
249+
var flatnessCheckData = structureData.getFlatnessCheckData();
250+
flatnessCheckData.defaultOverrideGlobalFlatnessCheck(false);
251+
flatnessCheckData.overrideGlobalFlatnessCheck(false);
252+
flatnessCheckData.defaultEnable(false);
253+
flatnessCheckData.enable(false);
254+
255+
var biomeCheckData = structureData.getBiomeCheckData();
256+
biomeCheckData.defaultOverrideGlobalBiomeCheck(false);
257+
biomeCheckData.overrideGlobalBiomeCheck(false);
258+
biomeCheckData.defaultEnable(false);
259+
biomeCheckData.enable(false);
260+
}
261+
247262
if(structureId.contains("aquamirae:") || (structureId.contains("minecells:") && !structureId.contains("minecells:overworld_portal"))) {
248263
var overlapCheckData = structureData.getOverlapCheckData();
249264
overlapCheckData.defaultExcludeFromOverlapPrevention(true);

common/src/main/java/com/faboslav/structurify/common/mixin/ChunkGeneratorMixin.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ public final class ChunkGeneratorMixin implements StructurifyChunkGenerator
3535
@Unique
3636
private final Map<Long, StructureSectionClaim> structurify$structureSectionClaims = new ConcurrentHashMap<>();
3737

38+
@Unique
39+
private final Map<Long, Boolean> structurify$structureChecks = new ConcurrentHashMap<>();
40+
3841
@Unique
3942
private final Map<Long, Boolean> structurify$flatnessChecks = new ConcurrentHashMap<>();
4043

@@ -49,6 +52,11 @@ public final class ChunkGeneratorMixin implements StructurifyChunkGenerator
4952
return this.structurify$structureSectionClaims;
5053
}
5154

55+
@Unique
56+
public Map<Long, Boolean> structurify$getStructureChecks() {
57+
return this.structurify$structureChecks;
58+
}
59+
5260
@Unique
5361
public Map<Long, Boolean> structurify$getFlatnessChecks() {
5462
return this.structurify$flatnessChecks;

common/src/main/java/com/faboslav/structurify/common/world/level/structure/checks/StructureChecker.java

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.faboslav.structurify.common.config.data.structure.FlatnessCheckData;
77
import com.faboslav.structurify.common.config.data.structure.OverlapCheckData;
88
import com.faboslav.structurify.common.util.ChunkPosUtil;
9-
import net.minecraft.core.BlockPos;
109
import net.minecraft.resources.Identifier;
1110
import net.minecraft.world.level.ChunkPos;
1211
import net.minecraft.world.level.LevelHeightAccessor;
@@ -40,29 +39,32 @@ public static boolean checkStructure(
4039
return true;
4140
}
4241

43-
BlockPos structureCenter = structureStart.getBoundingBox().getCenter();
44-
long structureCheckId = generateStructureCheckId(structureId, structureCenter);
45-
StructureCheckData structureCheckData = new StructureCheckData(structureCheckId, structureId, structure, structureStart);
42+
long structureCheckId = generateStructureCheckId(structureId, structureStart.getChunkPos());
4643
StructurifyChunkGenerator structurifyChunkGenerator = (StructurifyChunkGenerator) chunkGenerator;
4744

48-
boolean biomeCheckResult = structurifyChunkGenerator.structurify$getBiomeChecks().computeIfAbsent(structureCheckId, id -> checkBiomes(structureCheckData, biomeSource, randomState));
45+
@Nullable Identifier finalStructureId = structureId;
46+
return structurifyChunkGenerator.structurify$getStructureChecks().computeIfAbsent(structureCheckId, id -> {
47+
StructureCheckData structureCheckData = new StructureCheckData(structureCheckId, finalStructureId, structure, structureStart);
4948

50-
if (!biomeCheckResult) {
51-
return false;
52-
}
53-
boolean flatnessCheckResult = structurifyChunkGenerator.structurify$getFlatnessChecks().computeIfAbsent(structureCheckId, id -> checkFlatness(structureCheckData, chunkGenerator, heightAccessor, randomState));
49+
boolean biomeCheckResult = structurifyChunkGenerator.structurify$getBiomeChecks().computeIfAbsent(structureCheckId, id2 -> checkBiomes(structureCheckData, biomeSource, randomState));
5450

55-
if (!flatnessCheckResult) {
56-
return false;
57-
}
51+
if (!biomeCheckResult) {
52+
return false;
53+
}
5854

59-
boolean overlapCheckResult = structurifyChunkGenerator.structurify$getOverlapChecks().computeIfAbsent(structureCheckId, id -> checkOverlap(structureCheckData, structurifyChunkGenerator));
55+
boolean flatnessCheckResult = structurifyChunkGenerator.structurify$getFlatnessChecks().computeIfAbsent(structureCheckId, id2 -> checkFlatness(structureCheckData, chunkGenerator, heightAccessor, randomState));
56+
if (!flatnessCheckResult) {
57+
return false;
58+
}
6059

61-
if (!overlapCheckResult) {
62-
return false;
63-
}
60+
boolean overlapCheckResult = structurifyChunkGenerator.structurify$getOverlapChecks().computeIfAbsent(structureCheckId, id2 -> checkOverlap(structureCheckData, structurifyChunkGenerator));
6461

65-
return true;
62+
if (!overlapCheckResult) {
63+
return false;
64+
}
65+
66+
return true;
67+
});
6668
}
6769

6870
public static void debugCheckStructure(
@@ -78,8 +80,12 @@ public static void debugCheckStructure(
7880
}
7981

8082
Identifier structureId = structure.structurify$getStructureIdentifier();
81-
BlockPos structureCenter = structureStart.getBoundingBox().getCenter();
82-
long structureCheckId = generateStructureCheckId(structureId, structureCenter);
83+
84+
if(structureId == null) {
85+
return;
86+
}
87+
88+
long structureCheckId = generateStructureCheckId(structureId, structureStart.getChunkPos());
8389
StructureCheckData structureCheckData = new StructureCheckData(structureCheckId, structureId, structure, structureStart);
8490

8591
checkBiomes(structureCheckData, biomeSource, randomState);
@@ -164,14 +170,10 @@ private static boolean checkOverlap(
164170
return true;
165171
}
166172

167-
public static long generateStructureCheckId(Identifier structureId, BlockPos structureCenter) {
168-
long structHash = structureId.hashCode();
169-
structHash ^= (structHash >>> 33);
170-
structHash *= 0xff51afd7ed558ccdL;
171-
structHash ^= (structHash >>> 33);
172-
structHash *= 0xc4ceb9fe1a85ec53L;
173-
structHash ^= (structHash >>> 33);
173+
public static long generateStructureCheckId(Identifier structureId, ChunkPos chunkPos) {
174+
long structureHash = structureId.hashCode() & 0xffffffffL;
175+
long chunkHash = ChunkPosUtil.getChunkPosAsLong(chunkPos);
174176

175-
return Long.rotateLeft(structHash, 23) ^ Long.rotateLeft(ChunkPosUtil.getChunkPosAsLong(ChunkPosUtil.createChunkPos(structureCenter.getX(), structureCenter.getZ())), 11);
177+
return (structureHash << 32) ^ chunkHash;
176178
}
177179
}

common/src/main/java/com/faboslav/structurify/common/world/level/structure/checks/StructureFlatnessCheck.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public static boolean canDoFlatnessCheck(
6666

6767
var structureData = structure.structurify$getStructureData();
6868

69-
if(structureData == null) {
69+
if (structureData == null) {
7070
return false;
7171
}
7272

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ java.version=
1111
mod.name=Structurify
1212
mod.id=structurify
1313
mod.group=com.faboslav.structurify
14-
mod.version=2.0.20
14+
mod.version=2.0.21
1515
mod.author=Faboslav
1616
mod.description=Configuration mod that makes configuring everything related to structures very easy and accessible, eliminating the hassle of creating multiple datapacks.
1717
mod.license=CC-BY-NC-ND-4.0

settings.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ pluginManagement {
1212

1313
plugins {
1414
id("dev.kikugie.stonecutter") version providers.gradleProperty("stonecutter_version").get()
15-
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
15+
id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
1616
}
1717

1818
val commonVersions = providers.gradleProperty("stonecutter_enabled_common_versions").orNull?.split(",")?.map { it.trim() } ?: emptyList()

0 commit comments

Comments
 (0)