Block Thermo
A thermodynamic system for blocks
📖 About
Block Thermo is a thermodynamic system API mod for Minecraft 1.21.1 built on NeoForge. It provides a comprehensive temperature calculation system considering biomes, altitude, time, weather, and radiation sources, offering a powerful temperature API for other mods to use.
This mod features a modular design with extension points that allow other mods to customize various aspects of temperature calculation, including biome temperature, altitude modifiers, time modifiers, weather modifiers, and radiation modifiers.
✨ Features
Core Features
- Precise Temperature Calculation - Multi-factor temperature calculation based on biomes, altitude, time, weather, and radiation sources
- Modular Design - Extension points support, allowing other mods to customize temperature calculation logic
- Complete API - Provides a full API for other mods to integrate and extend
- Game Commands - Built-in temperature query and config reload commands
- Config System - Supports custom dimension configurations, biome temperatures, and radiation source configurations
- Multi-language Support - Supports English and Simplified Chinese
Temperature Calculation Factors
- Biome Temperature - Base temperature based on biome, with custom configuration support
- Altitude Modifier - Automatically adjusts temperature based on height
- Time Modifier - Daily temperature changes (highest at noon, lowest at midnight)
- Weather Modifier - Temperature offsets for clear, rain, and thunderstorm
- Radiation Modifier - Detects nearby radiation sources (such as fire, lava, torches, etc.) and calculates their influence
🚀 Usage
Game Commands
Query current location temperature
/blockthermo temperature query
Displays detailed temperature information at your current location, including:
- Base temperature
- Altitude modifier
- Time modifier
- Weather modifier
- Radiation modifier
- Final temperature
Query temperature at specified location
/blockthermo temperature query <x> <y> <z>
Displays temperature information at the specified coordinates.
⚙️ Configuration
Mod configuration files are located in the config/block_thermo/ folder in your Minecraft directory.
Main Config (temperature_main.json)
Contains dimension settings, daily temperature ranges, weather temperature offsets, and radiation settings.
Biome Config (temperature_biomes.json)
Used to customize base temperatures and altitude change rates for specific biomes.
Radiation Sources Config (temperature_radiation.json)
Used to define radiation intensity for blocks.
🔧 For Developers
API Usage
Get Temperature
import com.drownedcloud.blockthermo.temperature.TemperatureCalculator;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
// Get temperature at current location
float temperature = TemperatureCalculator.getTemperature(level, blockPos);
Extend Temperature Calculation
Block Thermo provides multiple extension points for other mods to customize temperature calculation:
Biome Temperature Provider
ExtensionManager.setBiomeTemperatureProvider(new BiomeTemperatureProvider() {
@Override
public float getBaseTemperature(Biome biome) {
// Custom biome base temperature calculation
return biome.getBaseTemperature() * 30.0f;
}
});
Altitude Temperature Provider
ExtensionManager.setAltitudeTemperatureProvider(new AltitudeTemperatureProvider() {
@Override
public float getAltitudeModifier(float altitudeRate, int y, int seaLevel) {
// Custom altitude modifier calculation
return altitudeRate * (y - seaLevel);
}
});
Time Temperature Provider
ExtensionManager.setTimeTemperatureProvider(new TimeTemperatureProvider() {
@Override
public float getTimeModifier(Level level, float minTemp, float maxTemp) {
// Custom time modifier calculation
long dayTime = level.getDayTime() % 24000;
return minTemp + (maxTemp - minTemp) * (1 - Math.abs(dayTime - 12000) / 12000.0f);
}
});
Weather Temperature Provider
ExtensionManager.setWeatherTemperatureProvider(new WeatherTemperatureProvider() {
@Override
public float getWeatherModifier(Level level, float clear, float rain, float thunder) {
// Custom weather modifier calculation
if (level.isThundering()) return thunder;
if (level.isRaining()) return rain;
return clear;
}
});
Radiation Temperature Provider
ExtensionManager.setRadiationTemperatureProvider(new RadiationTemperatureProvider() {
@Override
public float getRadiationModifier(Level level, BlockPos pos, int maxDistance, String decayType, Map<Block, Float> sources) {
// Custom radiation modifier calculation
return 0.0f;
}
});
📋 Requirements
- Minecraft: 1.21.1 or 26.1
- NeoForge: 21.1.186 or higher
- Java: 21 or 25
💬 Support
If you encounter any issues or have any suggestions while using this mod, please contact us through the following channels:
- Submit an Issue on GitHub
- Leave a comment in the CurseForge or Modrinth comments section
🤝 Contributing
Code contributions are welcome! Please submit a Pull Request or create an Issue to help improve this mod.