Compare commits
5 Commits
52968ffb1f
...
4bbcbc8ea6
Author | SHA1 | Date | |
---|---|---|---|
4bbcbc8ea6 | |||
5898ae0b19 | |||
4e3cf276e9 | |||
0f1c1f1653 | |||
bc3492bae3 |
10
README.md
10
README.md
@ -1,19 +1,17 @@
|
|||||||
|
|
||||||
# Overdrive That Matters
|
# Overdrive That Matters
|
||||||
|
|
||||||
Minecraft mod with science fiction style, about matter, and energy, combined.
|
Minecraft tech-oriented mod with science fiction style, about matter, and energy, combined.
|
||||||
|
|
||||||
### Required mods
|
### Required mods
|
||||||
|
|
||||||
* [Kotlin for Forge](https://www.curseforge.com/minecraft/mc-mods/kotlin-for-forge) or have Kotlin standard library in classpath (at least 1.8.0 is required)
|
* [Kotlin for Forge](https://www.curseforge.com/minecraft/mc-mods/kotlin-for-forge) or have Kotlin standard library in classpath (at least 2.0.0 is required)
|
||||||
|
|
||||||
### Recommended mods
|
### Recommended mods
|
||||||
|
|
||||||
* [Ferrite Core](https://www.curseforge.com/minecraft/mc-mods/ferritecore), reduces memory usage
|
* [Ferrite Core](https://www.curseforge.com/minecraft/mc-mods/ferritecore), reduces memory usage
|
||||||
* In case of Overdrive That Matters, ***greatly*** reduces JVM heap bloat caused by model data being duplicated
|
* In case of Overdrive That Matters, ***greatly*** reduces JVM heap bloat caused by model data being duplicated
|
||||||
|
|
||||||
* Particle Collider, reduces world join time
|
|
||||||
|
|
||||||
### Mods with special compatibility code
|
### Mods with special compatibility code
|
||||||
|
|
||||||
* [JEI](https://www.curseforge.com/minecraft/mc-mods/jei)
|
* [JEI](https://www.curseforge.com/minecraft/mc-mods/jei)
|
||||||
@ -45,9 +43,9 @@ to avoid bloating git history with generated blobs.
|
|||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Unless otherwise stated in [NOTICE](NOTICE.md), material in mod is licensed under **2-Clause BSD**
|
Unless otherwise stated in [NOTICE](NOTICE.md), assets in mod are licensed under **2-Clause BSD**
|
||||||
|
|
||||||
Copyright 2021-Present DBotThePony, GearShocky, Overdrive That Matters Contributors
|
Copyright 2021-Present DBotThePony, GearShocky, YuRaNnNzZZ, Overdrive That Matters Contributors
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
@ -362,6 +362,8 @@ private fun misc(provider: MatteryLanguageProvider) {
|
|||||||
gui("progress_widget_stuck", "The machine can not work, check configuration")
|
gui("progress_widget_stuck", "The machine can not work, check configuration")
|
||||||
|
|
||||||
gui("total_raw", "Total:")
|
gui("total_raw", "Total:")
|
||||||
|
gui("total", "Total: %s")
|
||||||
|
gui("total_approx", "Total: ~%s")
|
||||||
|
|
||||||
gui("matter.percentage_level", "Matter level: %s%%")
|
gui("matter.percentage_level", "Matter level: %s%%")
|
||||||
gui("matter.format", "Matter: %s")
|
gui("matter.format", "Matter: %s")
|
||||||
@ -829,6 +831,13 @@ private fun gui(provider: MatteryLanguageProvider) {
|
|||||||
with(provider.english) {
|
with(provider.english) {
|
||||||
gui("ago", "%s ago")
|
gui("ago", "%s ago")
|
||||||
|
|
||||||
|
gui("time.short.5s", "5s")
|
||||||
|
gui("time.short.15s", "15s")
|
||||||
|
gui("time.short.1m", "1m")
|
||||||
|
gui("time.short.1h", "1h")
|
||||||
|
gui("time.short.6h", "6h")
|
||||||
|
gui("time.short.24h", "24h")
|
||||||
|
|
||||||
gui("part_of_multiblock", "Part of multiblock structure, useless on its own")
|
gui("part_of_multiblock", "Part of multiblock structure, useless on its own")
|
||||||
gui("quicksearch", "Quick search...")
|
gui("quicksearch", "Quick search...")
|
||||||
|
|
||||||
|
@ -367,6 +367,8 @@ private fun misc(provider: MatteryLanguageProvider) {
|
|||||||
gui("progress_widget_stuck", "Это устройство не может продолжить работу, проверьте конфигурацию")
|
gui("progress_widget_stuck", "Это устройство не может продолжить работу, проверьте конфигурацию")
|
||||||
|
|
||||||
gui("total_raw", "Всего:")
|
gui("total_raw", "Всего:")
|
||||||
|
gui("total", "Всего: %s")
|
||||||
|
gui("total_approx", "Всего примерно: %s")
|
||||||
|
|
||||||
gui("matter.percentage_level", "Уровень материи: %s%%")
|
gui("matter.percentage_level", "Уровень материи: %s%%")
|
||||||
gui("matter.format", "Материя: %s")
|
gui("matter.format", "Материя: %s")
|
||||||
@ -834,6 +836,13 @@ private fun gui(provider: MatteryLanguageProvider) {
|
|||||||
with(provider.russian) {
|
with(provider.russian) {
|
||||||
gui("ago", "%s тому назад")
|
gui("ago", "%s тому назад")
|
||||||
|
|
||||||
|
gui("time.short.5s", "5с")
|
||||||
|
gui("time.short.15s", "15с")
|
||||||
|
gui("time.short.1m", "1м")
|
||||||
|
gui("time.short.1h", "1ч")
|
||||||
|
gui("time.short.6h", "6ч")
|
||||||
|
gui("time.short.24h", "24ч")
|
||||||
|
|
||||||
gui("part_of_multiblock", "Часть мультиблока, бесполезен сам по себе")
|
gui("part_of_multiblock", "Часть мультиблока, бесполезен сам по себе")
|
||||||
gui("quicksearch", "Быстрый поиск...")
|
gui("quicksearch", "Быстрый поиск...")
|
||||||
|
|
||||||
|
@ -79,8 +79,8 @@ public final class OverdriveThatMatters {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void checkIfKotlinIsInstalled() {
|
private static void checkIfKotlinIsInstalled() {
|
||||||
if (!KotlinVersion.CURRENT.isAtLeast(1, 9, 0)) {
|
if (!KotlinVersion.CURRENT.isAtLeast(2, 0, 0)) {
|
||||||
throw new UnsupportedClassVersionError("Installed kotlin version is " + KotlinVersion.CURRENT + ", when at least 1.9.0 is required.");
|
throw new UnsupportedClassVersionError("Installed kotlin version is " + KotlinVersion.CURRENT + ", when at least 2.0.0 is required.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ import ru.dbotthepony.mc.otm.core.util.formatTickDuration
|
|||||||
open class DecimalHistoryChartPanel<out S : MatteryScreen<*>>(
|
open class DecimalHistoryChartPanel<out S : MatteryScreen<*>>(
|
||||||
screen: S,
|
screen: S,
|
||||||
parent: EditablePanel<*>,
|
parent: EditablePanel<*>,
|
||||||
val graph: DecimalHistoryChart,
|
val chart: DecimalHistoryChart,
|
||||||
val formatText: (Decimal) -> Component = { TextComponent(it.toString(2)) },
|
val formatText: (Decimal) -> Component = { TextComponent(it.toString(2)) },
|
||||||
x: Float = 0f,
|
x: Float = 0f,
|
||||||
y: Float = 0f,
|
y: Float = 0f,
|
||||||
@ -25,13 +25,13 @@ open class DecimalHistoryChartPanel<out S : MatteryScreen<*>>(
|
|||||||
height: Float = 10f
|
height: Float = 10f
|
||||||
) : EditablePanel<S>(screen, parent, x, y, width, height) {
|
) : EditablePanel<S>(screen, parent, x, y, width, height) {
|
||||||
override fun innerRender(graphics: MGUIGraphics, mouseX: Float, mouseY: Float, partialTick: Float) {
|
override fun innerRender(graphics: MGUIGraphics, mouseX: Float, mouseY: Float, partialTick: Float) {
|
||||||
val maximum = graph.max()
|
val maximum = chart.max()
|
||||||
val normalized: FloatArray
|
val normalized: FloatArray
|
||||||
val levelLabels: ChartLevelLabels
|
val levelLabels: ChartLevelLabels
|
||||||
|
|
||||||
if (maximum.isZero || maximum.isInfinite) {
|
if (maximum.isZero || maximum.isInfinite) {
|
||||||
normalized = FloatArray(graph.width) {
|
normalized = FloatArray(chart.width) {
|
||||||
if (graph[it].isInfinite) 0.8f else 0.0f
|
if (chart[it].isInfinite) 0.8f else 0.0f
|
||||||
}
|
}
|
||||||
|
|
||||||
levelLabels = ChartLevelLabels(
|
levelLabels = ChartLevelLabels(
|
||||||
@ -39,7 +39,7 @@ open class DecimalHistoryChartPanel<out S : MatteryScreen<*>>(
|
|||||||
font = font
|
font = font
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
normalized = FloatArray(graph.width) { (graph[it] / maximum).toFloat() * 0.9f }
|
normalized = FloatArray(chart.width) { (chart[it] / maximum).toFloat() * 0.9f }
|
||||||
|
|
||||||
val map = Float2ObjectArrayMap<Component>()
|
val map = Float2ObjectArrayMap<Component>()
|
||||||
|
|
||||||
@ -65,11 +65,24 @@ open class DecimalHistoryChartPanel<out S : MatteryScreen<*>>(
|
|||||||
mouseX - absoluteX,
|
mouseX - absoluteX,
|
||||||
mouseY - absoluteY,
|
mouseY - absoluteY,
|
||||||
{
|
{
|
||||||
listOf(
|
val result = ArrayList<Component>()
|
||||||
formatText(graph[it]),
|
result.add(formatText(chart[it]))
|
||||||
TextComponent(""),
|
|
||||||
TranslatableComponent("otm.gui.ago", formatTickDuration(it * graph.resolution, true))
|
if (chart.resolution != 1 && chart[it].isFinite && chart[it].isNotZero) {
|
||||||
)
|
result.add(TranslatableComponent("otm.gui.total_approx", formatText(chart[it] * chart.resolution)))
|
||||||
|
}
|
||||||
|
|
||||||
|
result.add(TextComponent(""))
|
||||||
|
|
||||||
|
if (chart.resolution <= 20) {
|
||||||
|
result.add(TranslatableComponent("otm.gui.ago", formatTickDuration(it * chart.resolution, false)))
|
||||||
|
} else {
|
||||||
|
val useLongFormat = chart.resolution * chart.width / 20 > 99 * 60
|
||||||
|
result.add(TranslatableComponent("otm.gui.ago", formatTickDuration(it * chart.resolution, useLongFormat) + "-" + formatTickDuration((it + 1) * chart.resolution, useLongFormat)))
|
||||||
|
result.add(TextComponent("(${formatTickDuration(chart.resolution, useLongFormat)})"))
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
},
|
},
|
||||||
font,
|
font,
|
||||||
),
|
),
|
||||||
|
@ -12,7 +12,6 @@ import ru.dbotthepony.mc.otm.client.screen.panels.*
|
|||||||
import ru.dbotthepony.mc.otm.client.screen.panels.button.ButtonPanel
|
import ru.dbotthepony.mc.otm.client.screen.panels.button.ButtonPanel
|
||||||
import ru.dbotthepony.mc.otm.client.screen.panels.button.makeDeviceControls
|
import ru.dbotthepony.mc.otm.client.screen.panels.button.makeDeviceControls
|
||||||
import ru.dbotthepony.mc.otm.client.screen.panels.input.NetworkNumberInputPanel
|
import ru.dbotthepony.mc.otm.client.screen.panels.input.NetworkNumberInputPanel
|
||||||
import ru.dbotthepony.mc.otm.core.TextComponent
|
|
||||||
import ru.dbotthepony.mc.otm.core.util.formatPower
|
import ru.dbotthepony.mc.otm.core.util.formatPower
|
||||||
import ru.dbotthepony.mc.otm.menu.tech.EnergyCounterMenu
|
import ru.dbotthepony.mc.otm.menu.tech.EnergyCounterMenu
|
||||||
|
|
||||||
@ -24,16 +23,16 @@ class EnergyCounterScreen(menu: EnergyCounterMenu, inventory: Inventory, title:
|
|||||||
frame.width += 60f
|
frame.width += 60f
|
||||||
|
|
||||||
val graphs = linkedMapOf(
|
val graphs = linkedMapOf(
|
||||||
menu.history5s to "5s",
|
menu.history5s to "otm.gui.time.short.5s",
|
||||||
menu.history15s to "15s",
|
menu.history15s to "otm.gui.time.short.15s",
|
||||||
menu.history1m to "1m",
|
menu.history1m to "otm.gui.time.short.1m",
|
||||||
menu.history1h to "1h",
|
menu.history1h to "otm.gui.time.short.1h",
|
||||||
menu.history6h to "6h",
|
menu.history6h to "otm.gui.time.short.6h",
|
||||||
menu.history24h to "24h",
|
menu.history24h to "otm.gui.time.short.24h",
|
||||||
)
|
)
|
||||||
|
|
||||||
for ((graph, text) in graphs) {
|
for ((graph, text) in graphs) {
|
||||||
val tab = frame.Tab(activeIcon = TextIcon(color = RGBAColor.BLACK, font = font, text = TextComponent(text)))
|
val tab = frame.Tab(activeIcon = TextIcon(color = RGBAColor.BLACK, font = font, text = TranslatableComponent(text)))
|
||||||
val panel = DecimalHistoryChartPanel(this, tab.canvas, graph, formatText = { it.formatPower(formatAsReadable = ShiftPressedCond) })
|
val panel = DecimalHistoryChartPanel(this, tab.canvas, graph, formatText = { it.formatPower(formatAsReadable = ShiftPressedCond) })
|
||||||
panel.dock = Dock.FILL
|
panel.dock = Dock.FILL
|
||||||
}
|
}
|
||||||
|
@ -120,6 +120,7 @@ sealed class Decimal : Number(), Comparable<Decimal> {
|
|||||||
* Whenever this Decimal is zero
|
* Whenever this Decimal is zero
|
||||||
*/
|
*/
|
||||||
inline val isZero get() = signum() == 0
|
inline val isZero get() = signum() == 0
|
||||||
|
inline val isNotZero get() = signum() != 0
|
||||||
|
|
||||||
abstract val isInfinite: Boolean
|
abstract val isInfinite: Boolean
|
||||||
abstract val isFinite: Boolean
|
abstract val isFinite: Boolean
|
||||||
|
Loading…
Reference in New Issue
Block a user