From 0fb6e5c91b7ebbba28d978ec58d828938b2ee366 Mon Sep 17 00:00:00 2001 From: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Date: Sun, 21 Jul 2024 02:41:33 -0600 Subject: [PATCH 1/5] Lighters can no longer break blocks :minniola: (#1578) --- .../common/item/tool/behavior/LighterBehavior.java | 10 ++++++---- .../primitive/CharcoalPileIgniterMachine.java | 3 +++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LighterBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LighterBehavior.java index a9404d85e2..62baca9c53 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LighterBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LighterBehavior.java @@ -107,11 +107,13 @@ public InteractionResult onItemUseFirst(ItemStack itemStack, UseOnContext contex } BlockPos offset = context.getClickedPos().offset(context.getClickedFace().getNormal()); - context.getLevel().setBlock(offset, Blocks.FIRE.defaultBlockState(), Block.UPDATE_ALL_IMMEDIATE); - if (!context.getLevel().isClientSide) { - CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayer) player, offset, itemStack); + if (context.getLevel().isEmptyBlock(offset)) { + context.getLevel().setBlock(offset, Blocks.FIRE.defaultBlockState(), Block.UPDATE_ALL_IMMEDIATE); + if (!context.getLevel().isClientSide) { + CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayer) player, offset, itemStack); + } } - return InteractionResult.SUCCESS; + return InteractionResult.PASS; } return InteractionResult.FAIL; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java index 71dbb04298..7f5723d3ac 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/CharcoalPileIgniterMachine.java @@ -15,6 +15,7 @@ import com.gregtechceu.gtceu.common.item.tool.behavior.LighterBehavior; import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced; +import com.lowdragmc.lowdraglib.syncdata.annotation.RequireRerender; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -67,6 +68,8 @@ public class CharcoalPileIgniterMachine extends WorkableMultiblockMachine implem private int rDist = 0; @DescSynced private int hDist = 0; + @DescSynced + @RequireRerender private boolean isActive; private int progressTime = 0; private int maxTime = 0; From 107d8de215c8981e184cce17fea9a311a2dd377f Mon Sep 17 00:00:00 2001 From: DEv0on Date: Sun, 21 Jul 2024 11:21:05 +0200 Subject: [PATCH 2/5] Fix for death symptom implementation problem (#1560) Co-authored-by: screret <68943070+screret@users.noreply.github.com> --- .../tags/damage_type/bypasses_armor.json | 21 ++++++++++++++ .../tags/damage_type/is_explosion.json | 5 ++++ .../minecraft/tags/damage_type/is_fire.json | 5 ++++ .../tags/damage_type/is_lightning.json | 5 ++++ .../gtceu/data/forge/DataGenerators.java | 5 +++- .../gtceu/data/tags/DamageTagsLoader.java | 29 +++++++++++++++++++ .../gtceu/forge/ForgeCommonEventListener.java | 10 ++++--- 7 files changed, 75 insertions(+), 5 deletions(-) create mode 100644 src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json create mode 100644 src/generated/resources/data/minecraft/tags/damage_type/is_explosion.json create mode 100644 src/generated/resources/data/minecraft/tags/damage_type/is_fire.json create mode 100644 src/generated/resources/data/minecraft/tags/damage_type/is_lightning.json create mode 100644 src/main/java/com/gregtechceu/gtceu/data/tags/DamageTagsLoader.java diff --git a/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json b/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json new file mode 100644 index 0000000000..fc6bd8cfd1 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json @@ -0,0 +1,21 @@ +{ + "values": [ + "gtceu:medical_condition/none", + "gtceu:medical_condition/chemical_burns", + "gtceu:medical_condition/poison", + "gtceu:medical_condition/weak_poison", + "gtceu:medical_condition/irritant", + "gtceu:medical_condition/nausea", + "gtceu:medical_condition/carcinogen", + "gtceu:medical_condition/asbestosis", + "gtceu:medical_condition/arsenicosis", + "gtceu:medical_condition/silicosis", + "gtceu:medical_condition/berylliosis", + "gtceu:medical_condition/methanol_poisoning", + "gtceu:medical_condition/carbon_monoxide_poisoning", + "gtceu:heat", + "gtceu:chemical", + "gtceu:radiation", + "gtceu:turbine" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/damage_type/is_explosion.json b/src/generated/resources/data/minecraft/tags/damage_type/is_explosion.json new file mode 100644 index 0000000000..3d2e10b38f --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/damage_type/is_explosion.json @@ -0,0 +1,5 @@ +{ + "values": [ + "gtceu:explosion" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/damage_type/is_fire.json b/src/generated/resources/data/minecraft/tags/damage_type/is_fire.json new file mode 100644 index 0000000000..f1775877a7 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/damage_type/is_fire.json @@ -0,0 +1,5 @@ +{ + "values": [ + "gtceu:heat" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/damage_type/is_lightning.json b/src/generated/resources/data/minecraft/tags/damage_type/is_lightning.json new file mode 100644 index 0000000000..92841bab9a --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/damage_type/is_lightning.json @@ -0,0 +1,5 @@ +{ + "values": [ + "gtceu:electric" + ] +} \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/data/forge/DataGenerators.java b/src/main/java/com/gregtechceu/gtceu/data/forge/DataGenerators.java index 94d0319a71..96e0ce65a1 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/forge/DataGenerators.java +++ b/src/main/java/com/gregtechceu/gtceu/data/forge/DataGenerators.java @@ -10,6 +10,7 @@ import com.gregtechceu.gtceu.common.data.GTWorldgen; import com.gregtechceu.gtceu.common.data.forge.GTBiomeModifiers; import com.gregtechceu.gtceu.data.tags.BiomeTagsLoader; +import com.gregtechceu.gtceu.data.tags.DamageTagsLoader; import net.minecraft.core.RegistrySetBuilder; import net.minecraft.core.registries.Registries; @@ -41,7 +42,7 @@ public static void gatherData(GatherDataEvent event) { if (event.includeServer()) { var set = Set.of(GTCEu.MOD_ID); generator.addProvider(true, new BiomeTagsLoader(packOutput, registries, existingFileHelper)); - generator.addProvider(true, new DatapackBuiltinEntriesProvider( + DatapackBuiltinEntriesProvider provider = generator.addProvider(true, new DatapackBuiltinEntriesProvider( packOutput, registries, new RegistrySetBuilder() .add(Registries.DAMAGE_TYPE, GTDamageTypes::bootstrap) @@ -50,6 +51,8 @@ packOutput, registries, new RegistrySetBuilder() .add(Registries.DENSITY_FUNCTION, GTWorldgen::bootstrapDensityFunctions) .add(ForgeRegistries.Keys.BIOME_MODIFIERS, GTBiomeModifiers::bootstrap), set)); + generator.addProvider(true, + new DamageTagsLoader(packOutput, provider.getRegistryProvider(), existingFileHelper)); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/data/tags/DamageTagsLoader.java b/src/main/java/com/gregtechceu/gtceu/data/tags/DamageTagsLoader.java new file mode 100644 index 0000000000..f1c32331e1 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/data/tags/DamageTagsLoader.java @@ -0,0 +1,29 @@ +package com.gregtechceu.gtceu.data.tags; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.data.damagesource.DamageTypeData; + +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.minecraft.data.tags.TagsProvider; +import net.minecraft.world.damagesource.DamageType; +import net.minecraftforge.common.data.ExistingFileHelper; + +import org.jetbrains.annotations.Nullable; + +import java.util.concurrent.CompletableFuture; + +public class DamageTagsLoader extends TagsProvider { + + public DamageTagsLoader(PackOutput arg, CompletableFuture completableFuture, + @Nullable ExistingFileHelper existingFileHelper) { + super(arg, Registries.DAMAGE_TYPE, completableFuture, GTCEu.MOD_ID, existingFileHelper); + } + + @Override + protected void addTags(HolderLookup.Provider provider) { + DamageTypeData.allInNamespace(GTCEu.MOD_ID).forEach(damageTypeData -> damageTypeData.tags + .forEach(damageTypeTagKey -> tag(damageTypeTagKey).add(damageTypeData.key))); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java index 6bc0819dff..fd5c9778e7 100644 --- a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java @@ -156,12 +156,9 @@ public static void tickPlayerInventoryHazards(TickEvent.PlayerTickEvent event) { return; } - if (!ConfigHolder.INSTANCE.gameplay.hazardsEnabled) return; - Player player = event.player; IMedicalConditionTracker tracker = GTCapabilityHelper.getMedicalConditionTracker(player); - IItemHandler inventory = player.getCapability(ForgeCapabilities.ITEM_HANDLER, null).resolve().orElse(null); - if (tracker == null || inventory == null) { + if (tracker == null) { return; } if (!ConfigHolder.INSTANCE.gameplay.hazardsEnabled) { @@ -170,6 +167,11 @@ public static void tickPlayerInventoryHazards(TickEvent.PlayerTickEvent event) { } return; } + + IItemHandler inventory = player.getCapability(ForgeCapabilities.ITEM_HANDLER, null).resolve().orElse(null); + if (inventory == null) { + return; + } tracker.tick(); for (int i = 0; i < inventory.getSlots(); ++i) { From 90978b6d0f2425a1e5b7fa9b9d3ac054ac78d46a Mon Sep 17 00:00:00 2001 From: Georgy <32033856+stivosha@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:39:01 +0500 Subject: [PATCH 3/5] Fix: corrected a mistake in the word "mv_input_hatch" in Russian (#1585) Co-authored-by: screret <68943070+screret@users.noreply.github.com> --- src/main/resources/assets/gtceu/lang/ru_ru.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/gtceu/lang/ru_ru.json b/src/main/resources/assets/gtceu/lang/ru_ru.json index e00b4a1d26..766d13ec3b 100644 --- a/src/main/resources/assets/gtceu/lang/ru_ru.json +++ b/src/main/resources/assets/gtceu/lang/ru_ru.json @@ -685,7 +685,7 @@ "block.gtceu.mv_gas_turbine": "§bУлучшенная газовая турбина §r", "block.gtceu.mv_hermetic_casing": "Герметичный корпус II", "block.gtceu.mv_input_bus": "§bПредметный входной люк (MV)§r", - "block.gtceu.mv_input_hatch": "§bПредметный выходной люк (MV)§r", + "block.gtceu.mv_input_hatch": "§bЖидкостный входной люк (MV)§r", "block.gtceu.mv_item_passthrough_hatch": "Предметный сквозной люк (§bMV§r)", "block.gtceu.mv_kinetic_input_box": "§bУлучшенный кинетический входной разъем §r", "block.gtceu.mv_kinetic_mixer": "§bУлучшенный кинетический смеситель §r", From f0a8e25d5d463500c1dc333f0ff27f2ab5803303 Mon Sep 17 00:00:00 2001 From: marisathewitch Date: Sun, 21 Jul 2024 16:46:41 +0400 Subject: [PATCH 4/5] Update ru_ru lang (#1590) Co-authored-by: Anonymous Co-authored-by: Western01 Co-authored-by: screret <68943070+screret@users.noreply.github.com> --- .../resources/assets/gtceu/lang/ru_ru.json | 340 ++++++++++++++++-- 1 file changed, 302 insertions(+), 38 deletions(-) diff --git a/src/main/resources/assets/gtceu/lang/ru_ru.json b/src/main/resources/assets/gtceu/lang/ru_ru.json index 766d13ec3b..3b19587f85 100644 --- a/src/main/resources/assets/gtceu/lang/ru_ru.json +++ b/src/main/resources/assets/gtceu/lang/ru_ru.json @@ -1857,13 +1857,13 @@ "cover.advanced_energy_detector.use_percent.enabled.2": "Переключение между использованием цифровых значений EU или процентов для сравнения мин./макс. с подключенным накопителем энергии.", "cover.advanced_fluid_detector.invert.disabled.0": "Вывод: Обычный", "cover.advanced_fluid_detector.invert.disabled.2": "Переключите, чтобы инвертировать логику красного камня", - "cover.advanced_fluid_detector.invert.disabled.3": "По умолчанию красный камень перестает испускать сигнал, когда Л жидкости меньше мин., и начинает испускать сигнал, при превышении мин. кол-ва Л жидкости до установленного макс", + "cover.advanced_fluid_detector.invert.disabled.3": "По умолчанию красный камень перестает испускать сигнал, когда мВ жидкости меньше мин., и начинает испускать сигнал, при превышении мин. кол-ва мВ жидкости до установленного макс.", "cover.advanced_fluid_detector.invert.enabled.0": "Вывод: Инвертировано", "cover.advanced_fluid_detector.invert.enabled.2": "Переключите, чтобы инвертировать логику красного камня", - "cover.advanced_fluid_detector.invert.enabled.3": "По умолчанию красный камень перестает испускать сигнал, когда Л жидкости меньше мин., и начинает испускать сигнал, при превышении мин. кол-ва Л жидкости до установленного макс", + "cover.advanced_fluid_detector.invert.enabled.3": "По умолчанию красный камень перестает испускать сигнал, когда мВ жидкости меньше мин., и начинает испускать сигнал, при превышении мин. кол-ва мВ жидкости до установленного макс.", "cover.advanced_fluid_detector.label": "Улучшенный детектор жидкости", - "cover.advanced_fluid_detector.max": "Макс. жид. (Л)", - "cover.advanced_fluid_detector.min": "Мин. жид. (Л)", + "cover.advanced_fluid_detector.max": "Макс. жид. (мВ)", + "cover.advanced_fluid_detector.min": "Мин. жид. (мВ)", "cover.advanced_item_detector.invert.disabled.0": "Вывод: Обычный", "cover.advanced_item_detector.invert.disabled.2": "Переключите, чтобы инвертировать логику красного камня", "cover.advanced_item_detector.invert.disabled.3": "По умолчанию красный камень перестает испускать сигнал, когда кол-во предметов меньше мин., и начинает испускать сигнал, при превышении мин. кол-ва предметов до установленного макс", @@ -1873,8 +1873,8 @@ "cover.advanced_item_detector.label": "Улучшенный детектор предметов", "cover.advanced_item_detector.max": "Макс. пред.", "cover.advanced_item_detector.min": "Мин. пред.", - "cover.bucket.mode.bucket": "кЛ/с", - "cover.bucket.mode.milli_bucket": "Л/c", + "cover.bucket.mode.bucket": "Б", + "cover.bucket.mode.milli_bucket": "мВ", "cover.conveyor.blocks_input.disabled.0": "Если этот параметр включен, предметы не будут вставляться, когда улучшение настроено на вытягивание предметов из инвентаря в трубу.", "cover.conveyor.blocks_input.disabled.1": "§cОтключен", "cover.conveyor.blocks_input.enabled.0": "Если этот параметр включен, предметы не будут вставляться, когда улучшение настроено на вытягивание предметов из инвентаря в трубу.", @@ -2115,7 +2115,7 @@ "gtceu.creative.energy.source": "Источник", "gtceu.creative.energy.voltage": "Вольтаж", "gtceu.creative.tank.fluid": "Жидкость", - "gtceu.creative.tank.mbpc": "mB за цикл", + "gtceu.creative.tank.mbpc": "мВ за цикл", "gtceu.creative.tank.tpc": "Тиков в цикле", "gtceu.creative_tooltip.1": "§7Вам нужен", "gtceu.creative_tooltip.2": " Творческий режим", @@ -2130,7 +2130,7 @@ "gtceu.extractor": "Экстрактор", "gtceu.extruder": "Экструдер", "gtceu.fermenter": "Ферментатор", - "gtceu.fluid.amount": "§9Количество: %d/%d мЛ", + "gtceu.fluid.amount": "§9Количество: %d/%d мВ", "gtceu.fluid.click_combined": "§7Нажмите с хралищем для жидкости, чтобы §bзаполнить §7или §cопустошить §7резервуар.", "gtceu.fluid.click_to_empty": "§7Нажмите с хралищем для жидкости, чтобы §bзаполнить §7или §cопустошить §7резервуар.", "gtceu.fluid.click_to_fill": "§7Нажмите с хралищем для жидкости, чтобы §bзаполнить §7резервуар.", @@ -2149,7 +2149,7 @@ "gtceu.fluid.type_acid.tooltip": "§6Кислота! Соблюдайте осторожность!", "gtceu.fluid_heater": "Жидкостный нагреватель", "gtceu.fluid_pipe.acid_proof": "§6Может хранить кислоты", - "gtceu.fluid_pipe.capacity": "§9Вместимость: §f%d Л", + "gtceu.fluid_pipe.capacity": "§9Вместимость: §f%d мВ", "gtceu.fluid_pipe.channels": "§eКаналов: §f%d", "gtceu.fluid_pipe.cryo_proof": "§6Может хранить криогенику", "gtceu.fluid_pipe.gas_proof": "§6Может хранить газы", @@ -2195,7 +2195,7 @@ "gtceu.gui.fluid_amount": "Кол. жидкости:", "gtceu.gui.fluid_auto_input.tooltip.disabled": "Авто. вывод жидкости отключен", "gtceu.gui.fluid_auto_input.tooltip.enabled": "Авто. вывод жидкости включен", - "gtceu.gui.fluid_auto_output.allow_input.disabled": "запрещает ввод жидкости со стороны выхода", + "gtceu.gui.fluid_auto_output.allow_input.disabled": "Запрещает ввод жидкости со стороны выхода", "gtceu.gui.fluid_auto_output.allow_input.enabled": "Разрешает ввод жидкости со стороны выхода", "gtceu.gui.fluid_auto_output.tooltip.disabled": "Авто. вывод жидкости отключен", "gtceu.gui.fluid_auto_output.tooltip.enabled": "Авто. вывод жидкости включен", @@ -2206,7 +2206,7 @@ "gtceu.gui.fuel_amount": "Кол. топлива:", "gtceu.gui.item_auto_input.tooltip.disabled": "Авто. вывод предметов отключен", "gtceu.gui.item_auto_input.tooltip.enabled": "Авто. вывод предметов включен", - "gtceu.gui.item_auto_output.allow_input.disabled": "запрещает ввод предметов со стороны выхода", + "gtceu.gui.item_auto_output.allow_input.disabled": "Запрещает ввод предметов со стороны выхода", "gtceu.gui.item_auto_output.allow_input.enabled": "Разрешает ввод предметов со стороны выхода", "gtceu.gui.item_auto_output.tooltip.disabled": "Авто. вывод предметов отключен", "gtceu.gui.item_auto_output.tooltip.enabled": "Авто. вывод предметов включен", @@ -2589,7 +2589,7 @@ "gtceu.machine.fluid_solidifier.mv.tooltip": "§7Охлаждает жидкости до твёрдого состояния", "gtceu.machine.fluid_solidifier.uv.tooltip": "§7Окаменеватель жидкостей", "gtceu.machine.fluid_solidifier.zpm.tooltip": "§7Не льдогенератор", - "gtceu.machine.fluid_tank.fluid": "Содержит %s mB %s", + "gtceu.machine.fluid_tank.fluid": "Содержит %s мВ %s", "gtceu.machine.fluid_tank.max_multiblock": "Максимальный размер: %dx%dx%d", "gtceu.machine.forge_hammer.ev.tooltip": "§7Стоп... Время Хаммера!", "gtceu.machine.forge_hammer.hv.tooltip": "§7Стоп... Время Хаммера!", @@ -2638,8 +2638,8 @@ "gtceu.machine.large_boiler.tungstensteel.tooltip": "Как вообще заправлять эту штуку?", "gtceu.machine.large_chemical_reactor.tooltip": "Реакторный чёрный ящик", "gtceu.machine.large_combustion_engine.tooltip": "Камера воспламенения топлива", - "gtceu.machine.large_combustion_engine.tooltip.boost_extreme": "Подавайте §e80 л/с§7 жидкого кислорода для получения до §f%s§7 EU/t при §а2x§7 расходе топлива.", - "gtceu.machine.large_combustion_engine.tooltip.boost_regular": "Подавайте §f20 Л/с§7 кислорода для получения до §f%s§7 EU/t при §а2x§7 расходе топлива.", + "gtceu.machine.large_combustion_engine.tooltip.boost_extreme": "Подавайте §e80 мВ/с§7 жидкого кислорода для получения до §f%s§7 EU/т при §а2x§7 расходе топлива.", + "gtceu.machine.large_combustion_engine.tooltip.boost_regular": "Подавайте §f20 мВ/с§7 кислорода для получения до §f%s§7 EU/т при §а2x§7 расходе топлива.", "gtceu.machine.large_miner.ev.tooltip": "Копает руду за вас", "gtceu.machine.large_miner.iv.tooltip": "Выкапыватель биомов", "gtceu.machine.large_miner.luv.tooltip": "Территориальный выкапыватель", @@ -2701,7 +2701,7 @@ "gtceu.machine.me.item_export.tooltip": "Отправляет предметы напрямую в ME Сеть.", "gtceu.machine.me.item_import.tooltip": "Получает предметы из сети ME автоматически.", "gtceu.machine.miner.chunkradius": "Радиус чанков: %d", - "gtceu.machine.miner.fluid_usage": "Использует §f%d Л/т §7 §fжидкости (%s)§7, вдвое больше если ускорена.", + "gtceu.machine.miner.fluid_usage": "Использует §f%d мВ/т §7 §fжидкости (%s)§7, вдвое больше если ускорена.", "gtceu.machine.miner.minex": "mX: %d", "gtceu.machine.miner.per_block": "§7тратит §f%dсек §7на блок", "gtceu.machine.miner.radius": "Радиус: %d", @@ -2923,7 +2923,7 @@ "gtceu.multiblock.large_boiler.heat_time_tooltip": "§7Занимает §f%d секунды §7для нагрева", "gtceu.multiblock.large_boiler.max_temperature": "Макс. Температура: %dK, Выход пара: %dмВ/т", "gtceu.multiblock.large_boiler.rate_tooltip": "§7Производит §f%d Л §7Пара с §f1 угля", - "gtceu.multiblock.large_boiler.steam_output": "Выход пара: %s Л/т", + "gtceu.multiblock.large_boiler.steam_output": "Выход пара: %s мВ/т", "gtceu.multiblock.large_boiler.temperature": "Температура: %sK / %sK", "gtceu.multiblock.large_boiler.throttle": "Дроссель: %d", "gtceu.multiblock.large_boiler.throttle.tooltip": "Котел может производить меньше пара и потреблять меньше топлива (эффективность не теряется, не влияет на время нагрева)", @@ -2998,14 +2998,14 @@ "gtceu.multiblock.primitive_blast_furnace.bronze.description": "Примитивная доменная печь (ПДП) - это многоблочная структура, используемая для изготовления стали в ранней стадии игры. Не очень быстрая, но обеспечивает вас сталью на первое время.", "gtceu.multiblock.primitive_water_pump.description": "Примитивная водяная помпа — это многоблочная структура до Паровой Эпохи, который собирает воду раз в секунду, в зависимости от биома, в котором он находится. Он может использовать насос, выходной люк ULV или LV, увеличивая кол-во воды от уровня. Выполняется по формуле: Коэф. биома * Множитель люка.", "gtceu.multiblock.primitive_water_pump.extra1.0": "Коэф. биома:", - "gtceu.multiblock.primitive_water_pump.extra1.1": " Океан, Река: 1000 Л/с", - "gtceu.multiblock.primitive_water_pump.extra1.2": " Болото: 800 Л/с", - "gtceu.multiblock.primitive_water_pump.extra1.3": " Джунгли: 350 Л/с", - "gtceu.multiblock.primitive_water_pump.extra1.4": " Снежный: 300 Л/с", - "gtceu.multiblock.primitive_water_pump.extra1.5": " Равнины, Лес: 250 Л/с", - "gtceu.multiblock.primitive_water_pump.extra1.6": " Тайга : 175 Л/с", - "gtceu.multiblock.primitive_water_pump.extra1.7": " Пляж: 170 Л/с", - "gtceu.multiblock.primitive_water_pump.extra1.8": " Другое: 100 Л/с", + "gtceu.multiblock.primitive_water_pump.extra1.1": " Океан, Река: 1000 мВ/с", + "gtceu.multiblock.primitive_water_pump.extra1.2": " Болото: 800 мВ/с", + "gtceu.multiblock.primitive_water_pump.extra1.3": " Джунгли: 350 мВ/с", + "gtceu.multiblock.primitive_water_pump.extra1.4": " Снежный: 300 мВ/с", + "gtceu.multiblock.primitive_water_pump.extra1.5": " Равнины, Лес: 250 мВ/с", + "gtceu.multiblock.primitive_water_pump.extra1.6": " Тайга : 175 мВ/с", + "gtceu.multiblock.primitive_water_pump.extra1.7": " Пляж: 170 мВ/с", + "gtceu.multiblock.primitive_water_pump.extra1.8": " Другое: 100 мВ/с", "gtceu.multiblock.primitive_water_pump.extra2.0": "Множители люка:", "gtceu.multiblock.primitive_water_pump.extra2.1": " Люк насоса: 1x", "gtceu.multiblock.primitive_water_pump.extra2.2": " Выходной люк ULV: 2x", @@ -3018,7 +3018,7 @@ "gtceu.multiblock.require_steam_parts": "Требует Паровые люки!", "gtceu.multiblock.running": "Работает отлично.", "gtceu.multiblock.steam.low_steam": "Недостаточно пара для работы!", - "gtceu.multiblock.steam.steam_stored": "Пар: %s / %s mB", + "gtceu.multiblock.steam.steam_stored": "Пар: %s / %s mВ", "gtceu.multiblock.steam_.duration_modifier": "Работает в §f1.5x §7раза медленнее, независимо от числа предметов.", "gtceu.multiblock.steam_grinder.description": "Многоблочный измельчитель в паровой эпохе. Требует как минимум 14 бронзовых машинных корпусов. Может использовать только паровые люки.", "gtceu.multiblock.steam_oven.description": "Мультиплавильня в паровой эпохе. Требует как минимум 6 бронзовых машинных корпусов. Может использовать только паровые люки. Паровой люк должен находится на нижнем слое и он может быть только один.", @@ -3147,14 +3147,14 @@ "gtceu.universal.tooltip.amperage_out": "§eСила генерируемого тока: §f%dА", "gtceu.universal.tooltip.amperage_out_till": "§eГенерирует ток до: §f%dА", "gtceu.universal.tooltip.base_production_eut": "§eПроизводит: §f%d EU/т", - "gtceu.universal.tooltip.base_production_fluid": "§eПроизводит: §f%d Л/т", + "gtceu.universal.tooltip.base_production_fluid": "§eПроизводит: §f%d мВ/т", "gtceu.universal.tooltip.chunk_mode": "Режим Чанков: ", "gtceu.universal.tooltip.energy_storage_capacity": "§cЭнергоемкость: §f%d EU", "gtceu.universal.tooltip.energy_tier_range": "§aДопустимые уровни напряжения: §f%s §f- %s", - "gtceu.universal.tooltip.fluid_storage_capacity": "§9Объем жидкости: §f%d Л", - "gtceu.universal.tooltip.fluid_storage_capacity_mult": "§9Объем жидкости: §f%d §7Хранилища, §f%d Л §7каждое", - "gtceu.universal.tooltip.fluid_stored": "§dОбъем жидкости: §f%s, %d Л", - "gtceu.universal.tooltip.fluid_transfer_rate": "§bСкорость передачи: §f%d Л/т", + "gtceu.universal.tooltip.fluid_storage_capacity": "§9Объем жидкости: §f%d мВ", + "gtceu.universal.tooltip.fluid_storage_capacity_mult": "§9Объем жидкости: §f%d §7Хранилища, §f%d мВ §7каждое", + "gtceu.universal.tooltip.fluid_stored": "§dОбъем жидкости: §f%s, %d мВ", + "gtceu.universal.tooltip.fluid_transfer_rate": "§bСкорость передачи: §f%d мВ/т", "gtceu.universal.tooltip.item_storage_capacity": "§6Слоты: §f%d", "gtceu.universal.tooltip.item_storage_total": "§6Вместимость: §f%d предметов", "gtceu.universal.tooltip.item_stored": "§6Вместимость: §f%s, %d предметов", @@ -3164,15 +3164,15 @@ "gtceu.universal.tooltip.max_voltage_in_out": "§aМаксимальное напряжение: §f%d EU/t (%s§f)", "gtceu.universal.tooltip.max_voltage_out": "§aМаксимальное выдаваемое напряжение: §f%d (%s§f)", "gtceu.universal.tooltip.parallel": "§dПаралеллей: §f%d", - "gtceu.universal.tooltip.produces_fluid": "§eПроизводит: §f%d Л/т", + "gtceu.universal.tooltip.produces_fluid": "§eПроизводит: §f%d мВ/т", "gtceu.universal.tooltip.requires_redstone": "§4Требуется сигнал Красного камня", "gtceu.universal.tooltip.silk_touch": "Шелковое касание: ", "gtceu.universal.tooltip.terrain_resist": "Эта машина не взорвется", - "gtceu.universal.tooltip.uses_per_hour_lubricant": "Использует §f%d Л/ч §7Смазки когда работает", + "gtceu.universal.tooltip.uses_per_hour_lubricant": "Использует §f%d мВ/ч §7Смазки когда работает", "gtceu.universal.tooltip.uses_per_op": "Использует §f%d EU/операцию", "gtceu.universal.tooltip.uses_per_second": "Потребляет §f%d EU/с §7когда работает", "gtceu.universal.tooltip.uses_per_tick": "Потребляет §f%d EU/т §7когда работает", - "gtceu.universal.tooltip.uses_per_tick_steam": "Потребляет §f%d Л/т §7 Пара когда работает", + "gtceu.universal.tooltip.uses_per_tick_steam": "Потребляет §f%d мВ/т §7 Пара когда работает", "gtceu.universal.tooltip.voltage_in": "§aПотребляемое напряжение: §f%d EU/т (%s§f)", "gtceu.universal.tooltip.voltage_in_out": "§aНапряжение: §f%d EU/т (%s§f)", "gtceu.universal.tooltip.voltage_out": "§aВыдаваемое напряжение: §f%d EU/т (%s§f)", @@ -6561,7 +6561,7 @@ "behavior.portable_scanner.multiblock_maintenance": "Проблемы: %s", "behavior.portable_scanner.position": "----- X: %s Y: %s Z: %s D: %s -----", "behavior.portable_scanner.state": "%s: %s", - "behavior.portable_scanner.tank": "Резервуар %s: %s л / %s л %s", + "behavior.portable_scanner.tank": "Резервуар %s: %s мВ / %s мВ %s", "behavior.portable_scanner.tanks_empty": "Все резервуары пусты", "behavior.portable_scanner.workable_production": "Примерно производит: %s EU/т при %s A", "behavior.portable_scanner.workable_progress": "Прогресс: %s с / %s с", @@ -6691,7 +6691,7 @@ "gtceu.machine.hpca.component_type.computation_cooling": "§cТребуется до: §f%d Охлаждения", "gtceu.machine.hpca.component_type.computation_cwut": "§9Вычисляет: §f%d CWU/t", "gtceu.machine.hpca.component_type.cooler_active": "§bТип охлаждения: §fАктивное", - "gtceu.machine.hpca.component_type.cooler_active_coolant": "§cТребуется до: §f%d Л/t %s", + "gtceu.machine.hpca.component_type.cooler_active_coolant": "§cТребуется до: §f%d мВ/т %s", "gtceu.machine.hpca.component_type.cooler_cooling": "§aОбеспечивает: §f%d Охлаждения", "gtceu.machine.hpca.component_type.cooler_passive": "§bТип охлаждения: §fПассивное", "gtceu.machine.hpca.component_type.damaged": "Может быть повреждено при перегреве HPCA!", @@ -6758,8 +6758,8 @@ "gtceu.scanner": "Сканер", "gtceu.top.progress_sec": " / %s сек", "gtceu.top.progress_tick": " / %s т", - "gtceu.universal.kiloliters": "%s кЛ", - "gtceu.universal.liters": "%s Л", + "gtceu.universal.kiloliters": "%s В", + "gtceu.universal.liters": "%s мВ", "item.gtceu.data_module": "Модуль данных", "item.gtceu.uhv_emitter": "Эмиттер (§4UHV§r)", "item.gtceu.uiv_emitter": "Эмиттер (§2UIV§r)", @@ -7022,5 +7022,269 @@ "item.gtceu.mask_filter": "Фильтр противогаза", "material.gtceu.activated_carbon": "Активированный уголь", "gtceu.hazard.corrosive": "§6Коррозия", - "gtceu.hazard.contact_poison": "§5Яд" + "gtceu.hazard.contact_poison": "§5Яд", + "behavior.portable_scanner.environmental_hazard": "Загрязнение окр. среды в чанке: %s§r - %s ppm", + "block.gtceu.cyan_borderless_lamp": "Бирюзовая лампа (Без границ)", + "block.gtceu.lamp.tooltip.inverted": "Инверт.", + "behavior.portable_scanner.environmental_hazard.nothing": "Загрязнение окр. среды в чанке: §6Ничего§r", + "block.gtceu.brown_borderless_lamp": "Коричневая лампа (Без границ)", + "block.gtceu.gray_borderless_lamp": "Серая лампа (Без границ)", + "command.gtceu.medical_condition.get": "У игрока %s следующие заболевания:", + "block.gtceu.the_nether_marker": "Нижний мир", + "compass.node.gtceu.generation/blackstone": "Чернит", + "block.gtceu.evaporation_plant": "Градирня", + "material.gtceu.potassium_sulfate": "Сульфат калия", + "behavior.portable_scanner.local_hazard": "Опасность в области: %s§r - %s ppm", + "behavior.portable_scanner.local_hazard.nothing": "Опасность в области: §6Ничего§r", + "block.gtceu.black_borderless_lamp": "Черная лампа (Без границ)", + "block.gtceu.blue_borderless_lamp": "Синяя лампа (Без границ)", + "block.gtceu.green_borderless_lamp": "Зеленая лампа (Без границ)", + "block.gtceu.lamp.tooltip.no_bloom": "Без блика", + "block.gtceu.lamp.tooltip.no_light": "Без Света", + "command.gtceu.medical_condition.get.element.permanent": "%s§r: %s сек. (Постоянно)", + "command.gtceu.medical_condition.get.element": "%s§r: %s сек.", + "command.gtceu.medical_condition.get.empty": "У игрока %s нет никаких заболеваний.", + "material.gtceu.calcium_hydroxide": "Гидроксид кальция", + "material.gtceu.dichloroethane": "Дихлорэтан", + "material.gtceu.diethylenetriamine": "Диэтилентриамин", + "material.gtceu.diethylenetriaminepentaacetic_acid": "Диэтилентриаминпентауксусная кислота", + "material.gtceu.dilute_iodine_solution": "Разбавленный раствор йода", + "material.gtceu.debrominated_brine": "Дебромированный соляной раствор", + "material.gtceu.formamide": "Формамид", + "material.gtceu.glycolonitrile": "Гликолонитрил", + "material.gtceu.hot_alkaline_debrominated_brine": "Горячий щелочной дебромированный соляной раствор", + "material.gtceu.hot_brine": "Горячий соляной раствор", + "material.gtceu.paracetamol": "Парацетамол", + "material.gtceu.potassium_cyanide": "Цианистый калий", + "material.gtceu.potassium_ferrocyanide": "Ферроцианид калия", + "material.gtceu.potassium_hydroxide": "Гидроксид калия", + "material.gtceu.potassium_iodide": "Йодистый калий", + "material.gtceu.sodium_nitrite": "Нитрит натрия", + "material.gtceu.iodide": "Йодид", + "material.gtceu.iodine_solution": "Раствор йода", + "death.attack.gtceu.medical_condition/poison": "%s забыл что яды ядовиты", + "material.gtceu.acetic_anhydride": "Уксусный ангидрид", + "material.gtceu.calcium_carbonate": "Карбонат кальция", + "material.gtceu.concentrated_bromine_solution": "Концентрированный раствор брома", + "material.gtceu.formaldehyde": "Формальдегид", + "material.gtceu.formic_acid": "Муравьиная кислота", + "material.gtceu.aminophenol": "Аминофенол", + "material.gtceu.calcium_ferrocyanide": "Ферроцианид кальция", + "material.gtceu.diethylenetriamine_pentaacetonitrile": "Диэтилентриамин-пента", + "material.gtceu.hydrogen_cyanide": "Синильная кислота", + "material.gtceu.iron_ii_chloride": "Хлорид железа (II)", + "material.gtceu.potassium_carbonate": "Карбонат калия", + "material.gtceu.prussian_blue": "Берлинская лазурь", + "material.gtceu.rad_away": "Антирадин", + "block.gtceu.brittle_charcoal": "Хрупкий древесный уголь", + "block.gtceu.charcoal_pile_igniter": "Воспламенитель угольной ямы", + "block.gtceu.ev_air_scrubber": "§5Улучшенный очиститель воздуха III§r", + "block.gtceu.huge_duct_pipe": "Огромная труба воздуховода", + "block.gtceu.hv_air_scrubber": "§6Улучшенный очиститель воздуха II§r", + "block.gtceu.hv_buffer": "§6Улучшенный буфер II§r", + "block.gtceu.iv_input_buffer": "Вводной буфер (§9IV§r)", + "block.gtceu.iv_output_buffer": "Выводной буфер (§9IV§r)", + "block.gtceu.light_gray_borderless_lamp": "Светло-серая лампа (Без границ)", + "block.gtceu.lime_borderless_lamp": "Лаймовая лампа (Без границ)", + "block.gtceu.luv_input_buffer": "Вводной буфер (§dLuV§r)", + "block.gtceu.luv_output_buffer": "Выводной буфер (§dLuV§r)", + "block.gtceu.lv_air_scrubber": "Обычный очиститель воздуха §r", + "block.gtceu.lv_buffer": "Обычный буфер §r", + "block.gtceu.max_input_buffer": "Вводной буфер (§c§lMAX§r)", + "block.gtceu.orange_borderless_lamp": "Оранжевая лампа (Без границ)", + "block.gtceu.overworld_marker": "Верхний мир", + "block.gtceu.purple_borderless_lamp": "Фиолетовая лампа (Без границ)", + "block.gtceu.reservoir_hatch": "Люк резервуара", + "block.gtceu.small_duct_pipe": "Маленькая труба воздуховода", + "block.gtceu.uhv_input_buffer": "Вводной буфер (§4UHV§r)", + "block.gtceu.uiv_output_buffer": "Выводной буфер (§2UIV§r)", + "block.gtceu.uxv_output_buffer": "Выводной буфер (§eUXV§r)", + "block.gtceu.zpm_input_buffer": "Вводной буфер (§cZPM§r)", + "block.gtceu.zpm_output_buffer": "Выводной буфер (§cZPM§r)", + "compass.node.gtceu.machines/air_scrubber": "Очиститель воздуха", + "compass.node.gtceu.parts/reservoir_hatch": "Люк резервуара", + "config.gtceu.option.enableCompass": "enableCompass", + "config.gtceu.option.meHatchEnergyUsage": "meHatchEnergyUsage", + "config.gtceu.option.orderedAssemblyLineFluids": "orderedAssemblyLineFluids", + "config.gtceu.option.orderedAssemblyLineItems": "orderedAssemblyLineItems", + "gtceu.machine.buffer.import.tooltip": "Ввод Предметов и Жидкостей для многоблочной структуры", + "gtceu.medical_condition.antidote.description.effect_removed.all": "Убирает все последствия текущих заболеваний", + "gtceu.medical_condition.antidote.description.effect_removed": "Убирает %s%% последствий текущих заболеваний", + "gtceu.medical_condition.antidote.description_shift": "§aЛечит следующие заболевания:", + "gtceu.medical_condition.antidote.description": "§aАнтидот §7Зажмите Shift, чтобы просмотреть подробную информацию", + "gtceu.medical_condition.arsenicosis": "§bОтравление мышьяком", + "gtceu.medical_condition.asbestosis": "§dАсбестоз", + "gtceu.medical_condition.berylliosis": "§5Бериллиоз", + "gtceu.medical_condition.carcinogen": "§eКанцерогенный", + "gtceu.medical_condition.chemical_burns": "§5Химический ожог", + "gtceu.medical_condition.description_shift": "§l§cОПАСНЫЙ:", + "gtceu.medical_condition.methanol_poisoning": "§6Отравление метанолом", + "gtceu.medical_condition.nausea": "§3Тошнотворный", + "gtceu.medical_condition.none": "§2Не опасный", + "gtceu.medical_condition.poison": "§2Ядовитый", + "gtceu.medical_condition.silicosis": "§1Силикоз", + "gtceu.medical_condition.weak_poison": "§aСлабо ядовитый", + "gtceu.recipe.total_computation": "Вычисление: %s CWU", + "gtceu.subtitle.assembler": "Сборщик собирает", + "gtceu.subtitle.bath": "Ванна шипит", + "gtceu.subtitle.boiler": "Котел нагревается", + "gtceu.subtitle.centrifuge": "Центрифуга вращается", + "gtceu.subtitle.chainsaw": "Бензопила ревет", + "gtceu.subtitle.chemical": "Химикаты булькают", + "gtceu.subtitle.arc": "Дуга жужжит", + "gtceu.subtitle.compressor": "Компрессор сжимает", + "gtceu.subtitle.cooling": "Холодильник жужжит", + "gtceu.subtitle.cut": "Резак режет", + "gtceu.subtitle.drill": "Бурение", + "gtceu.subtitle.electrolyzer": "Электролизер искрит", + "gtceu.subtitle.fire": "Огонь трещит", + "gtceu.subtitle.forge_hammer": "Молот стучит", + "gtceu.subtitle.furnace": "Печь нагревается", + "gtceu.subtitle.jet_engine": "Двигатель ревет", + "gtceu.subtitle.miner": "Шахтер добывает", + "gtceu.subtitle.mixer": "Смеситель плещет", + "gtceu.subtitle.mortar": "Ступа измельчает", + "gtceu.subtitle.motor": "Мотор шумит", + "gtceu.subtitle.plunger": "Вантуз чпокнул", + "gtceu.subtitle.portable_scanner": "Сканирование", + "gtceu.subtitle.portal_closing": "Портал закрывается", + "gtceu.subtitle.portal_opening": "Портал открывается", + "gtceu.subtitle.saw": "Пиление", + "gtceu.subtitle.science": "Н А У К А", + "gtceu.subtitle.screwdriver": "Откручивание", + "gtceu.subtitle.spray_can": "Распыление", + "gtceu.subtitle.sus": "Сус...", + "gtceu.top.auto_output": "Авто. вывод", + "gtceu.top.cable_amperage": "Сила тока: ", + "gtceu.top.exhaust_vent_blocked": "Заблокировано", + "gtceu.top.exhaust_vent_direction": "Вытяжка: %s", + "gtceu.top.fluid_auto_output": "Вывод жидкости: %s", + "gtceu.top.machine_mode": "Режим машины: ", + "gtceu.top.recipe_output": "Рецепт:", + "gtceu.top.stained": "Окрашен: %s", + "effect.gtceu.weak_poison": "Слабое отравление", + "block.gtceu.ev_output_buffer": "Выводной буфер (§5EV)", + "block.gtceu.ev_input_buffer": "Вводной буфер (§5EV§r)", + "block.gtceu.max_output_buffer": "Выводной буфер (§c§lMAX§r)", + "block.gtceu.mv_buffer": "§bУлучшенный буфер§r", + "compass.node.gtceu.machines/buffer": "Буфер", + "block.gtceu.normal_duct_pipe": "Обычная труба воздуховода", + "block.gtceu.opv_input_buffer": "Вводной буфер (§9§lOpV§r)", + "block.gtceu.pink_borderless_lamp": "Розовая лампа (Без границ)", + "block.gtceu.red_borderless_lamp": "Красная лампа (Без границ)", + "block.gtceu.white_borderless_lamp": "Белая лампа (Без границ)", + "block.gtceu.yellow_borderless_lamp": "Желтая лампа (Без границ)", + "config.gtceu.option.enableMoreBufferAbility": "enableMoreBufferAbility", + "block.gtceu.uev_input_buffer": "Вводной буфер (§aUEV§r)", + "block.gtceu.uiv_input_buffer": "Вводной буфер (§2UIV§r)", + "block.gtceu.uv_input_buffer": "Вводной буфер (§3UV§r)", + "gtceu.machine.buffer.export.tooltip": "Вывод Предметов и Жидкостей для многоблочной структуры", + "config.gtceu.option.ae2": "ae2", + "block.gtceu.mv_air_scrubber": "§bУлучшенный очиститель воздуха §r", + "block.gtceu.opv_output_buffer": "Выводной буфер (§9§lOpV§r)", + "block.gtceu.uev_output_buffer": "Выводной буфер (§aUEV§r)", + "block.gtceu.uhv_output_buffer": "Выводной буфер (§4UHV§r)", + "block.gtceu.uv_output_buffer": "Выводной буфер (§3UV§r)", + "block.gtceu.uxv_input_buffer": "Вводной буфер (§eUXV§r)", + "compass.node.gtceu.parts/buffer_part": "Часть буфера", + "config.gtceu.option.energyConsumption": "energyConsumption", + "gtceu.medical_condition.carbon_monoxide_poisoning": "§7Отравление угарным газом", + "gtceu.subtitle.file": "Напильник скрежет", + "gtceu.subtitle.macerator": "Измельчитель измельчает", + "gtceu.subtitle.replicator": "Репликатор копирует", + "gtceu.top.item_auto_output": "Вывод предметов: %s", + "gtceu.medical_condition.description": "§l§cОПАСНЫЙ §7Удерживайте Shift, чтобы просмотреть подробную информацию", + "gtceu.subtitle.combustion": "Сгорание", + "gtceu.subtitle.computation": "Компьютер пикает", + "gtceu.subtitle.metal_pipe": "Очень_громкий_металичнский_труба.wav", + "gtceu.subtitle.soft_hammer": "Тюк", + "gtceu.recipe.environmental_hazard": "Зона должна иметь %s", + "gtceu.recipe.environmental_hazard.reverse": "Зона НЕ должна иметь %s", + "gtceu.top.allow_output_input": "Ввод разрешен", + "behavior.portable_scanner.machine_front_facing": "Лицевая сторона: %s", + "behavior.portable_scanner.machine_upwards_facing": "Верхняя сторона: %s", + "block.gtceu.large_duct_pipe": "Большая труба воздуховода", + "block.gtceu.light_blue_borderless_lamp": "Голубая лампа (Без границ)", + "block.gtceu.magenta_borderless_lamp": "Пурпурная лампа (Без границ)", + "block.gtceu.the_end_marker": "Край", + "config.gtceu.option.enchantedTools": "enchantedTools", + "config.gtceu.option.environmentalHazardDecayRate": "environmentalHazardDecayRate", + "config.gtceu.option.environmentalHazards": "environmentalHazards", + "config.gtceu.option.showDimensionTier": "showDimensionTier", + "config.gtceu.option.universalHazards": "universalHazards", + "config.gtceu.option.updateIntervals": "updateIntervals", + "config.gtceu.option.voltageTierAdvNanoSuit": "voltageTierAdvNanoSuit", + "config.jade.plugin_gtceu.auto_output_info": "[GTCEu] Auto Output Info", + "config.jade.plugin_gtceu.cable_info": "[GTCEu] Cable Info", + "config.jade.plugin_gtceu.exhaust_vent_info": "[GTCEu] Exhaust Vent Info", + "config.jade.plugin_gtceu.hazard_cleaner_provider": "[GTCEu] Hazard Cleaner", + "config.jade.plugin_gtceu.machine_mode": "[GTCEu] Machine Mode", + "config.jade.plugin_gtceu.maintenance_info": "[GTCEu] Maintenance Info", + "config.jade.plugin_gtceu.multiblock_structure": "[GTCEu] MultiBlock Structure", + "config.jade.plugin_gtceu.parallel_info": "[GTCEu] Parallel Info", + "config.jade.plugin_gtceu.recipe_output_info": "[GTCEu] Recipe Output Info", + "config.jade.plugin_gtceu.stained_color": "[GTCEu] Stained Block Info", + "death.attack.gtceu.medical_condition/arsenicosis": "%s отравился мышьяком", + "death.attack.gtceu.medical_condition/asbestosis": "%s умер от мезотелиомы", + "death.attack.gtceu.medical_condition/berylliosis": "%s добывал Изумруды слишком рьяно", + "death.attack.gtceu.medical_condition/carbon_monoxide_poisoning": "%s оставил плиту включенной", + "death.attack.gtceu.medical_condition/carcinogen": "У %s лейкемия", + "death.attack.gtceu.medical_condition/chemical_burns": "%s попал в химический инцидент", + "death.attack.gtceu.medical_condition/irritant": "%s получил §n§lОЧЕНЬ§r сильную сыпь", + "death.attack.gtceu.medical_condition/methanol_poisoning": "%s пробовал пить самогон во время сухого закона", + "death.attack.gtceu.medical_condition/nausea": "%s умер от тошноты", + "death.attack.gtceu.medical_condition/none": "%s умер от... ничего?", + "death.attack.gtceu.medical_condition/silicosis": "%s умер не от туберкулёза. Это был Силикоз.", + "death.attack.gtceu.medical_condition/weak_poison": "%s поел свинца (или ртути!)", + "gtceu.air_scrubber": "Очиститель воздуха", + "gtceu.duct_pipe.transfer_rate": "§bСкорость передачи воздуха: %s", + "gtceu.evaporation": "Выпаривание", + "gtceu.hazard_trigger.any": "При любом контакте", + "gtceu.hazard_trigger.description": "Проявляется при:", + "gtceu.hazard_trigger.inhalation": "Вдыхание вредных веществ", + "gtceu.hazard_trigger.none": "Ничем", + "gtceu.hazard_trigger.protection.description": "Защищает от:", + "gtceu.hazard_trigger.skin_contact": "Контакт с кожей", + "gtceu.jade.cleaned_this_second": "Убирает опасность: %s/с", + "gtceu.medical_condition.irritant": "§6Раздражитель", + "gtceu.subtitle.turbine": "Турбина воет", + "gtceu.subtitle.wirecutter": "Провод перекусился", + "gtceu.subtitle.wrench": "Ключ стрекочет", + "gtceu.top.cable_voltage": "Вольтаж: ", + "config.gtceu.option.nanoSaber": "nanoSaber", + "config.gtceu.option.nanoSaberBaseDamage": "nanoSaberBaseDamage", + "config.gtceu.option.nanoSaberDamageBoost": "nanoSaberDamageBoost", + "config.gtceu.option.voltageTierAdvImpeller": "voltageTierAdvImpeller", + "config.gtceu.option.voltageTierAdvQuarkTech": "voltageTierAdvQuarkTech", + "config.gtceu.option.voltageTierImpeller": "voltageTierImpeller", + "config.gtceu.option.voltageTierNanoSuit": "voltageTierNanoSuit", + "config.gtceu.option.voltageTierNightVision": "voltageTierNightVision", + "config.gtceu.option.voltageTierQuarkTech": "voltageTierQuarkTech", + "config.gtceu.option.zombieSpawnWithSabers": "zombieSpawnWithSabers", + "config.gtceu.option.hideOreProcessingDiagrams": "hideOreProcessingDiagrams", + "block.gtceu.stainless_evaporation_casing": "Нержавеющий корпус градирни", + "item.gtceu.battery.charge_detailed.2": "§a%s/%s EU§7 - Уровень %s §7(§c%s/%s %s осталось§7)", + "item.gtceu.invar_lighter": "Инваровая зажигалка", + "item.gtceu.matchbox": "Пачка спичек", + "item.gtceu.matches": "Спички", + "item.gtceu.platinum_lighter": "Платиновая зажигалка", + "item.gtceu.battery.charge_detailed.1": "§a%s/%s EU§7 - Уровень %s §7(§e%s/%s %s осталось§7)", + "item.gtceu.battery.charge_detailed.0": "§a%s/%s EU§7 - Уровень %s §7(§a%s/%s %s осталось§7)", + "item.gtceu.nano_saber": "Нано-cабля", + "item.gtceu.paracetamol_pill": "Таблетка парацетамола", + "item.gtceu.pill_casting_mold": "Отливная форма (Таблетка)", + "material.gtceu.acidic_bromine_exhaust": "Кислотно-бромный выхлоп", + "material.gtceu.acidic_bromine_solution": "Кислотный раствор брома", + "material.gtceu.ammonium_formate": "Формиат аммония", + "tagprefix.blackstone": "%s (Чернитная руда)", + "tile.gtceu.brittle_charcoal.tooltip.1": "Добудь это что бы получить Древесный уголь.", + "tile.gtceu.brittle_charcoal.name": "Хрупкий древесный уголь", + "tile.gtceu.brittle_charcoal.tooltip.0": "Сделан с помощью воспламенителя угольной ямы.", + "material.gtceu.brominated_chlorine_vapor": "Бромированные пары хлора", + "material.gtceu.raw_brine": "Необработанный cоляной раствор", + "item.gtceu.face_mask": "Медицинская маска", + "item.gtceu.rad_away_pill": "Таблетка Антирадина", + "item.gtceu.rubber_gloves": "Резиновые перчатки", + "material.gtceu.hot_chlorinated_brominated_brine": "Горячий хлорированный бромированный соляной раствор", + "material.gtceu.hot_debrominated_brine": "Горячий дебромированный соляной раствор" } From c232eba47fed1f0808aad83c030a51cca4bbe13a Mon Sep 17 00:00:00 2001 From: Gate Guardian <147252672+qwer523@users.noreply.github.com> Date: Sun, 21 Jul 2024 21:29:13 +0800 Subject: [PATCH 5/5] Adding FE support for the charge slot & Removing the energy compatibility layer (#1593) Co-authored-by: screret <68943070+screret@users.noreply.github.com> --- .../java/com/gregtechceu/gtceu/GTCEu.java | 4 - .../blockentity/MetaMachineBlockEntity.java | 12 +- .../CombinedCapabilityProvider.java | 2 +- .../capability/{forge => }/GTCapability.java | 3 +- .../api/capability/GTCapabilityHelper.java | 12 +- .../capability/IPlatformEnergyStorage.java | 50 -------- .../api/capability/PlatformEnergyCompat.java | 74 ------------ .../compat/CapabilityCompatProvider.java | 2 +- .../{forge => }/compat/EUToFEProvider.java | 72 +++++------- .../gtceu/api/capability/compat/FeCompat.java | 76 +++++++++++++ .../capability/forge/GTEnergyHelperImpl.java | 78 ------------- .../capability/recipe/EURecipeCapability.java | 10 +- .../gregtechceu/gtceu/api/item/IGTTool.java | 2 +- .../api/item/component/ElectricStats.java | 2 +- .../api/machine/SimpleTieredMachine.java | 3 +- .../trait/NotifiableComputationContainer.java | 2 +- .../trait/NotifiableEnergyContainer.java | 27 +++++ .../gregtechceu/gtceu/common/CommonProxy.java | 3 +- .../gtceu/common/block/CableBlock.java | 2 +- .../gtceu/common/block/DuctPipeBlock.java | 2 +- .../gtceu/common/block/LaserPipeBlock.java | 2 +- .../gtceu/common/block/OpticalPipeBlock.java | 2 +- .../common/blockentity/CableBlockEntity.java | 2 +- .../blockentity/DuctPipeBlockEntity.java | 2 +- .../blockentity/FluidPipeBlockEntity.java | 2 +- .../blockentity/ItemPipeBlockEntity.java | 2 +- .../blockentity/LaserPipeBlockEntity.java | 2 +- .../blockentity/OpticalPipeBlockEntity.java | 2 +- .../gtceu/common/data/GTMachines.java | 10 +- .../common/item/PortableScannerBehavior.java | 2 +- .../machine/electric/ChargerMachine.java | 26 +++-- .../machine/electric/ConverterMachine.java | 10 +- .../research/ResearchStationMachine.java | 2 +- .../part/OpticalDataHatchMachine.java | 2 +- .../common/machine/trait/ConverterTrait.java | 107 +++++++++++------- .../pipelike/cable/EnergyNetWalker.java | 2 +- .../common/pipelike/duct/DuctNetWalker.java | 2 +- .../common/pipelike/laser/LaserNetWalker.java | 2 +- .../pipelike/optical/OpticalNetWalker.java | 2 +- .../pipelike/optical/OpticalRoutePath.java | 2 +- .../recipe/misc/MetaTileEntityLoader.java | 3 +- .../gtceu/forge/ForgeCommonEventListener.java | 4 +- 42 files changed, 267 insertions(+), 363 deletions(-) rename src/main/java/com/gregtechceu/gtceu/api/capability/{forge => }/CombinedCapabilityProvider.java (95%) rename src/main/java/com/gregtechceu/gtceu/api/capability/{forge => }/GTCapability.java (97%) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/capability/IPlatformEnergyStorage.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/capability/PlatformEnergyCompat.java rename src/main/java/com/gregtechceu/gtceu/api/capability/{forge => }/compat/CapabilityCompatProvider.java (91%) rename src/main/java/com/gregtechceu/gtceu/api/capability/{forge => }/compat/EUToFEProvider.java (68%) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/capability/compat/FeCompat.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTEnergyHelperImpl.java diff --git a/src/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java index 36ff02a559..5c03efaa70 100644 --- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java +++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java @@ -70,10 +70,6 @@ public static boolean isSodiumRubidiumEmbeddiumLoaded() { LDLib.isModLoaded(GTValues.MODID_EMBEDDIUM); } - public static boolean isRebornEnergyLoaded() { - return Platform.isForge() || LDLib.isModLoaded(GTValues.MODID_REBORN_ENERGY); - } - public static boolean isAE2Loaded() { return LDLib.isModLoaded(GTValues.MODID_APPENG); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java index 49e5ef21ac..9d5739ee89 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/api/blockentity/MetaMachineBlockEntity.java @@ -3,8 +3,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.*; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; -import com.gregtechceu.gtceu.api.capability.forge.GTEnergyHelperImpl; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.MetaMachine; @@ -41,6 +40,7 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.energy.IEnergyStorage; import appeng.api.networking.IInWorldGridNodeHost; import appeng.capabilities.Capabilities; @@ -230,15 +230,15 @@ public static LazyOptional getCapability(MetaMachine machine, @NotNull Ca LazyOptional.of(() -> FluidTransferHelperImpl.toFluidHandler(transfer))); } } else if (cap == ForgeCapabilities.ENERGY) { - if (machine instanceof IPlatformEnergyStorage platformEnergyStorage) { + if (machine instanceof IEnergyStorage energyStorage) { return ForgeCapabilities.ENERGY.orEmpty(cap, - LazyOptional.of(() -> GTEnergyHelperImpl.toEnergyStorage(platformEnergyStorage))); + LazyOptional.of(() -> energyStorage)); } - var list = getCapabilitiesFromTraits(machine.getTraits(), side, IPlatformEnergyStorage.class); + var list = getCapabilitiesFromTraits(machine.getTraits(), side, IEnergyStorage.class); if (!list.isEmpty()) { // TODO wrap list in the future return ForgeCapabilities.ENERGY.orEmpty(cap, - LazyOptional.of(() -> GTEnergyHelperImpl.toEnergyStorage(list.get(0)))); + LazyOptional.of(() -> list.get(0))); } } else if (cap == GTCapability.CAPABILITY_LASER) { if (machine instanceof ILaserContainer energyContainer) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/CombinedCapabilityProvider.java b/src/main/java/com/gregtechceu/gtceu/api/capability/CombinedCapabilityProvider.java similarity index 95% rename from src/main/java/com/gregtechceu/gtceu/api/capability/forge/CombinedCapabilityProvider.java rename to src/main/java/com/gregtechceu/gtceu/api/capability/CombinedCapabilityProvider.java index 2b7cf2a541..d399d8a793 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/CombinedCapabilityProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/CombinedCapabilityProvider.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.capability.forge; +package com.gregtechceu.gtceu.api.capability; import net.minecraft.core.Direction; import net.minecraftforge.common.capabilities.Capability; diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapability.java similarity index 97% rename from src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java rename to src/main/java/com/gregtechceu/gtceu/api/capability/GTCapability.java index 89535cd5ca..89a63ae29f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapability.java @@ -1,6 +1,5 @@ -package com.gregtechceu.gtceu.api.capability.forge; +package com.gregtechceu.gtceu.api.capability; -import com.gregtechceu.gtceu.api.capability.*; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java index 26f3f8f931..315e03e219 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/GTCapabilityHelper.java @@ -1,7 +1,5 @@ package com.gregtechceu.gtceu.api.capability; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; -import com.gregtechceu.gtceu.api.capability.forge.GTEnergyHelperImpl; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine; import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic; @@ -30,9 +28,8 @@ public static IElectricItem getElectricItem(ItemStack itemStack) { } @Nullable - public static IPlatformEnergyStorage getPlatformEnergyItem(ItemStack itemStack) { - IEnergyStorage energyItemStorage = itemStack.getCapability(ForgeCapabilities.ENERGY).resolve().orElse(null); - return energyItemStorage == null ? null : GTEnergyHelperImpl.toPlatformEnergyStorage(energyItemStorage); + public static IEnergyStorage getForgeEnergyItem(ItemStack itemStack) { + return itemStack.getCapability(ForgeCapabilities.ENERGY).resolve().orElse(null); } @Nullable @@ -71,12 +68,11 @@ public static RecipeLogic getRecipeLogic(Level level, BlockPos pos, @Nullable Di } @Nullable - public static IPlatformEnergyStorage getPlatformEnergy(Level level, BlockPos pos, @Nullable Direction side) { + public static IEnergyStorage getForgeEnergy(Level level, BlockPos pos, @Nullable Direction side) { if (level.getBlockState(pos).hasBlockEntity()) { var blockEntity = level.getBlockEntity(pos); if (blockEntity != null) { - IEnergyStorage energyStorage = blockEntity.getCapability(ForgeCapabilities.ENERGY, side).orElse(null); - return energyStorage == null ? null : GTEnergyHelperImpl.toPlatformEnergyStorage(energyStorage); + return blockEntity.getCapability(ForgeCapabilities.ENERGY, side).orElse(null); } } return null; diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/IPlatformEnergyStorage.java b/src/main/java/com/gregtechceu/gtceu/api/capability/IPlatformEnergyStorage.java deleted file mode 100644 index 5b4181f965..0000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/IPlatformEnergyStorage.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.gregtechceu.gtceu.api.capability; - -public interface IPlatformEnergyStorage { - - /** - * Return false if calling {@link #insert} will absolutely always return 0, or true otherwise or in doubt. - * - *

- * Note: This function is meant to be used by cables or other devices that can transfer energy to know if - * they should interact with this storage at all. - */ - boolean supportsInsertion(); - - /** - * Try to insert up to some amount of energy into this storage. - * - * @param maxAmount The maximum amount of energy to insert. May not be negative. - * @param simulate Is this a test? - * @return A nonnegative integer not greater than maxAmount: the amount that was inserted. - */ - long insert(long maxAmount, boolean simulate); - - /** - * Return false if calling {@link #extract} will absolutely always return 0, or true otherwise or in doubt. - * - *

- * Note: This function is meant to be used by cables or other devices that can transfer energy to know if - * they should interact with this storage at all. - */ - boolean supportsExtraction(); - - /** - * Try to extract up to some amount of energy from this storage. - * - * @param maxAmount The maximum amount of energy to extract. May not be negative. - * @param simulate Is this a test? - * @return A nonnegative integer not greater than maxAmount: the amount that was extracted. - */ - long extract(long maxAmount, boolean simulate); - - /** - * Return the current amount of energy that is stored. - */ - long getAmount(); - - /** - * Return the maximum amount of energy that could be stored. - */ - long getCapacity(); -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/PlatformEnergyCompat.java b/src/main/java/com/gregtechceu/gtceu/api/capability/PlatformEnergyCompat.java deleted file mode 100644 index 41bc743975..0000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/PlatformEnergyCompat.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.gregtechceu.gtceu.api.capability; - -import com.gregtechceu.gtceu.config.ConfigHolder; - -public class PlatformEnergyCompat { - - /** - * Conversion ratio used by energy converters - */ - public static int ratio(boolean nativeToEu) { - return nativeToEu ? ConfigHolder.INSTANCE.compat.energy.platformToEuRatio : - ConfigHolder.INSTANCE.compat.energy.euToPlatformRatio; - } - - /** - * Converts eu to native energy, using specified ratio - * - * @return amount of native energy - */ - public static int toNative(long eu, int ratio) { - return (int) toNativeLong(eu, ratio); - } - - /** - * Converts eu to native energy, using specified ratio, and returns as a long. - * Can be used for overflow protection. - * - * @return amount of native energy - */ - public static long toNativeLong(long eu, int ratio) { - return eu * ratio; - } - - /** - * Converts eu to native energy, using a specified ratio, and with a specified upper bound. - * This can be useful for dealing with int-overflows when converting from a long to an int. - * - * @return amount of native energy - */ - public static long toNativeBounded(long eu, int ratio, int max) { - return Math.min(max, toNativeLong(eu, ratio)); - } - - /** - * Converts native energy to eu, using specified ratio - * - * @return amount of eu - */ - public static long toEu(long nat, int ratio) { - return nat / ratio; - } - - /** - * Inserts energy to the storage. EU -> FE conversion is performed. - * - * @return amount of EU inserted - */ - public static long insertEu(IPlatformEnergyStorage storage, long amountEU) { - int euToNativeRatio = ratio(false); - long nativeSent = storage.insert(toNativeLong(amountEU, euToNativeRatio), true); - return toEu(storage.insert(nativeSent - (nativeSent % euToNativeRatio), false), euToNativeRatio); - } - - /** - * Extracts energy from the storage. EU -> FE conversion is performed. - * - * @return amount of EU extracted - */ - public static long extractEu(IPlatformEnergyStorage storage, long amountEU) { - int euToNativeRatio = ratio(false); - long extract = storage.extract(toNativeLong(amountEU, euToNativeRatio), true); - return toEu(storage.extract(extract - (extract % euToNativeRatio), false), euToNativeRatio); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/compat/CapabilityCompatProvider.java b/src/main/java/com/gregtechceu/gtceu/api/capability/compat/CapabilityCompatProvider.java similarity index 91% rename from src/main/java/com/gregtechceu/gtceu/api/capability/forge/compat/CapabilityCompatProvider.java rename to src/main/java/com/gregtechceu/gtceu/api/capability/compat/CapabilityCompatProvider.java index 8ba745161f..0c6da8b8eb 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/compat/CapabilityCompatProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/compat/CapabilityCompatProvider.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.capability.forge.compat; +package com.gregtechceu.gtceu.api.capability.compat; import net.minecraft.core.Direction; import net.minecraftforge.common.capabilities.Capability; diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/compat/EUToFEProvider.java b/src/main/java/com/gregtechceu/gtceu/api/capability/compat/EUToFEProvider.java similarity index 68% rename from src/main/java/com/gregtechceu/gtceu/api/capability/forge/compat/EUToFEProvider.java rename to src/main/java/com/gregtechceu/gtceu/api/capability/compat/EUToFEProvider.java index 8a9a7bb041..c54442d5d9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/compat/EUToFEProvider.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/compat/EUToFEProvider.java @@ -1,11 +1,8 @@ -package com.gregtechceu.gtceu.api.capability.forge.compat; +package com.gregtechceu.gtceu.api.capability.compat; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; -import com.gregtechceu.gtceu.api.capability.IPlatformEnergyStorage; -import com.gregtechceu.gtceu.api.capability.PlatformEnergyCompat; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; -import com.gregtechceu.gtceu.api.capability.forge.GTEnergyHelperImpl; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTUtil; @@ -16,6 +13,7 @@ import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.energy.IEnergyStorage; +import com.google.common.primitives.Ints; import org.jetbrains.annotations.NotNull; public class EUToFEProvider extends CapabilityCompatProvider { @@ -46,20 +44,20 @@ public LazyOptional getCapability(@NotNull Capability capability, Dire public class GTEnergyWrapper implements IEnergyContainer { - private final IPlatformEnergyStorage energyStorage; + private final IEnergyStorage energyStorage; public GTEnergyWrapper(IEnergyStorage energyStorage) { - this.energyStorage = GTEnergyHelperImpl.toPlatformEnergyStorage(energyStorage); + this.energyStorage = energyStorage; } @Override public long acceptEnergyFromNetwork(Direction facing, long voltage, long amperage) { - long receive = 0; + int receive = 0; // Try to use the internal buffer before consuming a new packet if (feBuffer > 0) { - receive = energyStorage.insert(safeCastLongToInt(feBuffer), true); + receive = energyStorage.receiveEnergy(Ints.saturatedCast(feBuffer), true); if (receive == 0) return 0; @@ -67,23 +65,23 @@ public long acceptEnergyFromNetwork(Direction facing, long voltage, long amperag // Internal Buffer could provide the max RF the consumer could consume if (feBuffer > receive) { feBuffer -= receive; - energyStorage.insert(receive, false); + energyStorage.receiveEnergy(receive, false); return 0; // Buffer could not provide max value, save the remainder and continue processing } else { - receive = safeCastLongToInt(feBuffer); + receive = Ints.saturatedCast(feBuffer); feBuffer = 0; } } - long maxPacket = PlatformEnergyCompat.toNativeLong(voltage, PlatformEnergyCompat.ratio(false)); + long maxPacket = FeCompat.toFeLong(voltage, FeCompat.ratio(false)); long maximalValue = maxPacket * amperage; // Try to consume our remainder buffer plus a fresh packet if (receive != 0) { - long consumable = energyStorage.insert(safeCastLongToInt(maximalValue + receive), true); + int consumable = energyStorage.receiveEnergy(Ints.saturatedCast(maximalValue + receive), true); // Machine unable to consume any power if (consumable == 0) @@ -91,13 +89,13 @@ public long acceptEnergyFromNetwork(Direction facing, long voltage, long amperag // Only able to consume our buffered amount if (consumable == receive) { - energyStorage.insert(consumable, false); + energyStorage.receiveEnergy(consumable, false); return 0; } // Able to consume our full packet as well as our remainder buffer if (consumable == maximalValue + receive) { - energyStorage.insert(consumable, false); + energyStorage.receiveEnergy(consumable, false); return amperage; } @@ -105,19 +103,19 @@ public long acceptEnergyFromNetwork(Direction facing, long voltage, long amperag // Able to consume buffered amount plus an even amount of packets (no buffer needed) if (newPower % maxPacket == 0) { - return energyStorage.insert(consumable, false) / maxPacket; + return energyStorage.receiveEnergy(consumable, false) / maxPacket; } // Able to consume buffered amount plus some amount of power with a packet remainder - int ampsToConsume = safeCastLongToInt((newPower / maxPacket) + 1); - feBuffer = safeCastLongToInt((maxPacket * ampsToConsume) - consumable); - energyStorage.insert(consumable, false); + int ampsToConsume = Ints.saturatedCast((newPower / maxPacket) + 1); + feBuffer = Ints.saturatedCast((maxPacket * ampsToConsume) - consumable); + energyStorage.receiveEnergy(consumable, false); return ampsToConsume; // Else try to draw 1 full packet } else { - long consumable = energyStorage.insert(safeCastLongToInt(maximalValue), true); + int consumable = energyStorage.receiveEnergy(Ints.saturatedCast(maximalValue), true); // Machine unable to consume any power if (consumable == 0) @@ -125,19 +123,19 @@ public long acceptEnergyFromNetwork(Direction facing, long voltage, long amperag // Able to accept the full amount of power if (consumable == maximalValue) { - energyStorage.insert(consumable, false); + energyStorage.receiveEnergy(consumable, false); return amperage; } // Able to consume an even amount of packets if (consumable % maxPacket == 0) { - return energyStorage.insert(consumable, false) / maxPacket; + return energyStorage.receiveEnergy(consumable, false) / maxPacket; } // Able to consume power with some amount of power remainder in the packet - int ampsToConsume = safeCastLongToInt((consumable / maxPacket) + 1); - feBuffer = safeCastLongToInt((maxPacket * ampsToConsume) - consumable); - energyStorage.insert(consumable, false); + int ampsToConsume = Ints.saturatedCast((consumable / maxPacket) + 1); + feBuffer = Ints.saturatedCast((maxPacket * ampsToConsume) - consumable); + energyStorage.receiveEnergy(consumable, false); return ampsToConsume; } } @@ -145,18 +143,18 @@ public long acceptEnergyFromNetwork(Direction facing, long voltage, long amperag @Override public long changeEnergy(long delta) { if (delta == 0) return 0; - else if (delta < 0) return PlatformEnergyCompat.extractEu(energyStorage, -delta); - else return PlatformEnergyCompat.insertEu(energyStorage, delta); + else if (delta < 0) return FeCompat.extractEu(energyStorage, -delta, false); + else return FeCompat.insertEu(energyStorage, delta, false); } @Override public long getEnergyCapacity() { - return PlatformEnergyCompat.toEu(energyStorage.getCapacity(), PlatformEnergyCompat.ratio(false)); + return FeCompat.toEu(energyStorage.getMaxEnergyStored(), FeCompat.ratio(false)); } @Override public long getEnergyStored() { - return PlatformEnergyCompat.toEu(energyStorage.getAmount(), PlatformEnergyCompat.ratio(false)); + return FeCompat.toEu(energyStorage.getEnergyStored(), FeCompat.ratio(false)); } /** @@ -179,16 +177,16 @@ public long getInputAmperage() { @Override public long getInputVoltage() { - long maxInput = energyStorage.insert(Integer.MAX_VALUE, true); + long maxInput = energyStorage.receiveEnergy(Integer.MAX_VALUE, true); if (maxInput == 0) return 0; return GTValues.V[GTUtil - .getTierByVoltage(PlatformEnergyCompat.toEu(maxInput, PlatformEnergyCompat.ratio(false)))]; + .getTierByVoltage(FeCompat.toEu(maxInput, FeCompat.ratio(false)))]; } @Override public boolean inputsEnergy(Direction facing) { - return energyStorage.supportsInsertion(); + return energyStorage.canReceive(); } /** @@ -209,14 +207,4 @@ public boolean isOneProbeHidden() { return true; } } - - /** - * Safely cast a Long to an Int without overflow. - * - * @param v The Long value to cast to an Int. - * @return v, casted to Int, or Integer.MAX_VALUE if it would overflow. - */ - public static int safeCastLongToInt(long v) { - return v > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) v; - } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/compat/FeCompat.java b/src/main/java/com/gregtechceu/gtceu/api/capability/compat/FeCompat.java new file mode 100644 index 0000000000..c838d60762 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/compat/FeCompat.java @@ -0,0 +1,76 @@ +package com.gregtechceu.gtceu.api.capability.compat; + +import com.gregtechceu.gtceu.config.ConfigHolder; + +import net.minecraftforge.energy.IEnergyStorage; + +public class FeCompat { + + /** + * Conversion ratio used by energy converters + */ + public static int ratio(boolean feToEu) { + return feToEu ? ConfigHolder.INSTANCE.compat.energy.platformToEuRatio : + ConfigHolder.INSTANCE.compat.energy.euToPlatformRatio; + } + + /** + * Converts eu to fe, using specified ratio + * + * @return fe + */ + public static int toFe(long eu, int ratio) { + return (int) toFeLong(eu, ratio); + } + + /** + * Converts eu to fe, using specified ratio, and returns as a long. + * Can be used for overflow protection. + * + * @return fe + */ + public static long toFeLong(long eu, int ratio) { + return eu * ratio; + } + + /** + * Converts eu to fe, using a specified ratio, and with a specified upper bound. + * This can be useful for dealing with int-overflows when converting from a long to an int. + * + * @return fe + */ + public static int toFeBounded(long eu, int ratio, int max) { + return (int) Math.min(max, toFeLong(eu, ratio)); + } + + /** + * Converts fe to eu, using specified ratio + * + * @return eu + */ + public static long toEu(long fe, int ratio) { + return fe / ratio; + } + + /** + * Inserts energy to the storage. EU -> FE conversion is performed. + * + * @return amount of EU inserted + */ + public static long insertEu(IEnergyStorage storage, long amountEU, boolean simulate) { + int euToFeRatio = ratio(false); + int feSent = storage.receiveEnergy(toFe(amountEU, euToFeRatio), true); + return toEu(storage.receiveEnergy(feSent - (feSent % euToFeRatio), simulate), euToFeRatio); + } + + /** + * Extracts energy from the storage. EU -> FE conversion is performed. + * + * @return amount of EU extracted + */ + public static long extractEu(IEnergyStorage storage, long amountEU, boolean simulate) { + int euToFeRatio = ratio(false); + int extract = storage.extractEnergy(toFe(amountEU, euToFeRatio), true); + return toEu(storage.extractEnergy(extract - (extract % euToFeRatio), simulate), euToFeRatio); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTEnergyHelperImpl.java b/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTEnergyHelperImpl.java deleted file mode 100644 index b8a30e94b9..0000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/forge/GTEnergyHelperImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.gregtechceu.gtceu.api.capability.forge; - -import com.gregtechceu.gtceu.api.capability.IPlatformEnergyStorage; - -import net.minecraftforge.energy.IEnergyStorage; - -public class GTEnergyHelperImpl { - - public static IPlatformEnergyStorage toPlatformEnergyStorage(IEnergyStorage handler) { - return new IPlatformEnergyStorage() { - - @Override - public long insert(long maxAmount, boolean simulate) { - return handler.receiveEnergy((int) maxAmount, simulate); - } - - @Override - public long extract(long maxAmount, boolean simulate) { - return handler.extractEnergy((int) maxAmount, simulate); - } - - @Override - public long getAmount() { - return handler.getEnergyStored(); - } - - @Override - public long getCapacity() { - return handler.getMaxEnergyStored(); - } - - @Override - public boolean supportsInsertion() { - return handler.canReceive(); - } - - @Override - public boolean supportsExtraction() { - return handler.canExtract(); - } - }; - } - - public static IEnergyStorage toEnergyStorage(IPlatformEnergyStorage energyStorage) { - return new IEnergyStorage() { - - @Override - public int receiveEnergy(int i, boolean bl) { - return (int) Math.min(energyStorage.insert(i, bl), Integer.MAX_VALUE); - } - - @Override - public int extractEnergy(int i, boolean bl) { - return (int) Math.min(energyStorage.extract(i, bl), Integer.MAX_VALUE); - } - - @Override - public int getEnergyStored() { - return (int) Math.min(energyStorage.getAmount(), Integer.MAX_VALUE); - } - - @Override - public int getMaxEnergyStored() { - return (int) Math.min(energyStorage.getCapacity(), Integer.MAX_VALUE); - } - - @Override - public boolean canExtract() { - return energyStorage.supportsExtraction(); - } - - @Override - public boolean canReceive() { - return energyStorage.supportsInsertion(); - } - }; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/EURecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/EURecipeCapability.java index ba0ddd40a4..2d843646a4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/EURecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/EURecipeCapability.java @@ -7,6 +7,8 @@ import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; import com.gregtechceu.gtceu.api.recipe.content.SerializerLong; +import com.google.common.primitives.Ints; + import java.util.Collection; import java.util.List; @@ -51,7 +53,7 @@ public int limitParallel(GTRecipe recipe, IRecipeCapabilityHolder holder, int mu if (recipeEUt == 0) { return Integer.MAX_VALUE; } - return Math.abs(safeCastLongToInt(maxVoltage / recipeEUt)); + return Math.abs(Ints.saturatedCast(maxVoltage / recipeEUt)); } @Override @@ -67,10 +69,6 @@ public int getMaxParallelRatio(IRecipeCapabilityHolder holder, GTRecipe recipe, if (recipeEUt == 0) { return Integer.MAX_VALUE; } - return Math.abs(safeCastLongToInt(maxVoltage / recipeEUt)); - } - - public static int safeCastLongToInt(long v) { - return v > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) v; + return Math.abs(Ints.saturatedCast(maxVoltage / recipeEUt)); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java index 19924273a2..2477e4a5ad 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.api.item; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.CombinedCapabilityProvider; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; -import com.gregtechceu.gtceu.api.capability.forge.CombinedCapabilityProvider; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.DustProperty; diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/component/ElectricStats.java b/src/main/java/com/gregtechceu/gtceu/api/item/component/ElectricStats.java index bed0261d17..4c6660a89c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/component/ElectricStats.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/component/ElectricStats.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.api.item.component; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IElectricItem; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.item.capability.ElectricItem; import com.gregtechceu.gtceu.api.item.component.forge.IComponentCapability; import com.gregtechceu.gtceu.utils.FormattingUtil; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java index aa2375cb9a..bc11402f6b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java @@ -126,7 +126,8 @@ public ManagedFieldHolder getFieldHolder() { protected ItemStackTransfer createChargerItemHandler(Object... args) { var transfer = new ItemStackTransfer(); - transfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null); + transfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || + GTCapabilityHelper.getForgeEnergyItem(item) != null); return transfer; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java index adc57c3006..b367f0144c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableComputationContainer.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.api.machine.trait; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IOpticalComputationHatch; import com.gregtechceu.gtceu.api.capability.IOpticalComputationProvider; import com.gregtechceu.gtceu.api.capability.IOpticalComputationReceiver; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.capability.recipe.CWURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java index e07ddcdc77..21e0770f46 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/NotifiableEnergyContainer.java @@ -1,8 +1,10 @@ package com.gregtechceu.gtceu.api.machine.trait; +import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IElectricItem; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; +import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; @@ -10,6 +12,7 @@ import com.gregtechceu.gtceu.api.machine.TickableSubscription; import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine; import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTUtil; import com.lowdragmc.lowdraglib.side.item.IItemTransfer; @@ -18,6 +21,7 @@ import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder; import net.minecraft.core.Direction; +import net.minecraftforge.energy.IEnergyStorage; import lombok.Getter; import lombok.Setter; @@ -193,6 +197,15 @@ public boolean dischargeOrRechargeEnergyContainers(IItemTransfer itemHandler, in } return true; } + } else if (ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative) { + IEnergyStorage energyStorage = GTCapabilityHelper.getForgeEnergyItem(stackInSlot); + if (energyStorage != null && handleForgeEnergyItem(energyStorage, simulate)) { + if (!simulate) { + itemHandler.setStackInSlot(slotIndex, stackInSlot); + itemHandler.onContentsChanged(); + } + return true; + } } return false; } @@ -227,6 +240,20 @@ private boolean handleElectricItem(IElectricItem electricItem, boolean simulate) return false; } + private boolean handleForgeEnergyItem(IEnergyStorage energyStorage, boolean simulate) { + int machineTier = GTUtil.getTierByVoltage(Math.max(getInputVoltage(), getOutputVoltage())); + double chargePercent = getEnergyStored() / (getEnergyCapacity() * 1.0); + + if (chargePercent > 0.65) { // 2/3rds full + long chargedBy = FeCompat.insertEu(energyStorage, GTValues.V[machineTier], simulate); + if (!simulate) { + removeEnergy(chargedBy); + } + return chargedBy > 0; + } + return false; + } + @Override public long acceptEnergyFromNetwork(Direction side, long voltage, long amperage) { var latestTimeStamp = getMachine().getOffsetTimer(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 9cc667e458..cd31cebbbf 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -5,7 +5,7 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.addon.AddonFinder; import com.gregtechceu.gtceu.api.addon.IGTAddon; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.event.MaterialEvent; import com.gregtechceu.gtceu.api.data.chemical.material.event.MaterialRegistryEvent; @@ -88,6 +88,7 @@ public CommonProxy() { if (Platform.isDevEnv()) { ConfigHolder.INSTANCE.machines.doProcessingArray = true; ConfigHolder.INSTANCE.recipes.generateLowQualityGems = true; + ConfigHolder.INSTANCE.compat.energy.enablePlatformConverters = true; } GTRegistries.init(eventBus); diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/CableBlock.java b/src/main/java/com/gregtechceu/gtceu/common/block/CableBlock.java index 03bf79b543..7a4b6dce84 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/block/CableBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/common/block/CableBlock.java @@ -3,7 +3,7 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.MaterialPipeBlock; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.data.chemical.material.properties.WireProperties; diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java b/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java index f08d13c97f..a32e137d43 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/common/block/DuctPipeBlock.java @@ -3,7 +3,7 @@ import com.gregtechceu.gtceu.api.block.PipeBlock; import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardEmitter; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/LaserPipeBlock.java b/src/main/java/com/gregtechceu/gtceu/common/block/LaserPipeBlock.java index 7819738747..5a896530b2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/block/LaserPipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/common/block/LaserPipeBlock.java @@ -3,7 +3,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.block.PipeBlock; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.client.model.PipeModel; import com.gregtechceu.gtceu.client.renderer.block.PipeBlockRenderer; diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/OpticalPipeBlock.java b/src/main/java/com/gregtechceu/gtceu/common/block/OpticalPipeBlock.java index 015d2b002d..9d2312345a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/block/OpticalPipeBlock.java +++ b/src/main/java/com/gregtechceu/gtceu/common/block/OpticalPipeBlock.java @@ -3,7 +3,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.block.PipeBlock; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.client.model.PipeModel; import com.gregtechceu.gtceu.client.renderer.block.PipeBlockRenderer; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java index ca8e848311..057e527821 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/CableBlockEntity.java @@ -2,9 +2,9 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.data.chemical.material.properties.WireProperties; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java index d2e27a6984..3bcce2eb5a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/DuctPipeBlockEntity.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.blockentity; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.IEnvironmentalHazardCleaner; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java index 731c00a2df..63990f7bf9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/FluidPipeBlockEntity.java @@ -2,8 +2,8 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.ICoverable; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.data.chemical.material.properties.FluidPipeProperties; import com.gregtechceu.gtceu.api.fluids.FluidConstants; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java index 31da1ba8dc..3a31fe4e57 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/ItemPipeBlockEntity.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.blockentity; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.cover.CoverBehavior; import com.gregtechceu.gtceu.api.data.chemical.material.properties.ItemPipeProperties; import com.gregtechceu.gtceu.common.block.ItemPipeBlock; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java index 0d35e2cd4b..59920e7f56 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/LaserPipeBlockEntity.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.blockentity; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.ILaserContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.common.pipelike.laser.*; diff --git a/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java b/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java index cbb77bc2df..9bb54f36ed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java +++ b/src/main/java/com/gregtechceu/gtceu/common/blockentity/OpticalPipeBlockEntity.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.blockentity; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IDataAccessHatch; import com.gregtechceu.gtceu.api.capability.IOpticalComputationProvider; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.api.recipe.GTRecipe; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java index 4fba42271d..db4a238e05 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java @@ -6,7 +6,7 @@ import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.blockentity.MetaMachineBlockEntity; import com.gregtechceu.gtceu.api.capability.IMiner; -import com.gregtechceu.gtceu.api.capability.PlatformEnergyCompat; +import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; @@ -2693,13 +2693,13 @@ public static MachineDefinition[] registerConverter(int amperage) { .tooltips(Component.translatable("gtceu.machine.energy_converter.description"), Component.translatable("gtceu.machine.energy_converter.tooltip_tool_usage"), Component.translatable("gtceu.machine.energy_converter.tooltip_conversion_native", - PlatformEnergyCompat.toNativeLong(V[tier] * amperage, - PlatformEnergyCompat.ratio(true)), + FeCompat.toFeLong(V[tier] * amperage, + FeCompat.ratio(true)), amperage, V[tier], GTValues.VNF[tier]), Component.translatable("gtceu.machine.energy_converter.tooltip_conversion_eu", amperage, V[tier], GTValues.VNF[tier], - PlatformEnergyCompat.toNativeLong(V[tier] * amperage, - PlatformEnergyCompat.ratio(false)))) + FeCompat.toFeLong(V[tier] * amperage, + FeCompat.ratio(false)))) .compassNode("converter") .register(), ALL_TIERS); diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java index 18c9773a97..2546665993 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/PortableScannerBehavior.java @@ -3,11 +3,11 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.IMachineBlock; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IElectricItem; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; import com.gregtechceu.gtceu.api.capability.IWorkable; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.data.worldgen.bedrockfluid.BedrockFluidVeinSavedData; import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java index b9edd17363..58a6e8c114 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java @@ -2,6 +2,7 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.*; +import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine; @@ -26,6 +27,7 @@ import net.minecraft.core.Direction; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraftforge.energy.IEnergyStorage; import lombok.Getter; import lombok.Setter; @@ -95,7 +97,7 @@ protected NotifiableEnergyContainer createEnergyContainer(Object... args) { protected ItemStackTransfer createChargerInventory(Object... args) { var itemTransfer = new ItemStackTransfer(this.inventorySize); itemTransfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null || - GTCapabilityHelper.getPlatformEnergyItem(item) != null); + GTCapabilityHelper.getForgeEnergyItem(item) != null); return itemTransfer; } @@ -166,9 +168,9 @@ private List getNonFullElectricItem() { electricItems.add(electricItem); } } else if (ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative) { - var energyStorage = GTCapabilityHelper.getPlatformEnergyItem(electricItemStack); + var energyStorage = GTCapabilityHelper.getForgeEnergyItem(electricItemStack); if (energyStorage != null) { - if (energyStorage.getAmount() < energyStorage.getCapacity()) { + if (energyStorage.getEnergyStored() < energyStorage.getMaxEnergyStored()) { electricItems.add(energyStorage); } } @@ -232,9 +234,9 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long if (electricItem instanceof IElectricItem item) { charged += item.charge(Math.min(distributed, GTValues.V[item.getTier()] * AMPS_PER_ITEM), getTier(), true, false); - } else if (electricItem instanceof IPlatformEnergyStorage energyStorage) { - energy += PlatformEnergyCompat.insertEu(energyStorage, - Math.min(distributed, GTValues.V[getTier()] * AMPS_PER_ITEM)); + } else if (electricItem instanceof IEnergyStorage energyStorage) { + energy += FeCompat.insertEu(energyStorage, + Math.min(distributed, GTValues.V[getTier()] * AMPS_PER_ITEM), false); } if (charged > 0) { changed = true; @@ -263,10 +265,10 @@ public long getEnergyCapacity() { if (electricItem != null) { energyCapacity += electricItem.getMaxCharge(); } else if (ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative) { - var energyStorage = GTCapabilityHelper.getPlatformEnergyItem(electricItemStack); + var energyStorage = GTCapabilityHelper.getForgeEnergyItem(electricItemStack); if (energyStorage != null) { - energyCapacity += PlatformEnergyCompat.toEu(energyStorage.getCapacity(), - PlatformEnergyCompat.ratio(false)); + energyCapacity += FeCompat.toEu(energyStorage.getMaxEnergyStored(), + FeCompat.ratio(false)); } } } @@ -287,10 +289,10 @@ public long getEnergyStored() { if (electricItem != null) { energyStored += electricItem.getCharge(); } else if (ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative) { - var energyStorage = GTCapabilityHelper.getPlatformEnergyItem(electricItemStack); + var energyStorage = GTCapabilityHelper.getForgeEnergyItem(electricItemStack); if (energyStorage != null) { - energyStored += PlatformEnergyCompat.toEu(energyStorage.getAmount(), - PlatformEnergyCompat.ratio(false)); + energyStored += FeCompat.toEu(energyStorage.getEnergyStored(), + FeCompat.ratio(false)); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java index e57cea6247..0409a3a021 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/ConverterMachine.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.common.machine.electric; -import com.gregtechceu.gtceu.api.capability.PlatformEnergyCompat; +import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.gui.GuiTextures; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; @@ -66,16 +66,16 @@ public InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand playerIn.sendSystemMessage( Component.translatable("gtceu.machine.energy_converter.message_conversion_eu", getConverterTrait().getAmps(), getConverterTrait().getVoltage(), - PlatformEnergyCompat.toNativeLong( + FeCompat.toFeLong( getConverterTrait().getVoltage() * getConverterTrait().getAmps(), - PlatformEnergyCompat.ratio(false)))); + FeCompat.ratio(false)))); } else { setFeToEu(true); playerIn.sendSystemMessage( Component.translatable("gtceu.machine.energy_converter.message_conversion_native", - PlatformEnergyCompat.toNativeLong( + FeCompat.toFeLong( getConverterTrait().getVoltage() * getConverterTrait().getAmps(), - PlatformEnergyCompat.ratio(true)), + FeCompat.ratio(true)), getConverterTrait().getAmps(), getConverterTrait().getVoltage())); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java index 1aea33015e..1a71547d18 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/research/ResearchStationMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.electric.research; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IObjectHolder; import com.gregtechceu.gtceu.api.capability.IOpticalComputationProvider; import com.gregtechceu.gtceu.api.capability.IOpticalComputationReceiver; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.capability.recipe.CWURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java index 8f9719c6b0..61781b531e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/OpticalDataHatchMachine.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.common.machine.multiblock.part; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IDataAccessHatch; import com.gregtechceu.gtceu.api.capability.IOpticalDataAccessHatch; import com.gregtechceu.gtceu.api.capability.IWorkable; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity; import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java index 503d071cf7..1ba7ee9823 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/ConverterTrait.java @@ -2,8 +2,9 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; -import com.gregtechceu.gtceu.api.capability.IPlatformEnergyStorage; -import com.gregtechceu.gtceu.api.capability.PlatformEnergyCompat; +import com.gregtechceu.gtceu.api.capability.compat.FeCompat; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer; import com.gregtechceu.gtceu.common.machine.electric.ConverterMachine; @@ -12,9 +13,11 @@ import com.lowdragmc.lowdraglib.syncdata.annotation.RequireRerender; import com.lowdragmc.lowdraglib.syncdata.field.ManagedFieldHolder; +import net.minecraftforge.energy.IEnergyStorage; + import lombok.Getter; -public class ConverterTrait extends NotifiableEnergyContainer implements IPlatformEnergyStorage { +public class ConverterTrait extends NotifiableEnergyContainer { public static final ManagedFieldHolder MANAGED_FIELD_HOLDER = new ManagedFieldHolder(ConverterTrait.class, NotifiableEnergyContainer.MANAGED_FIELD_HOLDER); @@ -32,6 +35,8 @@ public class ConverterTrait extends NotifiableEnergyContainer implements IPlatfo private final int amps; @Getter private final long voltage; + @Getter + private final FEContainer feContainer; public ConverterTrait(ConverterMachine machine, int amps) { super(machine, GTValues.V[machine.getTier()] * 16 * amps, GTValues.V[machine.getTier()], amps, @@ -40,11 +45,12 @@ public ConverterTrait(ConverterMachine machine, int amps) { this.voltage = GTValues.V[machine.getTier()]; setSideInputCondition(side -> !this.feToEu && side != this.getMachine().getFrontFacing()); setSideOutputCondition(side -> this.feToEu && side == this.getMachine().getFrontFacing()); + this.feContainer = new FEContainer(machine); } - ////////////////////////////////////// + //////////////////////////////// // ***** Initialization ******// - ////////////////////////////////////// + //////////////////////////////// @Override public ManagedFieldHolder getFieldHolder() { return MANAGED_FIELD_HOLDER; @@ -55,9 +61,9 @@ public void setFeToEu(boolean feToEu) { machine.notifyBlockUpdate(); } - ////////////////////////////////////// + ////////////////////////////// // ********* logic *********// - ////////////////////////////////////// + ////////////////////////////// public void checkOutputSubscription() { outputSubs = getMachine().subscribeServerTick(outputSubs, this::serverTick); } @@ -68,11 +74,11 @@ public void serverTick() { super.serverTick(); } else { // output fe var fontFacing = machine.getFrontFacing(); - var energyContainer = GTCapabilityHelper.getPlatformEnergy(machine.getLevel(), + var energyContainer = GTCapabilityHelper.getForgeEnergy(machine.getLevel(), machine.getPos().relative(fontFacing), fontFacing.getOpposite()); - if (energyContainer != null && energyContainer.supportsInsertion()) { - var energyUsed = PlatformEnergyCompat.insertEu(energyContainer, - Math.min(getEnergyStored(), voltage * amps)); + if (energyContainer != null && energyContainer.canReceive()) { + var energyUsed = FeCompat.insertEu(energyContainer, + Math.min(getEnergyStored(), voltage * amps), false); if (energyUsed > 0) { setEnergyStored(getEnergyStored() - energyUsed); } @@ -80,42 +86,59 @@ public void serverTick() { } } - ////////////////////////////////////// - // **** PlatformEnergy *****// - ////////////////////////////////////// - @Override - public boolean supportsInsertion() { - return feToEu; - } + ////////////////////////////// + // ***** Forge Energy ******// + ////////////////////////////// - @Override - public boolean supportsExtraction() { - return false; - } + private class FEContainer extends MachineTrait implements IEnergyStorage { - @Override - public long insert(long maxReceive, boolean simulate) { - if (!feToEu || maxReceive <= 0) return 0; - long received = Math.min(getCapacity() - getAmount(), maxReceive); - received -= received % PlatformEnergyCompat.ratio(true); // avoid rounding issues - if (!simulate) { - addEnergy(PlatformEnergyCompat.toEu(received, PlatformEnergyCompat.ratio(true))); + protected static final ManagedFieldHolder MANAGED_FIELD_HOLDER = new ManagedFieldHolder(FEContainer.class); + + public FEContainer(MetaMachine machine) { + super(machine); } - return received; - } - @Override - public long extract(long maxExtract, boolean simulate) { - return 0; - } + @Override + public int receiveEnergy(int maxReceive, boolean simulate) { + if (!feToEu || maxReceive <= 0) return 0; + int received = Math.min(this.getMaxEnergyStored() - this.getEnergyStored(), maxReceive); + received -= received % FeCompat.ratio(true); // avoid rounding issues + if (!simulate) { + addEnergy(FeCompat.toEu(received, FeCompat.ratio(true))); + } + return received; + } - @Override - public long getAmount() { - return PlatformEnergyCompat.toNativeLong(getEnergyStored(), PlatformEnergyCompat.ratio(feToEu)); - } + @Override + public int extractEnergy(int maxExtract, boolean simulate) { + return 0; + } - @Override - public long getCapacity() { - return PlatformEnergyCompat.toNativeLong(getEnergyCapacity(), PlatformEnergyCompat.ratio(feToEu)); + @Override + public int getEnergyStored() { + return FeCompat.toFeBounded(ConverterTrait.this.getEnergyStored(), FeCompat.ratio(feToEu), + Integer.MAX_VALUE); + } + + @Override + public int getMaxEnergyStored() { + return FeCompat.toFeBounded(ConverterTrait.this.getEnergyCapacity(), FeCompat.ratio(feToEu), + Integer.MAX_VALUE); + } + + @Override + public boolean canExtract() { + return false; + } + + @Override + public boolean canReceive() { + return feToEu; + } + + @Override + public ManagedFieldHolder getFieldHolder() { + return MANAGED_FIELD_HOLDER; + } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetWalker.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetWalker.java index 6f1b5fd9cf..f02b5b1951 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetWalker.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/cable/EnergyNetWalker.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.pipelike.cable; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IEnergyContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.data.chemical.material.properties.WireProperties; import com.gregtechceu.gtceu.api.pipenet.PipeNetWalker; import com.gregtechceu.gtceu.common.blockentity.CableBlockEntity; diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetWalker.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetWalker.java index 46878c5012..62c136bfb3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetWalker.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/duct/DuctNetWalker.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.common.pipelike.duct; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.IHazardParticleContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.pipenet.PipeNetWalker; import com.gregtechceu.gtceu.common.blockentity.DuctPipeBlockEntity; diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetWalker.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetWalker.java index 1dc939e15e..bf3bed65d6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetWalker.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/laser/LaserNetWalker.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.pipelike.laser; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.ILaserContainer; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.pipenet.PipeNetWalker; import com.gregtechceu.gtceu.common.blockentity.LaserPipeBlockEntity; diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetWalker.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetWalker.java index 16711b1e8a..dbf79210f4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetWalker.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalNetWalker.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.common.pipelike.optical; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.pipenet.PipeNetWalker; import com.gregtechceu.gtceu.common.blockentity.OpticalPipeBlockEntity; diff --git a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java index 07ccff2fe6..c4a7f26962 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java +++ b/src/main/java/com/gregtechceu/gtceu/common/pipelike/optical/OpticalRoutePath.java @@ -1,10 +1,10 @@ package com.gregtechceu.gtceu.common.pipelike.optical; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IDataAccessHatch; import com.gregtechceu.gtceu.api.capability.IOpticalComputationProvider; import com.gregtechceu.gtceu.api.capability.IOpticalDataAccessHatch; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; import com.gregtechceu.gtceu.api.pipenet.IRoutePath; import com.gregtechceu.gtceu.common.blockentity.OpticalPipeBlockEntity; diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java index b17b0ab891..bc24fe372a 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.data.recipe.misc; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; @@ -1058,7 +1057,7 @@ public static void init(Consumer provider) { new UnificationEntry(TagPrefix.rotor, GTMaterials.StainlessSteel), 'H', HULL.getIngredient(HV), 'M', GTItems.ELECTRIC_MOTOR_HV.asStack(), 'C', CustomTags.HV_CIRCUITS); - if (ConfigHolder.INSTANCE.compat.energy.enablePlatformConverters && GTCEu.isRebornEnergyLoaded()) { + if (ConfigHolder.INSTANCE.compat.energy.enablePlatformConverters) { registerMachineRecipe(provider, true, GTMachines.ENERGY_CONVERTER_1A, " WW", "RMC", " WW", 'C', CIRCUIT, 'M', HULL, 'W', CABLE, 'R', new UnificationEntry(TagPrefix.cableGtSingle, GTMaterials.RedAlloy)); registerMachineRecipe(provider, true, GTMachines.ENERGY_CONVERTER_4A, " WW", "RMC", " WW", 'C', CIRCUIT, diff --git a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java index fd5c9778e7..6aa7f2757e 100644 --- a/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/forge/ForgeCommonEventListener.java @@ -4,10 +4,10 @@ import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.block.MaterialBlock; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; +import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IMedicalConditionTracker; -import com.gregtechceu.gtceu.api.capability.forge.GTCapability; -import com.gregtechceu.gtceu.api.capability.forge.compat.EUToFEProvider; +import com.gregtechceu.gtceu.api.capability.compat.EUToFEProvider; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.HazardProperty; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey;