From 9107f63d9dd6cc3f4b9ea96728108eee93dd7a1e Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Fri, 7 Mar 2025 17:26:35 +0700 Subject: [PATCH] "Accept wireless charging" button in exopack --- .../mc/otm/datagen/lang/English.kt | 3 +++ .../mc/otm/datagen/lang/Russian.kt | 3 +++ .../entity/tech/AndroidChargerBlockEntity.kt | 2 +- .../mc/otm/capability/MatteryPlayer.kt | 2 ++ .../mc/otm/client/render/Widgets18.kt | 2 ++ .../mc/otm/client/screen/MatteryScreen.kt | 15 ++++++++++++++- .../mc/otm/menu/ExopackInventoryMenu.kt | 9 ++++++++- .../ru/dbotthepony/mc/otm/menu/MatteryMenu.kt | 4 +++- .../textures/gui/widgets/widget_18.png | Bin 1098 -> 1292 bytes .../textures/gui/widgets/widget_18.xcf | Bin 7343 -> 9864 bytes 10 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index b7797fb52..f217db8fe 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -982,6 +982,9 @@ private fun androidFeatures(provider: MatteryLanguageProvider) { private fun gui(provider: MatteryLanguageProvider) { with(provider.english) { + gui("exopack.accept_wireless_charge", "Accept wireless charging") + gui("exopack.dont_accept_wireless_charge", "Do not accept wireless charging") + gui("multiblock.formed", "Multiblock is formed: %s") gui("flywheel.current_loss_t", "Current energy loss per tick:") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 0efb16145..a5e49ff4c 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -975,6 +975,9 @@ private fun androidFeatures(provider: MatteryLanguageProvider) { private fun gui(provider: MatteryLanguageProvider) { with(provider.russian) { + gui("exopack.accept_wireless_charge", "Принимать заряд от беспроводных зарядников") + gui("exopack.dont_accept_wireless_charge", "Не принимать заряд от беспроводных зарядников") + gui("multiblock.formed", "Мультиблок сформирован: %s") gui("flywheel.current_loss_t", "Текущая потеря энергии в тик:") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AndroidChargerBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AndroidChargerBlockEntity.kt index 3c687d365..8d2df30aa 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AndroidChargerBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AndroidChargerBlockEntity.kt @@ -56,7 +56,7 @@ class AndroidChargerBlockEntity(blockPos: BlockPos, blockState: BlockState) : Ma if (!available.isPositive) return } - if (ply.hasExopack) { + if (ply.hasExopack && ply.acceptExopackChargeFromWirelessCharger) { val received = ply.exopackEnergy.receiveEnergyChecked(available, false) available -= received energyConfig.energy.extractEnergy(received, false) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayer.kt index d3c8ae76f..717b6d975 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayer.kt @@ -565,6 +565,7 @@ class MatteryPlayer(val ply: Player) { val exopackEnergy = ProfiledEnergyStorage(BatteryBackedEnergyStorage(ply, syncher, Decimal.ZERO, ExopackConfig.ENERGY_CAPACITY, false, onChange = { for (v in smelters) v.notify(MachineJobEventLoop.IdleReason.POWER) })) val exopackChargeSlots = MatteryContainer(4) + var acceptExopackChargeFromWirelessCharger = true init { savetables.int(::ticksIExist) @@ -578,6 +579,7 @@ class MatteryPlayer(val ply: Player) { savetables.bool(::isExopackVisible, "displayExoSuit") savetables.bool(::isExopackCraftingUpgraded, "isExoSuitCraftingUpgraded") savetables.bool(::isExopackEnderAccessInstalled, "isExopackEnderAccessUpgraded") + savetables.bool(::acceptExopackChargeFromWirelessCharger) savetables.int(::nextDischargeHurt) savetables.int(::nextHealTick) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/Widgets18.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/Widgets18.kt index 2d52e5824..5949f6962 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/Widgets18.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/Widgets18.kt @@ -43,6 +43,8 @@ object Widgets18 { val CURIOS_INVENTORY = miscGrid.next() val STATISTICS_TAB = miscGrid.next() val SETTINGS_TAB = miscGrid.next() + val WIRELESS_CHARGING_ENABLED = miscGrid.next() + val WIRELESS_CHARGING_DISABLED = miscGrid.next() private val slotBgGrid = WidgetLocation.SLOT_BACKGROUNDS.grid(4, 4) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt index 2eeccb3e4..dac9e5539 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.kt @@ -24,6 +24,7 @@ import ru.dbotthepony.mc.otm.client.render.WidgetLocation import ru.dbotthepony.mc.otm.client.render.Widgets18 import ru.dbotthepony.mc.otm.client.render.translation import ru.dbotthepony.mc.otm.client.screen.panels.* +import ru.dbotthepony.mc.otm.client.screen.panels.button.BooleanButtonPanel import ru.dbotthepony.mc.otm.client.screen.panels.button.DeviceControls import ru.dbotthepony.mc.otm.client.screen.panels.slot.AbstractSlotPanel import ru.dbotthepony.mc.otm.client.screen.panels.slot.BatterySlotPanel @@ -172,13 +173,25 @@ abstract class MatteryScreen(menu: T, inventory: Inventory, tit } protected fun makeChargePanels(frame: EditablePanel<*>) { - val chargeWidth = HorizontalPowerGaugePanel.GAUGE_BACKGROUND_TALL.width + AbstractSlotPanel.SIZE + 6f + ProgressGaugePanel.GAUGE_BACKGROUND.width * 2f + val chargeWidth = HorizontalPowerGaugePanel.GAUGE_BACKGROUND_TALL.width + AbstractSlotPanel.SIZE * 2 + 8f + ProgressGaugePanel.GAUGE_BACKGROUND.width * 2f val chargeStrip = BackgroundPanel.paddedCenter(this, frame, frame.width - chargeWidth - 6f, frame.height + 2f, chargeWidth, AbstractSlotPanel.SIZE) val chargeStrip2 = BackgroundPanel.paddedCenter(this, frame, frame.width + 2f, frame.height - AbstractSlotPanel.SIZE * 3f + 2f, AbstractSlotPanel.SIZE, AbstractSlotPanel.SIZE * 4f) chargeStrip.customDock { chargeStrip.setPos(frame.width - chargeWidth - 6f, frame.height + 2f) } chargeStrip2.customDock { chargeStrip2.setPos(frame.width + 2f, frame.height - AbstractSlotPanel.SIZE * 3f + 2f) } + BooleanButtonPanel.square18( + this, chargeStrip, + prop = menu.acceptExopackChargeFromWirelessCharger, + iconActive = Widgets18.WIRELESS_CHARGING_ENABLED, + iconInactive = Widgets18.WIRELESS_CHARGING_DISABLED, + tooltipActive = TranslatableComponent("otm.gui.exopack.accept_wireless_charge"), + tooltipInactive = TranslatableComponent("otm.gui.exopack.dont_accept_wireless_charge"), + ).also { + it.dock = Dock.LEFT + it.dockRight = 2f + } + BatterySlotPanel(this, chargeStrip, menu.exopackChargeSlots[0]).also { it.dock = Dock.LEFT } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ExopackInventoryMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ExopackInventoryMenu.kt index 6d27c6177..0d8e58e48 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ExopackInventoryMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ExopackInventoryMenu.kt @@ -7,7 +7,14 @@ import net.minecraft.server.level.ServerPlayer import net.minecraft.world.Container import net.minecraft.world.entity.ExperienceOrb import net.minecraft.world.entity.player.Player -import net.minecraft.world.inventory.* +import net.minecraft.world.inventory.AbstractContainerMenu +import net.minecraft.world.inventory.ContainerSynchronizer +import net.minecraft.world.inventory.CraftingContainer +import net.minecraft.world.inventory.CraftingMenu +import net.minecraft.world.inventory.ResultContainer +import net.minecraft.world.inventory.ResultSlot +import net.minecraft.world.inventory.Slot +import net.minecraft.world.inventory.TransientCraftingContainer import net.minecraft.world.item.ItemStack import net.neoforged.neoforge.network.PacketDistributor import ru.dbotthepony.mc.otm.capability.MatteryPlayer diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt index 674e64ea6..4a65058ae 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt @@ -44,6 +44,7 @@ import ru.dbotthepony.mc.otm.container.sortWithIndices import ru.dbotthepony.mc.otm.core.ResourceLocation import ru.dbotthepony.mc.otm.core.collect.ConditionalSet import ru.dbotthepony.mc.otm.core.math.Decimal +import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget import ru.dbotthepony.mc.otm.network.MatteryStreamCodec import ru.dbotthepony.mc.otm.network.MenuDataPacket @@ -207,7 +208,8 @@ abstract class MatteryMenu( var sortInventoryInput: SortInput? = null private set - val playerSortSettings = IItemStackSortingSettings.inputs(this, player.matteryPlayer?.sortingSettings) + val playerSortSettings = IItemStackSortingSettings.inputs(this, player.matteryPlayer.sortingSettings) + val acceptExopackChargeFromWirelessCharger = BooleanInputWithFeedback(this, true, player.matteryPlayer::acceptExopackChargeFromWirelessCharger) var offhandSlot: InventorySlot? = null protected set diff --git a/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets/widget_18.png b/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets/widget_18.png index 4ecb9767763641c75945cefd7d7059fb44900c6a..984eb0090e4df0f04d252134f3d0924fb5fc0f9c 100644 GIT binary patch delta 1229 zcmV;;1Ty=|2#gAlB!7cxLqkwWLqi~Na&Km7Y-IodD3N`UJxIeq9K~N#r79H%JBT=B zXr1h$B95gMi(sL&6nNgNw7S4z7YA_yOWBI4QbFiT_Iq zEn+-4?#H`(kGpq((5f-j?27@aW*M1eT+A0%#lS242w)IFM1Le^>Z$Bv4xZ!d9zMR_ zMR}I@xj)CSQZyOh6NzI?H!R`};<-&r=e$oGViidtJ|~_s=z_$LT$f#b<6L%F;F%#K zmq`$Zh{bXb%RS60hDtn399C3~@`b$13g<1(YOTRK_v9}O7PXZu*J(~5i6x|vh6ouA zR8fP4D6JYPCVw)tANTN&JN`7eWO7x($gzMrR7j2={11M2YnEoF-K1a~=zp>8j|dRh z1=>y9{yw(t_6gvB2ClTOzup4oKS^(PweS%zvJG5ZcQttrxZDB8o^;8O9LY~pD3yTs zGy0|iFnS9Nt+~B*_Hp_E7xV5I#qF2`09VY=|d74D@m7fLPiQvGE2> zJjQh>L5{I~XZu18zE7%DC+^k$^7;M}0{{pDKol_}hV^x0H6a!6iSd1qy#BJN{|wy1SvsEkU|Mkf|Q`=qYqW(xp1rUT)0(vE{3W+7Y4Lp zrlAY-AF z9M{gPkVHD-TqhZuFX3<{?ZljPQGXOGS$GX3x#}asyhI+9vfx^kG+7i&UFa+Nq$=7S z&;I`kg`z1S@Lm*z=A~Yb29wb5>{6o=LM7&uWzxRf#+OJjS{!(@V{Y?CuY`;-5BCK( z&h9U{sX?rR;Uy?mWD=ni?I}Jp7KtfGlKRO`E|XIOn+O|BV=e)A!rXD9&ws+idr4&m zJBN~1kY@wA3Mz8?J_15}w6FIs?woz|4W$&j{o?u~*Z0&+kX$4p+AT51+*hO&6NpG$ zC7DtJeZ_X~n>@%a6y}+gIw0abj1Q*laccX(zWp17ypH1MXEP#U6Eq}=Bh~D7?_cP0j@iAKv&b=DUq%&V6V;e--;kAS~9hypiZMz0zob2 rIedZ|k5+siwA%qr__c&W(H4FItj!@O+d8RZ00000NkvXXu0mjf)QLNm delta 1033 zcmV+k1or!k3d#tOB!7izLqkwWLqi~Na&Km7Y-IodD3N`UJxIeq9K~N-rG8W$>>%Qh zp?0zkD&knGSOg2Dt*F8LZ zy^HWH_j7-a0Xc6lz#|YxnWme>8^p7lrp9@nILJz(Ongo}q0I7loMJ6P&qR?-#X8RC$vsFd%`IxKVE;;d9^taVTR!a!bKNpqd%7~)t$0!avv zP(v9Nn26A-l7C_#Mf))q|ETRxl1n028H^kYs6v5g`@#R%la4x z{JTK2Zdu>Qmeo7~e9yp@+V)o)z}zS4^|lr|0*1DMi|e)~?E#lNz{ry(>Y^?AXnG3; z;QfrgDF+PS0)1;vZ>@ctJ^&f&YWW5@I0V8)%3gPQcM(r#Z~vZY_4fnhY;x2!K@2*R zumLcC=nD!4IV=``f6)K{0!B$hK~#9!?V3%F!Y~Yl?TSmV;s)#xCqSGTaRS7yH(LPQ6LZmfP~8w#iWj|F(xhIx}*2^0|0&s zLwP?GgvLofZ&yh#NKlP2b(OTQw(%8G8CM+UWrttmWXJCjnxI%tR_R z_7I;LOGL>lnfmKn&)9W^U0-C>8Lj|t!Q8emW*K4MI(Cp}0;M~sHs}|zS$S}5_Kk0Q z76Z%ML7|mr;ZEvzCEPhk=f;?y4bl>Ux~KWzKQE*T#Z0l^h2Zp<+g1$Jrp0T<9b$^K z?GuL+G0U`?(;BiEe`%os000000000000000fUf)jLz8#uM`5kc00000NkvXXu0mjf DPl()M diff --git a/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets/widget_18.xcf b/src/main/resources/assets/overdrive_that_matters/textures/gui/widgets/widget_18.xcf index ceec2f67e7ca9d94341498a229bea1b0fd481172..f9b632cf4e2692ec0fb220f9b0dec6b29aea08fc 100644 GIT binary patch literal 9864 zcmeHN-EUMy6rZ~v-H-0FbdiQiZEo$7w3-GsM2Jr&W*XTDP4~|qO%6@SdN~dlsnZoe#iOMm* zGBNVf=oFur92=V&J?5+S4z0=C8*|Q1^5%6R_KC*H9*sL+*Es)~##>+2cw1HD?Nb^* z@uJ5535^F{)A+WW+8|I?+rkgRYvJ|qa_zkDkURMRb;8sEpdKWkpY(In$e}9$`RpfU zXdv;VL-#s#+M#`i?sVvkLuVa22b$wC?ExeJ9Gm^`Ff@=Tkd{cm0}k!3C9rLZ{Aej) zD;M^Q6!}AAmD@TLqWrxo<%K6Z0iKA+6d(df0AheRpaT#EBmr!b7IB#oQJDo~K&K6# z^=!xXe2&kvANI$7Ju^-oQ&b}cX2igZ7?=?QGh$#y3^+n0$Owr%D4fM2+XL$_i5fhF1@8gkXdz)B5;ULmU<8`xk|vMPxhjs!VX-lfx_s_N z9x1JpEQCsdCjb#8;CrPIEDzW21|L#m<37Xvq}9FVX>BGpPd#fXU@IT9*QEA0sRJuD zZu#r9$iFeh_bc(;EUx=x^xv9!{I<^XfSs(PvBi}Vv?8!D_5rw%xVbgF$Stb3x;EXx zFx{4oiZ7Q=%A9iwRvyNvGM98+{=+71z{>oj`CaCvng^BvnJP(<+q*1euH?y_SeB(^ zby@7q9$4BdWGOqlRKot1eP#)TYGQVy=3dL-PU&l{Z0KhF*V=||+Sd=Prkm5TX_+W> zRAnhXyIfs+)=^EC+P%Ni;sQ<`>gA1r2`2l(#l14?90XOQqn(a;eBi*O6<2V9ziCc(ZkgE~5&RZfB@reeW`HmuQgWwwltr~>Q48vVEme7BPyw-asEkH_tT)41mqr)>K+i?-+8CUs!-d~W$0e*8X0 z;~(J80exEC(*U-+et)6%MtIdn+aChXlpWMl?^|_xMI^=?dOvMa z2UhQb<)8LS(!wB|bPWDCZm_)+4v_EpZTA5ULe(k1XPQO(h+Y3IUroNXAL1ZOjbllfW z|7g~?66*;dZ*IcePZMgtj;cJV_h#(DNr&sUSdCuo$@(~f*cg>^Rc}A{Ny5%rpbOj* zUWCJ&shv?bc~|h(dl}rea(y(3wU`B$zLWZAoI-l=Pbhc_f~NRJRTSo5eA+b)IYI@Ol|b~Dj^Yl-udhZUDdGsuPS(+I+AFavzc!RmI} z8MsW>Vgmeh#7TuWokD{N6h3ZJ2UbD(1=eXFtv{>KzMiM7B(J7{0lbc;eXIseo7PRl g?g9_@2z5uHm#kg7*1+iq{wr;rN24=YOL>R*7w>i~hX4Qo delta 367 zcmeD1U2i!dgHdZ@=4+3+3}C=<5khk>g3x?3A++Eu2rXO>p~ax;C6_?>aB^}jx6b4T zj58)%@_4&3ZH0?7Fn9pjLO{#{5o5Xup*fC1XfO#=1LQFMgov|W+r zHS=ErYEELDd|D)LbFnlhBa_ftu(Z%gu(Z&_&6{M_F*1ov1dEES1&MNsz??bxzkK;5 tg)$)8q)^VtB)$TyO8f{|ulSwKYZcEjF-ffki%J~_i%Q+!yg}s#BLJobO&