Merge remote-tracking branch 'origin/1.21' into 1.21

This commit is contained in:
DBotThePony 2024-10-04 13:42:01 +07:00
commit 41431a13bd
Signed by: DBot
GPG Key ID: DCC23B5715498507
10 changed files with 142 additions and 71 deletions

View File

@ -166,6 +166,9 @@ dependencies {
val botarium_id: String by project
val ad_astra_id: String by project
val worldedit_id: String by project
val item_borders_id: String by project
val iceberg_id: String by project
val prism_lib_id: String by project
val cloth_config_version: String by project
val condensed_creative_version: String by project
@ -190,6 +193,11 @@ dependencies {
runtimeOnly("me.shedaniel.cloth:cloth-config-neoforge:${cloth_config_version}")
implementation("io.wispforest:condensed_creative-neoforge:${condensed_creative_version}")
compileOnly("curse.maven:item-borders-513769:${item_borders_id}")
// implementation("curse.maven:item-borders-513769:${item_borders_id}")
// runtimeOnly("curse.maven:iceberg-520110:${iceberg_id}")
// runtimeOnly("curse.maven:prism-lib-638111:${prism_lib_id}")
// runtimeOnly("curse.maven:worldedit-225608:${worldedit_fileid}")
// runtimeOnly("at.ridgo8.moreoverlays:MoreOverlays-updated:${more_overlays_version}")

View File

@ -32,6 +32,9 @@ resourceful_config_id=4576455
jade_id=5591256
configured_id=4462894
worldedit_id=4807512
item_borders_id=5591010
iceberg_id=5750025
prism_lib_id=5625115
cloth_config_version=15.0.130
condensed_creative_version=3.4.1+1.21

View File

@ -1,5 +1,6 @@
package ru.dbotthepony.mc.otm.datagen.lang
import ru.dbotthepony.mc.otm.config.CablesConfig
import ru.dbotthepony.mc.otm.registry.*
private fun decoratives(provider: MatteryLanguageProvider) {
@ -492,6 +493,11 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.MATTER_ENTANGLER, "Matter Entangler")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.CRUDE]!!, "Crude Energy Cable")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.REGULAR]!!, "Energy Cable")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.ADVANCED]!!, "Advanced Energy Cable")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.SUPERCONDUCTOR]!!, "Superconductive Energy Cable")
addBlock(MBlocks.DRIVE_VIEWER.values, "Drive Viewer")
add(MBlocks.BLACK_HOLE, "Local Anomalous Spacetime Dilation Singular Point")
@ -703,12 +709,12 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.GRAVITATIONAL_DISRUPTOR, "Spacetime Equalizer")
add(MItems.GRAVITATIONAL_DISRUPTOR, "desc", "Once within close proximity of massive spacetime dilation anomaly, equalizes spacetime in it's radius")
add(MItems.GRAVITATIONAL_DISRUPTOR, "desc2", "Allows collapse of singularities")
add(MItems.GRAVITATIONAL_DISRUPTOR, "desc3", "Doesn't destroy any of mass singularity had acquired, which result in violent explosion of matter!")
add(MItems.GRAVITATIONAL_DISRUPTOR, "desc4", "The explosion %s be contained by %s. Do not even attempt to contain it.")
add(MItems.GRAVITATIONAL_DISRUPTOR, "desc4_clarification", "can not")
add(MItems.GRAVITATIONAL_DISRUPTOR, "desc4_clarification2", "anything")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description", "Once within close proximity of massive spacetime dilation anomaly, equalizes spacetime in it's radius")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description2", "Allows collapse of singularities")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description3", "Doesn't destroy any of mass singularity had acquired, which result in violent explosion of matter!")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description4", "The explosion %s be contained by %s. Do not even attempt to contain it.")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description4_clarification", "can not")
add(MItems.GRAVITATIONAL_DISRUPTOR, "description4_clarification2", "anything")
add(MItems.MATTER_DUST, "Matter Dust")
add(MItems.MATTER_DUST, "desc", "This item is product of failed decomposition or replication attempt")

View File

@ -284,15 +284,15 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
val russianColors = Colors("ru_ru", lowercaseIntermediate = true,
"Белый",
"Оранжевый",
"Маджентовый",
"Светло синий",
"Пурпурный",
"Голубой",
"Жёлтый",
"Лаймовый",
"Розовый",
"Серый",
"Светло серый",
"Циановый",
"Пурпурный",
"Светло-серый",
"Бирюзовый",
"Фиолетовый",
"Синий",
"Коричневый",
"Зелёный",

View File

@ -1,5 +1,6 @@
package ru.dbotthepony.mc.otm.datagen.lang
import ru.dbotthepony.mc.otm.config.CablesConfig
import ru.dbotthepony.mc.otm.registry.AndroidFeatures
import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.MEntityTypes
@ -12,45 +13,41 @@ private const val HIGH_BLAST_RESISTANCE_DOOR = "Взрывоустойчивая
private const val FEELING_SAFE_NOW = "...ощущаете ли вы себя теперь в безопасности?"
private fun decoratives(provider: MatteryLanguageProvider) {
with(provider.russianColors) {
add(MRegistry.VENT, "%s вентиляция")
add(MRegistry.VENT_ALTERNATIVE, "%s альтернативная вентиляция")
add(MRegistry.TRITANIUM_BLOCK, "%s тритановый блок")
add(MRegistry.COMPUTER_TERMINAL, "%s компьютерный терминал")
add(MRegistry.STAR_CHAIR, "%s звезданутый стул")
add(MRegistry.TRITANIUM_STAIRS, "%s тритановые ступеньки")
add(MRegistry.TRITANIUM_SLAB, "%s тритановая плита")
add(MRegistry.TRITANIUM_WALL, "%s тритановая ограда")
add(MRegistry.FLOOR_TILES, "%s керамическая плитка")
add(MRegistry.FLOOR_TILES_STAIRS, "%s ступеньки из керамической плитки")
add(MRegistry.FLOOR_TILES_SLAB, "%s плита из керамической плитки")
add(MRegistry.UNREFINED_FLOOR_TILES, "Необработанная %s кирамическая Плитка")
add(MRegistry.INDUSTRIAL_GLASS, "%s окрашенное промышленное стекло")
add(MRegistry.INDUSTRIAL_GLASS_PANE, "%s окрашенная промышленная стеклянная панель")
add(MRegistry.CARGO_CRATES, "%s грузовой ящик")
add(MRegistry.DECORATIVE_CRATE, "%s блок контейнера")
}
with (provider.russianColors) {
addIntermediate(MBlocks.TRITANIUM_STRIPED_BLOCK, "Тритановый блок с %s полоской")
addIntermediate(MBlocks.TRITANIUM_STRIPED_STAIRS, "Тритановые ступеньки с %s полоской")
addIntermediate(MBlocks.TRITANIUM_STRIPED_SLAB, "Тритановая плита с %s полоской")
addIntermediate(MBlocks.TRITANIUM_STRIPED_WALL, "Тритановая ограда с %s полоской")
}
with (provider.russian) {
for ((color, name) in provider.russianColors.mapped) {
add(MItems.CARGO_CRATE_MINECARTS[color]!!, "Вагонетка с $name грузовым ящиком")
add(MEntityTypes.CARGO_CRATE_MINECARTS[color]!!, "Вагонетка с $name грузовым ящиком")
val nameF = name.replace("ый", "ая").replace("ой", "ая").replace("ий", "яя")
add(MRegistry.TRITANIUM_PRESSURE_PLATE.getBlock(color), "$name тритановая нажимная пластина")
add(MRegistry.VENT.getBlock(color), "$nameF вентиляция")
add(MRegistry.VENT_ALTERNATIVE.getBlock(color), "$nameF альтернативная вентиляция")
val nameMul = name.replace("ый", "ые").replace("ой", "ые").replace("ий", "ие")
add(MRegistry.TRITANIUM_BLOCK.getBlock(color), "$name тритановый блок")
add(MRegistry.COMPUTER_TERMINAL.getBlock(color), "$name компьютерный терминал")
add(MRegistry.STAR_CHAIR.getBlock(color), "$name звезданутый стул")
add(MRegistry.TRITANIUM_STAIRS.getBlock(color), "$name тритановые ступеньки")
add(MRegistry.TRITANIUM_SLAB.getBlock(color), "$nameF тритановая плита")
add(MRegistry.TRITANIUM_WALL.getBlock(color), "$nameF тритановая ограда")
add(MRegistry.FLOOR_TILES.getBlock(color), "$nameF керамическая плитка")
add(MRegistry.FLOOR_TILES_STAIRS.getBlock(color), "$nameMul ступеньки из керамической плитки")
add(MRegistry.FLOOR_TILES_SLAB.getBlock(color), "$nameF плита из керамической плитки")
add(MRegistry.UNREFINED_FLOOR_TILES.getBlock(color), "Необработанная ${nameF.lowercase()} керамическая плитка")
val nameN = name.replace("ый", "ое").replace("ой", "ое").replace("ий", "ее")
add(MRegistry.INDUSTRIAL_GLASS.getBlock(color), "$nameN окрашенное промышленное стекло")
add(MRegistry.INDUSTRIAL_GLASS_PANE.getBlock(color), "$nameF окрашенная промышленная стеклянная панель")
add(MRegistry.CARGO_CRATES.getBlock(color), "$name грузовой ящик")
add(MRegistry.DECORATIVE_CRATE.getBlock(color), "$name блок контейнера")
val nameAdj = name.replace("ый", "ым").replace("ой", "ым").replace("ий", "им").lowercase()
add(MItems.CARGO_CRATE_MINECARTS[color]!!, "Вагонетка с $nameAdj грузовым ящиком")
add(MEntityTypes.CARGO_CRATE_MINECARTS[color]!!, "Вагонетка с $nameAdj грузовым ящиком")
add(MRegistry.TRITANIUM_PRESSURE_PLATE.getBlock(color), "$nameF тритановая нажимная пластина")
add(MRegistry.TRITANIUM_PRESSURE_PLATE.getBlock(color), "description0", "Активируется только при наступлении игрока на неё")
add(MRegistry.TRITANIUM_PRESSURE_PLATE.getBlock(color), "description1", HIGH_BLAST_RESISTANCE)
add(MBlocks.TRITANIUM_DOOR[color]!!, "$name тритановая дверь")
add(MBlocks.TRITANIUM_DOOR[color]!!, "$nameF тритановая дверь")
add(MBlocks.TRITANIUM_DOOR[color]!!, "description0", HIGH_BLAST_RESISTANCE_DOOR)
add(MBlocks.TRITANIUM_DOOR[color]!!, "description1", FEELING_SAFE_NOW)
add(MBlocks.TRITANIUM_DOOR[color]!!, "description2", "Данный вариант выкрашен в $name")
@ -64,9 +61,7 @@ private fun decoratives(provider: MatteryLanguageProvider) {
add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "Тритановая нажимная пластина")
add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "description0", "Активируется только при наступлении игрока на неё")
add(MRegistry.TRITANIUM_PRESSURE_PLATE.block, "description1", HIGH_BLAST_RESISTANCE)
}
with(provider.russian) {
misc("computer_terminal_tooltip", "Может быть использован как кнопка, с оговоркой что он посылает сигнал блоку сзади, а не под ним")
misc("decorative", "Элемент декора")
@ -87,42 +82,51 @@ private fun decoratives(provider: MatteryLanguageProvider) {
add(MRegistry.DECORATIVE_CRATE.block, "Ржавый грузовой контейнер")
add(MRegistry.VENT.block, "Вентиляция")
add(MRegistry.VENT_ALTERNATIVE.block, "Альтернаятивная вентиляция")
add(MRegistry.VENT_ALTERNATIVE.block, "Альтернативная вентиляция")
for ((color, name) in provider.russianColors.mapped) {
val stripeName = name.replace("ый", "ой").replace("ий", "ей").lowercase()
add(MBlocks.TRITANIUM_STRIPED_BLOCK[color]!!, "Тритановый блок с $stripeName полоской")
add(MBlocks.TRITANIUM_STRIPED_STAIRS[color]!!, "Тритановые ступеньки с $stripeName полоской")
add(MBlocks.TRITANIUM_STRIPED_SLAB[color]!!, "Тритановая плита с $stripeName полоской")
add(MBlocks.TRITANIUM_STRIPED_WALL[color]!!, "Тритановая ограда с $stripeName полоской")
}
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_BLOCK.blocksWithColor) {
val (base, stripe) = colors
val baseName = provider.russianColors.mapped[base]!!
val stripeName = provider.russianColors.mapped[stripe]!!
val stripeName = provider.russianColors.mapped[stripe]!!.replace("ый", "ой").replace("ий", "ей").lowercase()
add(block, "$baseName-окрашенный $stripeName-ополосаченный тритановый блок")
add(block, "$baseName тритановый блок c $stripeName полоской")
}
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_STAIRS.blocksWithColor) {
val (base, stripe) = colors
val baseName = provider.russianColors.mapped[base]!!
val stripeName = provider.russianColors.mapped[stripe]!!
val baseName = provider.russianColors.mapped[base]!!.replace("ый", "ые").replace("ой", "ые").replace("ий", "ие")
val stripeName = provider.russianColors.mapped[stripe]!!.replace("ый", "ой").replace("ий", "ей").lowercase()
add(block, "$baseName-окрашенные $stripeName-ополосаченные тритановые ступеньки")
add(block, "$baseName тритановые ступеньки c $stripeName полоской")
}
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_SLAB.blocksWithColor) {
val (base, stripe) = colors
val baseName = provider.russianColors.mapped[base]!!
val stripeName = provider.russianColors.mapped[stripe]!!
val baseName = provider.russianColors.mapped[base]!!.replace("ый", "ая").replace("ой", "ые").replace("ий", "яя")
val stripeName = provider.russianColors.mapped[stripe]!!.replace("ый", "ой").replace("ий", "ей").lowercase()
add(block, "$baseName-окрашенная $stripeName-ополосаченная тритановая Плита")
add(block, "$baseName тритановая плита c $stripeName полоской")
}
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_WALL.blocksWithColor) {
val (base, stripe) = colors
val baseName = provider.russianColors.mapped[base]!!
val stripeName = provider.russianColors.mapped[stripe]!!
val baseName = provider.russianColors.mapped[base]!!.replace("ый", "ая").replace("ой", "ая").replace("ий", "яя")
val stripeName = provider.russianColors.mapped[stripe]!!.replace("ый", "ой").replace("ий", "ей").lowercase()
add(block, "$baseName-окрашенная $stripeName-ополосаченная тритановая ограда")
add(block, "$baseName тритановая ограда c $stripeName полоской")
}
}
}
@ -497,6 +501,11 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.MATTER_ENTANGLER, "Квантовый запутыватель материи")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.CRUDE]!!, "Самобытный энергетический кабель")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.REGULAR]!!, "Энергетический кабель")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.ADVANCED]!!, "Улучшенный энергетический кабель")
add(MBlocks.ENERGY_CABLES[CablesConfig.E.SUPERCONDUCTOR]!!, "Сверхпроводящий энергетический кабель")
addBlock(MBlocks.COBBLESTONE_GENERATOR.values, "Генератор булыжника")
add(MBlocks.INFINITE_WATER_SOURCE, "Неиссякаемый источник воды")
add(MBlocks.INFINITE_WATER_SOURCE, "desc", "Выталкивает воду в соседние блоки автоматически")
@ -537,9 +546,9 @@ private fun blocks(provider: MatteryLanguageProvider) {
addBlock(MBlocks.ENERGY_COUNTER.values, "desc3", "Собирает статистику о переданной через себя энергии;")
addBlock(MBlocks.ENERGY_COUNTER.values, "desc4", "Отображает текущую активность передачи энергии на своём экране")
add(MBlocks.ENERGY_COUNTER[null]!!, "Facing", "сторона входа: %s")
add(MBlocks.ENERGY_COUNTER[null]!!, "Switch", "сменить сторону входа")
add(MBlocks.ENERGY_COUNTER[null]!!, "Limit", "лимит ввода/вывода. -1 для отключения лимитов")
add(MBlocks.ENERGY_COUNTER[null]!!, "facing", "Сторона входа: %s")
add(MBlocks.ENERGY_COUNTER[null]!!, "switch", "Сменить сторону входа")
add(MBlocks.ENERGY_COUNTER[null]!!, "limit", "Лимит ввода/вывода. -1 для отключения лимитов")
addBlock(MBlocks.CHEMICAL_GENERATOR.values, "Химический генератор")
addBlock(MBlocks.CHEMICAL_GENERATOR.values, "desc", "Генерирует энергию сжигая твёрдое топливо")
@ -557,7 +566,7 @@ private fun blocks(provider: MatteryLanguageProvider) {
addBlock(MBlocks.POWERED_SMOKER.values, "desc", "Позволяет обрабатывать рецепты коптильни используя энергию")
addBlock(MBlocks.ENERGY_SERVO.values, "Энергетическая помпа")
addBlock(MBlocks.ENERGY_SERVO.values, "desc", "заряжает, разряжает и передаёт энергию между предметами")
addBlock(MBlocks.ENERGY_SERVO.values, "desc", "Заряжает, разряжает и передаёт энергию между предметами")
add(MBlocks.CARBON_FIBRE_BLOCK, "Блок углеродных трубок")
add(MBlocks.METAL_MESH, "Блок металлической сетки")
@ -576,15 +585,15 @@ private fun blocks(provider: MatteryLanguageProvider) {
add(MBlocks.GRAVITATION_STABILIZER, "Стабилизатор пространства-времени")
add(MBlocks.GRAVITATION_STABILIZER_LENS, "Линза стабилизатора пространства-времени")
add(MBlocks.GRAVITATION_STABILIZER, "Desc", "Уменьшает искажение пространства-времени сингулярностей")
add(MBlocks.GRAVITATION_STABILIZER, "Desc2", "Имейте ввиду, что несколько стабилизаторов создают экспоненциальный эффект")
add(MBlocks.GRAVITATION_STABILIZER, "Desc3", "Слишком слабое искажение пространства-времени приведёт к быстрому 'испарению' сингулярности!")
add(MBlocks.GRAVITATION_STABILIZER, "desc", "Уменьшает искажение пространства-времени сингулярностей")
add(MBlocks.GRAVITATION_STABILIZER, "desc2", "Имейте ввиду, что несколько стабилизаторов создают экспоненциальный эффект")
add(MBlocks.GRAVITATION_STABILIZER, "desc3", "Слишком слабое искажение пространства-времени приведёт к быстрому 'испарению' сингулярности!")
add(MBlocks.PHANTOM_ATTRACTOR, "Приманщик фантомов")
add(MBlocks.PHANTOM_ATTRACTOR, "Desc", "приманивает фантомов в ночное время")
add(MBlocks.PHANTOM_ATTRACTOR, "desc", "Приманивает фантомов в ночное время")
add(MBlocks.LABORATORY_LAMP, "Лабораторная лампа")
add(MBlocks.LABORATORY_LAMP, "Description", "освещает на несколько блоков в направлении своей лампы, с переключателем красного камня")
add(MBlocks.LABORATORY_LAMP, "description", "Освещает на несколько блоков в направлении своей лампы, с переключателем красного камня")
add(MBlocks.LABORATORY_LAMP_INVERTED, "Лабораторная лампа (инвентированный сигнал)")
add(MBlocks.DANGER_STRIPE_BLOCK, "Полоски 'опасность'")
add(MBlocks.METAL_BEAM, "Металлическая опора")
@ -701,9 +710,9 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.ELECTROMOTOR, "Электромотор")
add(MItems.MIRROR_COMPOUND, "Набор выплавки зеркала")
add(MItems.MIRROR, "Зеркало")
add(MItems.MIRROR, "description", "Я могу очень отчётливо видеть своё отражение в этом зеркале")
add(MItems.MIRROR, "desc", "Я могу очень отчётливо видеть своё отражение в этом зеркале")
add(MItems.REINFORCED_TRITANIUM_PLATE, "Укреплённая тритановая пластина")
add(MItems.REINFORCED_TRITANIUM_PLATE, "description", "Бронированная пластина, усиленная что бы выдержать большие кинетические силы")
add(MItems.REINFORCED_TRITANIUM_PLATE, "desc", "Бронированная пластина, усиленная чтобы выдержать большие кинетические силы")
add(MItems.CARBON_MESH, "Углеродная сетка")
add(MItems.GRAVITATIONAL_DISRUPTOR, "Маяк уравнения пространства-времени")

View File

@ -140,6 +140,20 @@ fun addTags(tagsProvider: TagsProvider) {
tagsProvider.items.Appender(MItemTags.TOOLS_HAMMERS).add(MItems.EXPLOSIVE_HAMMER)
tagsProvider.items.forge("tools").add(MItemTags.TOOLS_HAMMERS)
tagsProvider.items.Appender(ItemTags.DURABILITY_ENCHANTABLE)
.add(MItems.EXPLOSIVE_HAMMER)
.add(MItems.TRITANIUM_SHEARS)
.add(MItems.TRITANIUM_SHIELD)
tagsProvider.items.Appender(ItemTags.MINING_ENCHANTABLE)
.add(MItems.TRITANIUM_SHEARS)
tagsProvider.items.Appender(ItemTags.EQUIPPABLE_ENCHANTABLE)
.add(MItems.PORTABLE_GRAVITATION_STABILIZER)
tagsProvider.items.Appender(ItemTags.VANISHING_ENCHANTABLE)
.add(MItems.PORTABLE_GRAVITATION_STABILIZER)
tagsProvider.items.Appender(MItemTags.UPGRADES)
.add(MItems.MachineUpgrades.Basic.LIST)
.add(MItems.MachineUpgrades.Normal.LIST)

View File

@ -761,6 +761,11 @@ abstract class MatteryScreen<T : MatteryMenu>(menu: T, inventory: Inventory, tit
const val MAX_ROWS = 6
var lastScroll = 0
var lastRows by ClientConfig.GUI::EXOPACK_INVENTORY_ROWS
var lastRows: Int
get() = ClientConfig.GUI::EXOPACK_INVENTORY_ROWS.get()
set(value) {
ClientConfig.GUI::EXOPACK_INVENTORY_ROWS.set(value)
ClientConfig.spec.save()
}
}
}

View File

@ -13,6 +13,8 @@ import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.client.render.Widgets18
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel
import ru.dbotthepony.mc.otm.compat.itemborders.isItemBordersLoaded
import ru.dbotthepony.mc.otm.compat.itemborders.renderSlotBorder
import javax.annotation.Nonnull
import kotlin.math.roundToInt
@ -101,6 +103,14 @@ open class SlotPanel<out S : MatteryScreen<*>, out T : Slot>(
} else {
slotBackgroundEmpty?.render(graphics, 0f, 0f, canvasWidth = width, canvasHeight = height)
}
} else {
// TODO: pre и post ивенты отрисовки слотов для нормальной регистрации компатов? это супер костыль
if (isItemBordersLoaded) {
graphics.pose.pushPose()
graphics.pose.translate(-slot.x.toDouble() + 1.0, -slot.y.toDouble() + 1.0, 0.0)
renderSlotBorder(graphics, slot)
graphics.pose.popPose()
}
}
renderRegular(graphics, itemstack, countOverride)

View File

@ -0,0 +1,15 @@
package ru.dbotthepony.mc.otm.compat.itemborders
import com.anthonyhilyard.itemborders.ItemBorders
import net.minecraft.world.inventory.Slot
import net.neoforged.fml.ModList
import ru.dbotthepony.mc.otm.client.render.MGUIGraphics
val isItemBordersLoaded by lazy {
ModList.get().isLoaded("itemborders")
}
fun renderSlotBorder(graphics: MGUIGraphics, slot: Slot) {
check(isItemBordersLoaded) { "Item Borders is not loaded!" }
ItemBorders.renderBorder(graphics.pose, slot)
}

View File

@ -11,7 +11,8 @@ import ru.dbotthepony.mc.otm.core.math.defineDecimal
import ru.dbotthepony.mc.otm.core.util.WriteOnce
abstract class AbstractConfig(private val configName: String, private val type: ModConfig.Type = ModConfig.Type.SERVER) {
private var spec: ModConfigSpec by WriteOnce()
var spec: ModConfigSpec by WriteOnce()
private set
protected val builder = ModConfigSpec.Builder()
private var registered = false