diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/MatteryGUI.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/MatteryGUI.kt index 36533e2f4..fae1fea3f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/MatteryGUI.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/MatteryGUI.kt @@ -1,6 +1,8 @@ package ru.dbotthepony.mc.otm.client import com.mojang.blaze3d.systems.RenderSystem +import net.minecraft.client.gui.Font +import net.minecraft.client.gui.GuiGraphics import net.minecraft.client.gui.components.Button import net.minecraft.client.gui.screens.DeathScreen import net.minecraft.client.gui.screens.InBedChatScreen @@ -10,11 +12,14 @@ import net.minecraft.resources.ResourceLocation import net.minecraft.world.effect.MobEffects import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.ShieldItem import net.minecraftforge.client.event.RenderGuiEvent import net.minecraftforge.client.event.RenderGuiOverlayEvent import net.minecraftforge.client.event.ScreenEvent import net.minecraftforge.client.gui.overlay.ForgeGui import net.minecraftforge.client.gui.overlay.GuiOverlayManager +import net.minecraftforge.common.ToolActions import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.android.feature.NanobotsArmorFeature import ru.dbotthepony.mc.otm.core.TranslatableComponent @@ -31,6 +36,7 @@ import ru.dbotthepony.mc.otm.core.util.formatPower import ru.dbotthepony.mc.otm.core.ifPresentK import ru.dbotthepony.mc.otm.registry.AndroidFeatures import java.util.* +import kotlin.math.PI import kotlin.math.ceil object MatteryGUI { @@ -346,4 +352,22 @@ object MatteryGUI { renderPlayerHealth(event, gui) } } + + fun renderShieldCooldownOverlay(graphics: GuiGraphics, font: Font, stack: ItemStack, x: Int, y: Int): Boolean { + if (!stack.isEmpty && stack.item is ShieldItem) { + if (!stack.canPerformAction(ToolActions.SHIELD_BLOCK)) return false + + val ply = minecraft.player ?: return false + if (!ply.isUsingItem || stack != ply.useItem || ply.isBlocking) return false + + val percent = ((stack.item.getUseDuration(stack) - ply.useItemRemainingTicks) / 5f).coerceIn(0f, 1f) + RenderSystem.setShaderColor(1f, 1f, 1f, 0.5f) + drawArc(graphics, x + 8f, y + 8f, 8f, 0f, PI / 2.0, PI / 2.0 + PI * 2.0 * percent, alignAtCenter = true) + RenderSystem.setShaderColor(1f, 1f, 1f, 1f) + + return true + } + + return false + } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt index 10b28e3d4..30e37ea11 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -5,12 +5,12 @@ import com.google.common.collect.Streams import net.minecraft.advancements.CriteriaTriggers import net.minecraft.client.renderer.item.ItemProperties import net.minecraft.core.BlockPos -import net.minecraft.core.Registry import net.minecraft.core.registries.Registries import net.minecraft.resources.ResourceLocation import net.minecraft.world.entity.EntityType import net.minecraft.world.entity.ai.village.poi.PoiType import net.minecraft.world.entity.ai.village.poi.PoiTypes +import net.minecraft.world.item.Items import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.block.* import net.minecraft.world.level.block.state.BlockBehaviour @@ -19,6 +19,7 @@ import net.minecraft.world.level.block.state.properties.NoteBlockInstrument import net.minecraft.world.level.material.MapColor import net.minecraftforge.api.distmarker.Dist import net.minecraftforge.client.event.RegisterColorHandlersEvent +import net.minecraftforge.client.event.RegisterItemDecorationsEvent import net.minecraftforge.client.model.DynamicFluidContainerModel import net.minecraftforge.eventbus.api.IEventBus import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent @@ -37,6 +38,7 @@ import ru.dbotthepony.mc.otm.android.feature.NanobotsArmorFeature import ru.dbotthepony.mc.otm.block.decorative.CargoCrateBlock import ru.dbotthepony.mc.otm.block.decorative.TritaniumPressurePlate import ru.dbotthepony.mc.otm.capability.matteryEnergy +import ru.dbotthepony.mc.otm.client.MatteryGUI import ru.dbotthepony.mc.otm.compat.vanilla.MatteryChestMenu import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.data.DecimalProvider @@ -256,6 +258,7 @@ object MRegistry { bus.addListener(MStats::registerVanilla) bus.addListener(this::registerEvent) bus.addListener(this::registerItemColorHandlers) + bus.addListener(this::registerItemDecorators) MCreativeTabs.initialize(bus) @@ -353,4 +356,9 @@ object MRegistry { private fun registerItemColorHandlers(event: RegisterColorHandlersEvent.Item) { event.register(DynamicFluidContainerModel.Colors(), MItems.FLUID_CAPSULE) } + + private fun registerItemDecorators(event: RegisterItemDecorationsEvent) { + event.register(Items.SHIELD, MatteryGUI::renderShieldCooldownOverlay) + event.register(MItems.TRITANIUM_SHIELD, MatteryGUI::renderShieldCooldownOverlay) + } }