Skip to content

Commit 2436aa2

Browse files
committed
fix(town): HouseBuilding CODEC 序列化 residentsUUID,修复存档重载后房屋容量失忆
- 参考 MineBaseBuilding/HuntingBaseBuilding 的 residentsID 写法,CODEC 加 optionalFieldOf("residentsUUID", List.of()) 默认空集兼容旧档 - 全量构造器加 List<UUID> residentsUUID 参数(residentsUUID 为 final 字段, 用 addAll 填充);9 参便捷构造器委托补 List.of() - 修复症状:重载存档/房屋方块重建后 residentsUUID 恒空 → allocateHouse 容量判断(以 residentsUUID.size() 为准)把满员房当空房 → 招募可无限超额(实测 6/3)
1 parent 1afa74b commit 2436aa2

1 file changed

Lines changed: 5 additions & 1 deletion

File tree

src/main/java/com/teammoeg/frostedheart/content/town/buildings/house/HouseBuilding.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import com.teammoeg.frostedheart.content.town.resource.action.*;
3939
import com.teammoeg.frostedheart.infrastructure.config.FHConfig;
4040
import net.minecraft.core.BlockPos;
41+
import net.minecraft.core.UUIDUtil;
4142

4243
import lombok.Getter;
4344

@@ -95,6 +96,7 @@ public record DailyReport(
9596
Codec.DOUBLE.optionalFieldOf("temperature",0D).forGetter(o -> o.getTemperature()),
9697
Codec.DOUBLE.optionalFieldOf("decorationRating",0D).forGetter(o -> o.getDecorationRating()),
9798
Codec.INT.optionalFieldOf("maxResident",0).forGetter(o -> o.getMaxResidents()),
99+
Codec.list(UUIDUtil.CODEC).optionalFieldOf("residentsUUID",List.of()).forGetter(o -> new ArrayList<>(o.residentsUUID)),
98100
Codec.DOUBLE.optionalFieldOf("temperatureModifier",0D).forGetter(o -> o.getTemperatureModifier()),
99101
DailyReport.CODEC.optionalFieldOf("dailyReport", DailyReport.EMPTY).forGetter(o -> o.getDailyReport()))
100102
.apply(t, HouseBuilding::new));
@@ -147,7 +149,7 @@ public HouseBuilding(BlockPos pos) {
147149

148150
public HouseBuilding(BlockPos pos, boolean isStructureValid, OccupiedVolume occupiedVolume, int area, int volume, double temperature, double decorationRating, int maxResidents, double temperatureModifier) {
149151
this(pos, isStructureValid, occupiedVolume, false, false, area, volume, temperature,
150-
decorationRating, maxResidents, temperatureModifier, DailyReport.EMPTY);
152+
decorationRating, maxResidents, List.of(), temperatureModifier, DailyReport.EMPTY);
151153
}
152154

153155
public HouseBuilding(
@@ -161,6 +163,7 @@ public HouseBuilding(
161163
double temperature,
162164
double decorationRating,
163165
int maxResidents,
166+
List<UUID> residentsUUID,
164167
double temperatureModifier,
165168
DailyReport dailyReport
166169
) {
@@ -174,6 +177,7 @@ public HouseBuilding(
174177
this.setTemperature(temperature);
175178
this.setDecorationRating(decorationRating);
176179
this.setMaxResidents(maxResidents);
180+
this.residentsUUID.addAll(residentsUUID);
177181
this.setTemperatureModifier(temperatureModifier);
178182
this.dailyReport = dailyReport == null ? DailyReport.EMPTY : dailyReport;
179183
}

0 commit comments

Comments
 (0)