SpawnerDataFix.java
net.minecraft.util.datafix.fixes.SpawnerDataFix
信息
- 全限定名:net.minecraft.util.datafix.fixes.SpawnerDataFix
- 类型:public class
- 包:net.minecraft.util.datafix.fixes
- 源码路径:src/main/java/net/minecraft/util/datafix/fixes/SpawnerDataFix.java
- 起始行号:L14
- 继承:DataFix
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
- 无
构造器
public SpawnerDataFix(Schema outputSchema) @ L15
- 构造器名:SpawnerDataFix
- 源码定位:L15
- 修饰符:public
参数:
- outputSchema: Schema
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected TypeRewriteRule makeRule() @ L19
- 方法名:makeRule
- 源码定位:L19
- 返回类型:TypeRewriteRule
- 修饰符:protected
参数:
- 无
说明:
TODO
private <T> Typed<T> wrapEntityToSpawnData(Type<T> newType, Typed<?> spawnData) @ L40
- 方法名:wrapEntityToSpawnData
- 源码定位:L40
- 返回类型:
Typed - 修饰符:private
参数:
- newType: Type
- spawnData: Typed<?>
说明:
TODO
private <T> Typed<T> wrapSpawnPotentialsToWeightedEntries(Type<T> newType, Typed<?> spawnPotentials) @ L45
- 方法名:wrapSpawnPotentialsToWeightedEntries
- 源码定位:L45
- 返回类型:
Typed - 修饰符:private
参数:
- newType: Type
- spawnPotentials: Typed<?>
说明:
TODO
代码
public class SpawnerDataFix extends DataFix {
public SpawnerDataFix(Schema outputSchema) {
super(outputSchema, true);
}
@Override
protected TypeRewriteRule makeRule() {
Type<?> oldType = this.getInputSchema().getType(References.UNTAGGED_SPAWNER);
Type<?> newType = this.getOutputSchema().getType(References.UNTAGGED_SPAWNER);
OpticFinder<?> spawnDataFinder = oldType.findField("SpawnData");
Type<?> newSpawnDataType = newType.findField("SpawnData").type();
OpticFinder<?> spawnPotentialsFinder = oldType.findField("SpawnPotentials");
Type<?> newSpawnPotentialsType = newType.findField("SpawnPotentials").type();
return this.fixTypeEverywhereTyped(
"Fix mob spawner data structure",
oldType,
newType,
spawner -> spawner.updateTyped(spawnDataFinder, newSpawnDataType, spawnData -> this.wrapEntityToSpawnData(newSpawnDataType, spawnData))
.updateTyped(
spawnPotentialsFinder,
newSpawnPotentialsType,
spawnPotentials -> this.wrapSpawnPotentialsToWeightedEntries(newSpawnPotentialsType, spawnPotentials)
)
);
}
private <T> Typed<T> wrapEntityToSpawnData(Type<T> newType, Typed<?> spawnData) {
DynamicOps<?> ops = spawnData.getOps();
return new Typed<>(newType, ops, (T)Pair.<Object, Dynamic<?>>of(spawnData.getValue(), new Dynamic<>(ops)));
}
private <T> Typed<T> wrapSpawnPotentialsToWeightedEntries(Type<T> newType, Typed<?> spawnPotentials) {
DynamicOps<?> ops = spawnPotentials.getOps();
List<?> entries = (List<?>)spawnPotentials.getValue();
List<?> wrappedEntries = entries.stream().map(o -> {
Pair<Object, Dynamic<?>> entry = (Pair<Object, Dynamic<?>>)o;
int weight = entry.getSecond().get("Weight").asNumber().result().orElse(1).intValue();
Dynamic<?> newEntryRemainder = new Dynamic<>(ops);
newEntryRemainder = newEntryRemainder.set("weight", newEntryRemainder.createInt(weight));
Dynamic<?> newInnerRemainder = entry.getSecond().remove("Weight").remove("Entity");
return Pair.of(Pair.of(entry.getFirst(), newInnerRemainder), newEntryRemainder);
}).toList();
return new Typed<>(newType, ops, (T)wrappedEntries);
}
}引用的其他类
- Schema
- 引用位置:
参数
- 引用位置: