一个基于 Minecraft 1.21.1 NeoForge 的热力学系统模组,提供精确的方块坐标温度计算功能。
- 精确温度计算:基于生物群系、海拔高度、时间、天气和辐射源的多因素温度计算
- 自定义热辐射衰减算法:支持通过配置文件定义自定义的热辐射衰减公式
- 配置系统:支持自定义维度配置、生物群系温度和辐射源配置
- API 接口:提供完整的 API 供其他模组扩展
- 游戏命令:内置温度查询命令
- 多语言支持:支持英文和简体中文
- Java 21
- Gradle 8.5+
- Minecraft 1.21.1
- NeoForge 21.1.186+
./gradlew build构建完成后,jar 文件将位于 build/libs/ 目录下。
- 下载最新版本的模组 jar 文件
- 将 jar 文件放入 Minecraft 的
mods文件夹中 - 启动游戏,配置文件会在首次加载时自动生成
模组配置文件位于 Minecraft 目录下的 config/block_thermo/ 文件夹中,包含以下文件:
主配置文件,包含维度配置、每日温度范围、天气温度偏移和辐射设置:
{
"version": "1.0.0",
"dimensions": {
"minecraft:overworld": {
"altitude_rate": -0.01,
"sea_level": 63,
"apply_daily_cycle": true,
"apply_weather": true
},
"minecraft:nether": {
"altitude_rate": 0.0,
"sea_level": 31,
"apply_daily_cycle": false,
"apply_weather": false
},
"minecraft:end": {
"altitude_rate": 0.0,
"sea_level": 63,
"apply_daily_cycle": false,
"apply_weather": false
}
},
"daily_temp_range": {
"min_min": 5.0,
"min_max": 10.0,
"max_min": 25.0,
"max_max": 35.0
},
"weather_temp_offset": {
"clear": 0.0,
"rain": -5.0,
"thunder": -10.0
},
"radiation": {
"max_distance": 5,
"decay_type": {
"select": "linear",
"formulas": {
"linear": "(maxDistance - distance) / maxDistance",
"inverse": "1 / (distance + 1)",
"exponential": "exp(-distance / maxDistance)",
"quadratic": "1 - (distance / maxDistance)^2"
}
}
}
}decay_type 字段允许您配置自定义的热辐射衰减公式:
select:指定要使用的衰减公式代号formulas:包含多个预定义或自定义的衰减公式
distance或d:当前距离maxDistance或md:最大辐射距离
exp(x):指数函数ln(x)或log(x):自然对数log10(x):以10为底的对数sqrt(x):平方根sin(x):正弦函数cos(x):余弦函数tan(x):正切函数asin(x):反正弦函数acos(x):反余弦函数atan(x):反正切函数abs(x):绝对值
-
线性衰减:
(maxDistance - distance) / maxDistance- 温度随距离线性下降
-
反比衰减:
1 / (distance + 1)- 近距离衰减快,远距离衰减慢
-
指数衰减:
exp(-distance / maxDistance)- 衰减速度逐渐减慢
-
二次衰减:
1 - (distance / maxDistance)^2- 近距离衰减慢,远距离衰减快
-
自定义示例:
exp(-distance / (maxDistance / 2)) * (1 - distance / maxDistance)- 组合多种衰减特性
生物群系配置文件,用于自定义特定生物群系的基础温度和海拔变化率:
{
"version": "1.0.0",
"biomes": {
"minecraft:desert": {
"base_temp": 30.0,
"altitude_rate": -0.008
},
"minecraft:snowy_tundra": {
"base_temp": -10.0,
"altitude_rate": -0.012
}
}
}辐射源配置文件,用于定义方块的辐射强度:
{
"sources": {
"minecraft:fire": 50.0,
"minecraft:lava": 100.0,
"minecraft:torch": 10.0,
"minecraft:campfire": 30.0,
"minecraft:soul_fire": 30.0
}
}/bt temp
显示当前所在位置的温度信息,包括:
- 基础温度
- 海拔修正
- 时间修正
- 天气修正
- 辐射修正
- 最终温度
/bt temp <x> <y> <z>
显示指定坐标位置的温度信息。
/bt reload
重新加载所有配置文件(需要管理员权限)。
import com.drownedcloud.blockthermo.temperature.TemperatureCalculator;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
// 获取当前位置的温度
float temperature = TemperatureCalculator.getTemperature(level, blockPos);模组提供了多个扩展点供其他模组自定义温度计算:
import com.drownedcloud.blockthermo.api.ExtensionManager;
import com.drownedcloud.blockthermo.api.BiomeTemperatureProvider;
import net.minecraft.world.level.biome.Biome;
ExtensionManager.setBiomeTemperatureProvider(new BiomeTemperatureProvider() {
@Override
public float getBaseTemperature(Biome biome) {
// 自定义生物群系基础温度计算
return biome.getBaseTemperature() * 30.0f;
}
});import com.drownedcloud.blockthermo.api.ExtensionManager;
import com.drownedcloud.blockthermo.api.AltitudeTemperatureProvider;
ExtensionManager.setAltitudeTemperatureProvider(new AltitudeTemperatureProvider() {
@Override
public float getAltitudeModifier(float altitudeRate, int y, int seaLevel) {
// 自定义海拔修正计算
return altitudeRate * (y - seaLevel);
}
});import com.drownedcloud.blockthermo.api.ExtensionManager;
import com.drownedcloud.blockthermo.api.TimeTemperatureProvider;
ExtensionManager.setTimeTemperatureProvider(new TimeTemperatureProvider() {
@Override
public float getTimeModifier(Level level, float minTemp, float maxTemp) {
// 自定义时间修正计算
long dayTime = level.getDayTime() % 24000;
return minTemp + (maxTemp - minTemp) * (1 - Math.abs(dayTime - 12000) / 12000.0f);
}
});import com.drownedcloud.blockthermo.api.ExtensionManager;
import com.drownedcloud.blockthermo.api.WeatherTemperatureProvider;
ExtensionManager.setWeatherTemperatureProvider(new WeatherTemperatureProvider() {
@Override
public float getWeatherModifier(Level level, float clear, float rain, float thunder) {
// 自定义天气修正计算
if (level.isThundering()) return thunder;
if (level.isRaining()) return rain;
return clear;
}
});import com.drownedcloud.blockthermo.api.ExtensionManager;
import com.drownedcloud.blockthermo.api.RadiationTemperatureProvider;
ExtensionManager.setRadiationTemperatureProvider(new RadiationTemperatureProvider() {
@Override
public float getRadiationModifier(Level level, BlockPos pos, int maxDistance, String decayType, Map<Block, Float> sources) {
// 自定义辐射修正计算
return 0.0f;
}
});模组使用以下公式计算最终温度:
最终温度 = 生物群系温度 + 海拔修正 + 时间修正 + 天气修正 + 辐射修正
- 如果在
temperature_biomes.json中配置了该生物群系,则使用配置的基础温度 - 否则使用生物群系的默认基础温度属性
- 根据配置的海拔变化率和当前高度计算
海拔修正 = 海拔变化率 × (当前高度 - 海平面高度)
- 基于每日温度范围和当前时间计算
- 正午时温度最高,午夜时温度最低
- 根据当前天气状态应用温度偏移
- 晴天:0.0°C
- 下雨:-5.0°C
- 雷暴:-10.0°C
- 检测周围指定距离内的辐射源
- 根据配置的衰减公式计算辐射影响
- 支持自定义衰减公式
com.drownedcloud.blockthermo
├── api/ # API 接口和扩展点
│ ├── extension/ # 扩展实现(可选)
│ ├── AltitudeTemperatureProvider.java
│ ├── BiomeTemperatureProvider.java
│ ├── ExtensionManager.java
│ ├── RadiationTemperatureProvider.java
│ ├── TimeTemperatureProvider.java
│ └── WeatherTemperatureProvider.java
├── command/ # 命令实现
│ └── TemperatureCommand.java
├── config/ # 配置系统
│ ├── ConfigLoader.java
│ ├── TemperatureBiomesConfig.java
│ ├── TemperatureMainConfig.java
│ └── TemperatureRadiationConfig.java
├── temperature/ # 温度计算核心
│ └── TemperatureCalculator.java
└── BlockThermo.java # 模组主类
模组使用 NeoForge 的事件系统:
@Mod(BlockThermo.MOD_ID)
public class BlockThermo {
public static final String MOD_ID = "block_thermo";
public BlockThermo() {
IEventBus bus = NeoForge.EVENT_BUS;
bus.register(this);
}
@SubscribeEvent
public void onRegisterCommands(RegisterCommandsEvent event) {
TemperatureCommand.register(event.getDispatcher());
}
@SubscribeEvent
public void onServerStarting(ServerStartingEvent event) {
ConfigLoader.init();
}
}模组支持多语言,语言文件位于 src/main/resources/assets/block_thermo/lang/:
en_us.json- 英文zh_cn.json- 简体中文
添加新语言只需创建对应的语言文件并按照现有格式添加翻译。
本模组仅供学习和研究使用。
欢迎提交 Issue 和 Pull Request!
- 作者:DrownedCloud
- 项目地址:[GitHub Repository]
- 修复了配置文件格式兼容性问题
- 添加了自动配置迁移功能,支持从旧格式自动升级到新格式
- 改进了错误处理和日志记录
- 新增自定义热辐射衰减算法功能
- 支持通过配置文件定义自定义衰减公式
- 添加公式解析器,支持多种数学函数和变量
- 预定义多种衰减公式(线性、反比、指数、二次)
- 修复配置文件生成问题
- 优化温度计算算法
- 改进 API 接口设计
- 添加模组 Logo 支持
- 初始版本发布
- 实现基础温度计算功能
- 添加配置系统
- 实现游戏命令
- 添加多语言支持
