Exopack ender chest access upgrade

This commit is contained in:
DBotThePony 2023-07-30 01:50:30 +07:00
parent 912e361693
commit ed84905627
Signed by: DBot
GPG Key ID: DCC23B5715498507
15 changed files with 148 additions and 34 deletions

View File

@ -11,6 +11,7 @@ import ru.dbotthepony.mc.otm.datagen.modLocation
import ru.dbotthepony.mc.otm.registry.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.triggers.ExopackBatterySlotTrigger import ru.dbotthepony.mc.otm.triggers.ExopackBatterySlotTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackGainedCraftingTrigger import ru.dbotthepony.mc.otm.triggers.ExopackGainedCraftingTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackGainedEnderAccessTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackGainedSmeltingTrigger import ru.dbotthepony.mc.otm.triggers.ExopackGainedSmeltingTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackObtainedTrigger import ru.dbotthepony.mc.otm.triggers.ExopackObtainedTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackSlotsExpandedTrigger import ru.dbotthepony.mc.otm.triggers.ExopackSlotsExpandedTrigger
@ -78,6 +79,20 @@ fun addExopackAdvancements(serializer: Consumer<Advancement>, existingFileHelper
.addCriterion("smelting", ExopackGainedSmeltingTrigger.instance) .addCriterion("smelting", ExopackGainedSmeltingTrigger.instance)
.save(serializer, modLocation("exopack/smelting"), existingFileHelper) .save(serializer, modLocation("exopack/smelting"), existingFileHelper)
AdvancementBuilder()
.parent(obtained)
.display(
itemStack = ItemStack(Items.ENDER_CHEST),
title = translation.add("ender_access", "Ender-ious Access") {
russian("Эендер-иумый Доступ")
},
description = translation.add("ender_access.desc", "Gain direct access to your Ender Chest out of your Exopack") {
russian("Получите прямой доступ к содержимому вашего сундука края прямо из Экзопака")
},
)
.addCriterion("ender_access", ExopackGainedEnderAccessTrigger.instance)
.save(serializer, modLocation("ender_access/smelting"), existingFileHelper)
var size = AdvancementBuilder() var size = AdvancementBuilder()
.parent(obtained) .parent(obtained)
.display( .display(

View File

@ -77,6 +77,7 @@ fun addItemModels(provider: MatteryItemModelProvider) {
provider.generated(MItems.ExopackUpgrades.INVENTORY_UPGRADE_CREATIVE) provider.generated(MItems.ExopackUpgrades.INVENTORY_UPGRADE_CREATIVE)
provider.generated(MItems.ExopackUpgrades.CRAFTING_UPGRADE) provider.generated(MItems.ExopackUpgrades.CRAFTING_UPGRADE)
provider.generated(MItems.ExopackUpgrades.SMELTING_UPGRADE) provider.generated(MItems.ExopackUpgrades.SMELTING_UPGRADE)
provider.generated(MItems.ExopackUpgrades.ENDER_UPGRADE)
provider.component(MItems.TRITANIUM_DUST) provider.component(MItems.TRITANIUM_DUST)
provider.component(MItems.TRITANIUM_INGOT) provider.component(MItems.TRITANIUM_INGOT)

View File

@ -160,6 +160,7 @@ private fun misc(provider: MatteryLanguageProvider) {
gui("exopack_upgrades.slots_upgrade", "Using this will permanently grant %s slots in your Exopack inventory.") gui("exopack_upgrades.slots_upgrade", "Using this will permanently grant %s slots in your Exopack inventory.")
gui("exopack_upgrades.crafting_upgrade", "Using this will permanently grant 3x3 crafting grid in your Exopack inventory.") gui("exopack_upgrades.crafting_upgrade", "Using this will permanently grant 3x3 crafting grid in your Exopack inventory.")
gui("exopack_upgrades.smelting_upgrade", "Using this will permanently grant smelter in your Exopack inventory.") gui("exopack_upgrades.smelting_upgrade", "Using this will permanently grant smelter in your Exopack inventory.")
gui("exopack_upgrades.ender_access_upgrade", "Using this will permanently grant Ender Chest access in your Exopack inventory.")
gui("crude_battery.replace_in_world", "Simplistic nature of this battery allows to replace your energy source in the field without using Android Station.") gui("crude_battery.replace_in_world", "Simplistic nature of this battery allows to replace your energy source in the field without using Android Station.")
gui("crude_battery.replace_in_world_warning", "This operation is very unstable and can cause extreme damage to your systems!") gui("crude_battery.replace_in_world_warning", "This operation is very unstable and can cause extreme damage to your systems!")
@ -171,6 +172,7 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("exopack_upgrades.slots_upgraded", "Your Exopack has permanently gained %s slots") misc("exopack_upgrades.slots_upgraded", "Your Exopack has permanently gained %s slots")
misc("exopack_upgrades.crafting_upgraded", "Your Exopack has permanently gained 3x3 crafting grid") misc("exopack_upgrades.crafting_upgraded", "Your Exopack has permanently gained 3x3 crafting grid")
misc("exopack_upgrades.smelting_installed", "Your Exopack has permanently gained smelting module") misc("exopack_upgrades.smelting_installed", "Your Exopack has permanently gained smelting module")
misc("exopack_upgrades.ender_access_installed", "Your Exopack has permanently gained access to Ender Chest contents")
misc("exopack.granted1", "As you keep pressing on the fingerprint reader, probe disappears.") misc("exopack.granted1", "As you keep pressing on the fingerprint reader, probe disappears.")
misc("exopack.granted2", "After a moment, you are getting pierced into back multiple times...") misc("exopack.granted2", "After a moment, you are getting pierced into back multiple times...")
@ -495,12 +497,13 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_CREATIVE, "Creative Exopack Inventory Upgrade") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_CREATIVE, "Creative Exopack Inventory Upgrade")
add(MItems.ExopackUpgrades.CRAFTING_UPGRADE, "Exopack Crafting Upgrade") add(MItems.ExopackUpgrades.CRAFTING_UPGRADE, "Exopack Crafting Upgrade")
add(MItems.ExopackUpgrades.SMELTING_UPGRADE, "Exopack Smelting Module") add(MItems.ExopackUpgrades.SMELTING_UPGRADE, "Exopack Smelting Module")
add(MItems.ExopackUpgrades.ENDER_UPGRADE, "Exopack Ender Access Module")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_WITHER, "Superdense Packing Upgrade") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_WITHER, "Superdense Packing Upgrade")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_WITHER, "description", "Utilizes similar principle that exhibit Nether Stars") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_WITHER, "description", "Utilizes similar principle that exhibit Nether Stars")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON, "Ender Link Pocket Dimension Upgrade") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON, "Ender Link Pocket Dimension Upgrade")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON, "description", "Allows to store items in portable pocket dimension") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON, "description", "Allows to store items in portable pocket dimension. Also grants access to Ender Chest contents.")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL, "Indescribable Exopack Inventory Upgrade") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL, "Indescribable Exopack Inventory Upgrade")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL, "description", "They normally generate in dungeons with appropriate NBT tag attached") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL, "description", "They normally generate in dungeons with appropriate NBT tag attached")

View File

@ -165,9 +165,10 @@ private fun misc(provider: MatteryLanguageProvider) {
gui("exopack_upgrades.no_exopack", "Данный пазл технологии кажется для вас бесполезным... Или..?!") gui("exopack_upgrades.no_exopack", "Данный пазл технологии кажется для вас бесполезным... Или..?!")
gui("exopack_upgrades.already_activated", "Улучшение уже активно!") gui("exopack_upgrades.already_activated", "Улучшение уже активно!")
gui("exopack_upgrades.slots_upgrade", "Активируя данное улучшение даст %s слотов в вашем экзопаке.") gui("exopack_upgrades.slots_upgrade", "Активируя данное улучшение даст %s слотов в вашем Экзопаке.")
gui("exopack_upgrades.crafting_upgrade", "Активация данного улучшения даст 3x3 сетку создания в вашем экзопаке.") gui("exopack_upgrades.crafting_upgrade", "Активация данного улучшения даст 3x3 сетку создания в вашем Экзопаке.")
gui("exopack_upgrades.smelting_upgrade", "Активация данного улучшения даст плавильню в вашем экзопаке.") gui("exopack_upgrades.smelting_upgrade", "Активация данного улучшения даст плавильню в вашем Экзопаке.")
gui("exopack_upgrades.ender_access_upgrade", "Активация данного улучшения даст доступ к сундуку края в вашем Экзопаке.")
gui("crude_battery.replace_in_world", "Простота устройства данного аккумулятора позволяет вам заменить .") gui("crude_battery.replace_in_world", "Простота устройства данного аккумулятора позволяет вам заменить .")
gui("crude_battery.replace_in_world_warning", "Данная операция крайне рискованная и может нанести огромный урон вашим системам!") gui("crude_battery.replace_in_world_warning", "Данная операция крайне рискованная и может нанести огромный урон вашим системам!")
@ -176,9 +177,10 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("battery.single_use", "Единоразовая батарейка, не может быть перезаряжена.") misc("battery.single_use", "Единоразовая батарейка, не может быть перезаряжена.")
misc("exopack_upgrades.slots_upgraded", "Ваш экзопак был расширен на %s слотов") misc("exopack_upgrades.slots_upgraded", "Ваш Экзопак был расширен на %s слотов")
misc("exopack_upgrades.crafting_upgraded", "Ваш экзопак получил 3x3 сетку создания") misc("exopack_upgrades.crafting_upgraded", "Ваш Экзопак получил 3x3 сетку создания")
misc("exopack_upgrades.smelting_installed", "Ваш экзопак получил плавильню") misc("exopack_upgrades.smelting_installed", "Ваш Экзопак получил плавильню")
misc("exopack_upgrades.ender_access_installed", "Ваш Экзопак получил доступ к содержимому сундука края")
misc("exopack.granted1", "После некоторого времени нажатия на сканер отпечатка, маяк исчезает.") misc("exopack.granted1", "После некоторого времени нажатия на сканер отпечатка, маяк исчезает.")
misc("exopack.granted2", "Через мгновение, вашу спину пронзают множество раз...") misc("exopack.granted2", "Через мгновение, вашу спину пронзают множество раз...")
@ -498,12 +500,13 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_CREATIVE, "Творческое обновление инвентаря экзопака") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_CREATIVE, "Творческое обновление инвентаря экзопака")
add(MItems.ExopackUpgrades.CRAFTING_UPGRADE, "Обновление сетки крафта экзопака") add(MItems.ExopackUpgrades.CRAFTING_UPGRADE, "Обновление сетки крафта экзопака")
add(MItems.ExopackUpgrades.SMELTING_UPGRADE, "Модуль плавильни экзопака") add(MItems.ExopackUpgrades.SMELTING_UPGRADE, "Модуль плавильни экзопака")
add(MItems.ExopackUpgrades.ENDER_UPGRADE, "Модуль доступа к сундуку края экзопака")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_WITHER, "Обновление сверхмассивной упаковки") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_WITHER, "Обновление сверхмассивной упаковки")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_WITHER, "description", "Использует те же принципы, которыми обладают звёзды незера") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_WITHER, "description", "Использует те же принципы, которыми обладают звёзды незера")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON, "Обновление соединения края экзопака") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON, "Обновление соединения края экзопака")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON, "description", "Позволяет хранить предметы в карманном измерении") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON, "description", "Позволяет хранить предметы в карманном измерении. А так же даёт доступ к содержимому сундука края.")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL, "Неописуемое обновление инвентаря экзопака") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL, "Неописуемое обновление инвентаря экзопака")
add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL, "description", "В нормальных условиях, они появляются в сундуках") add(MItems.ExopackUpgrades.INVENTORY_UPGRADE_PROCEDURAL, "description", "В нормальных условиях, они появляются в сундуках")

View File

@ -324,6 +324,13 @@ fun addCraftingTableRecipes(consumer: Consumer<FinishedRecipe>) {
.row(MItemTags.TRITANIUM_PLATES, Items.FURNACE, MItemTags.TRITANIUM_PLATES) .row(MItemTags.TRITANIUM_PLATES, Items.FURNACE, MItemTags.TRITANIUM_PLATES)
.build(consumer) .build(consumer)
// апгрейд на эндер сундук
MatteryRecipe(MItems.ExopackUpgrades.ENDER_UPGRADE, category = RecipeCategory.TOOLS)
.row(MItemTags.ADVANCED_CIRCUIT, MItems.ELECTROMAGNET, MItemTags.ADVANCED_CIRCUIT)
.row(MItems.ELECTROMAGNET, Items.ENDER_CHEST, MItems.ELECTROMAGNET)
.row(MItemTags.TRITANIUM_PLATES, MItems.ELECTROMAGNET, MItemTags.TRITANIUM_PLATES)
.build(consumer)
// генератор коблы // генератор коблы
MatteryRecipe(MItems.COBBLESTONE_GENERATOR, category = machinesCategory) MatteryRecipe(MItems.COBBLESTONE_GENERATOR, category = machinesCategory)
.row(MItemTags.HARDENED_GLASS_COLORLESS, MItems.TRITANIUM_PICKAXE, MItemTags.HARDENED_GLASS_COLORLESS) .row(MItemTags.HARDENED_GLASS_COLORLESS, MItems.TRITANIUM_PICKAXE, MItemTags.HARDENED_GLASS_COLORLESS)

View File

@ -5,13 +5,11 @@ import com.mojang.blaze3d.vertex.PoseStack
import it.unimi.dsi.fastutil.ints.IntAVLTreeSet import it.unimi.dsi.fastutil.ints.IntAVLTreeSet
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap
import net.minecraft.ChatFormatting import net.minecraft.ChatFormatting
import net.minecraft.client.Minecraft
import net.minecraft.client.model.PlayerModel import net.minecraft.client.model.PlayerModel
import net.minecraft.client.player.AbstractClientPlayer import net.minecraft.client.player.AbstractClientPlayer
import net.minecraft.commands.Commands import net.minecraft.commands.Commands
import net.minecraft.commands.arguments.EntityArgument import net.minecraft.commands.arguments.EntityArgument
import net.minecraft.core.Direction import net.minecraft.core.Direction
import net.minecraft.core.particles.ParticleTypes
import net.minecraft.nbt.ByteTag import net.minecraft.nbt.ByteTag
import net.minecraft.nbt.CompoundTag import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.IntTag import net.minecraft.nbt.IntTag
@ -91,11 +89,7 @@ import ru.dbotthepony.mc.otm.core.collect.UUIDIntModifiersMap
import ru.dbotthepony.mc.otm.core.collect.filter import ru.dbotthepony.mc.otm.core.collect.filter
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.RGBAColor import ru.dbotthepony.mc.otm.core.math.RGBAColor
import ru.dbotthepony.mc.otm.core.math.component1
import ru.dbotthepony.mc.otm.core.math.component2
import ru.dbotthepony.mc.otm.core.math.component3
import ru.dbotthepony.mc.otm.core.math.minus import ru.dbotthepony.mc.otm.core.math.minus
import ru.dbotthepony.mc.otm.core.math.toRadians
import ru.dbotthepony.mc.otm.core.nbt.getByteList import ru.dbotthepony.mc.otm.core.nbt.getByteList
import ru.dbotthepony.mc.otm.core.nbt.getCompoundList import ru.dbotthepony.mc.otm.core.nbt.getCompoundList
import ru.dbotthepony.mc.otm.core.nbt.getIntList import ru.dbotthepony.mc.otm.core.nbt.getIntList
@ -114,6 +108,7 @@ import ru.dbotthepony.mc.otm.network.SmokeParticlesPacket.Companion.makeSmoke
import ru.dbotthepony.mc.otm.network.synchronizer.FieldSynchronizer import ru.dbotthepony.mc.otm.network.synchronizer.FieldSynchronizer
import ru.dbotthepony.mc.otm.registry.AndroidFeatures import ru.dbotthepony.mc.otm.registry.AndroidFeatures
import ru.dbotthepony.mc.otm.registry.MDamageTypes import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MRegistry import ru.dbotthepony.mc.otm.registry.MRegistry
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
import ru.dbotthepony.mc.otm.triggers.AndroidResearchTrigger import ru.dbotthepony.mc.otm.triggers.AndroidResearchTrigger
@ -123,14 +118,13 @@ import ru.dbotthepony.mc.otm.triggers.BecomeAndroidSleepTrigger
import ru.dbotthepony.mc.otm.triggers.BecomeAndroidTrigger import ru.dbotthepony.mc.otm.triggers.BecomeAndroidTrigger
import ru.dbotthepony.mc.otm.triggers.BecomeHumaneTrigger import ru.dbotthepony.mc.otm.triggers.BecomeHumaneTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackGainedCraftingTrigger import ru.dbotthepony.mc.otm.triggers.ExopackGainedCraftingTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackGainedEnderAccessTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackGainedSmeltingTrigger import ru.dbotthepony.mc.otm.triggers.ExopackGainedSmeltingTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackObtainedTrigger import ru.dbotthepony.mc.otm.triggers.ExopackObtainedTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackSlotsExpandedTrigger import ru.dbotthepony.mc.otm.triggers.ExopackSlotsExpandedTrigger
import java.util.* import java.util.*
import java.util.stream.Stream import java.util.stream.Stream
import kotlin.collections.ArrayDeque import kotlin.collections.ArrayDeque
import kotlin.math.cos
import kotlin.math.sin
import kotlin.reflect.KMutableProperty1 import kotlin.reflect.KMutableProperty1
private fun Player.dropContainer(container: Container, spill: Boolean = true, setThrower: Boolean = false) { private fun Player.dropContainer(container: Container, spill: Boolean = true, setThrower: Boolean = false) {
@ -236,7 +230,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
*/ */
val tickList = TickList() val tickList = TickList()
private val exoPackSlotModifierMap: MutableMap<UUID, Int> by synchronizer.Map( private val exopackSlotModifierMap: MutableMap<UUID, Int> by synchronizer.Map(
keyCodec = UUIDValueCodec, keyCodec = UUIDValueCodec,
valueCodec = IntValueCodec, valueCodec = IntValueCodec,
backingMap = HashMap(), backingMap = HashMap(),
@ -256,7 +250,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
} else { } else {
exopackContainer = PlayerMatteryContainer(it) exopackContainer = PlayerMatteryContainer(it)
} }
}, backingMap = this.exoPackSlotModifierMap) }, backingMap = this.exopackSlotModifierMap)
val regularSlotFilters = immutableList(Inventory.INVENTORY_SIZE) { val regularSlotFilters = immutableList(Inventory.INVENTORY_SIZE) {
synchronizer.Field(null, ItemValueCodec.nullable) synchronizer.Field(null, ItemValueCodec.nullable)
@ -322,6 +316,17 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
} }
}).property }).property
var isExopackEnderAccessInstalled by publicSynchronizer.bool(setter = setter@{ value, access, _ ->
if (value != access.readBoolean()) {
access.write(value)
_exoPackMenu = null
if (value && ply is ServerPlayer) {
ExopackGainedEnderAccessTrigger.trigger(ply)
}
}
}).property
private var _exoPackMenu: ExopackInventoryMenu? = null private var _exoPackMenu: ExopackInventoryMenu? = null
set(value) { set(value) {
if (field == ply.containerMenu) { ply.closeContainer() } if (field == ply.containerMenu) { ply.closeContainer() }
@ -511,6 +516,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
savetables.bool(::hasExopack, "hasExoSuit") savetables.bool(::hasExopack, "hasExoSuit")
savetables.bool(::isExopackVisible, "displayExoSuit") savetables.bool(::isExopackVisible, "displayExoSuit")
savetables.bool(::isExopackCraftingUpgraded, "isExoSuitCraftingUpgraded") savetables.bool(::isExopackCraftingUpgraded, "isExoSuitCraftingUpgraded")
savetables.bool(::isExopackEnderAccessInstalled, "isExopackEnderAccessUpgraded")
savetables.int(::nextDischargeHurt) savetables.int(::nextDischargeHurt)
savetables.int(::nextHealTick) savetables.int(::nextHealTick)
@ -902,6 +908,10 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
override fun deserializeNBT(tag: CompoundTag) { override fun deserializeNBT(tag: CompoundTag) {
savetables.deserializeNBT(tag) savetables.deserializeNBT(tag)
if (MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON.uuid(ItemStack.EMPTY) in exopackSlotModifierMap) {
isExopackEnderAccessInstalled = true
}
if (ply is ServerPlayer && hasExopack) if (ply is ServerPlayer && hasExopack)
ExopackSlotsExpandedTrigger.trigger(ply, 0, exopackContainer.containerSize) ExopackSlotsExpandedTrigger.trigger(ply, 0, exopackContainer.containerSize)
@ -1473,6 +1483,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
enum class UpgradeType(val prop: KMutableProperty1<MatteryPlayerCapability, Boolean>) { enum class UpgradeType(val prop: KMutableProperty1<MatteryPlayerCapability, Boolean>) {
CRAFTING(MatteryPlayerCapability::isExopackCraftingUpgraded), CRAFTING(MatteryPlayerCapability::isExopackCraftingUpgraded),
ENDER_ACCESS(MatteryPlayerCapability::isExopackEnderAccessInstalled),
SMELTING(MatteryPlayerCapability::isExopackSmeltingInstalled); SMELTING(MatteryPlayerCapability::isExopackSmeltingInstalled);
} }

View File

@ -147,24 +147,28 @@ class ExopackInventoryScreen(menu: ExopackInventoryMenu) : MatteryScreen<Exopack
width = craftingCanvas.width - resultPanel.width - craftingSlotsCanvas.width, width = craftingCanvas.width - resultPanel.width - craftingSlotsCanvas.width,
height = topLine.height, centerSprite = true) height = topLine.height, centerSprite = true)
if (menu.capability.isExopackSmeltingInstalled) { if (menu.capability.isExopackSmeltingInstalled || menu.capability.isExopackEnderAccessInstalled) {
val craftingTab = frame.Tab() val craftingTab = frame.Tab()
val furnaceTab = frame.Tab()
craftingTab.activeIcon = ItemStackIcon(ItemStack(Items.CRAFTING_TABLE)) craftingTab.activeIcon = ItemStackIcon(ItemStack(Items.CRAFTING_TABLE))
craftingTab.inactiveIcon = craftingTab.activeIcon craftingTab.inactiveIcon = craftingTab.activeIcon
furnaceTab.activeIcon = ItemStackIcon(ItemStack(Items.FURNACE))
furnaceTab.inactiveIcon = furnaceTab.activeIcon
craftingTab.onOpen = Runnable { craftingCanvas.visible = true } craftingTab.onOpen = Runnable { craftingCanvas.visible = true }
craftingTab.onClose = Runnable { craftingCanvas.visible = false } craftingTab.onClose = Runnable { craftingCanvas.visible = false }
}
if (menu.capability.isExopackSmeltingInstalled) {
val tab = frame.Tab()
tab.activeIcon = ItemStackIcon(ItemStack(Items.FURNACE))
tab.inactiveIcon = tab.activeIcon
val furnaceCanvas = EditablePanel(this, topLine, width = 90f) val furnaceCanvas = EditablePanel(this, topLine, width = 90f)
furnaceCanvas.dock = Dock.LEFT furnaceCanvas.dock = Dock.LEFT
furnaceCanvas.visible = false furnaceCanvas.visible = false
furnaceTab.onOpen = Runnable { furnaceCanvas.visible = true; menu.furnaceMenuOpenState.accept(true) } tab.onOpen = Runnable { furnaceCanvas.visible = true; menu.furnaceMenuOpenState.accept(true) }
furnaceTab.onClose = Runnable { furnaceCanvas.visible = false; menu.furnaceMenuOpenState.accept(false) } tab.onClose = Runnable { furnaceCanvas.visible = false; menu.furnaceMenuOpenState.accept(false) }
for (i in menu.capability.smelters.indices) { for (i in menu.capability.smelters.indices) {
val row = EditablePanel(this, furnaceCanvas, height = AbstractSlotPanel.SIZE) val row = EditablePanel(this, furnaceCanvas, height = AbstractSlotPanel.SIZE)
@ -191,7 +195,47 @@ class ExopackInventoryScreen(menu: ExopackInventoryMenu) : MatteryScreen<Exopack
} }
if (menu.furnaceMenuOpenState.get()) { if (menu.furnaceMenuOpenState.get()) {
furnaceTab.onClick(InputConstants.MOUSE_BUTTON_LEFT) tab.activate()
}
}
if (menu.capability.isExopackEnderAccessInstalled) {
val tab = frame.Tab()
tab.activeIcon = ItemStackIcon(ItemStack(Items.ENDER_CHEST))
tab.inactiveIcon = tab.activeIcon
val enderCanvas = EditablePanel(this, topLine, height = AbstractSlotPanel.SIZE * 3f, width = AbstractSlotPanel.SIZE * 9f)
enderCanvas.dock = Dock.LEFT
enderCanvas.visible = false
enderCanvas.dockTop = 8f
enderCanvas.dockLeft = 8f
tab.onOpen = Runnable {
enderCanvas.visible = true
equipment.visible = false
menu.enderChestOpenState.accept(true)
}
tab.onClose = Runnable {
enderCanvas.visible = false
equipment.visible = true
menu.enderChestOpenState.accept(false)
}
for (row in 0 .. 2) {
val rowPanel = EditablePanel(this, enderCanvas, height = AbstractSlotPanel.SIZE)
rowPanel.dock = Dock.TOP
for (column in 0 .. 8) {
SlotPanel(this, rowPanel, menu.enderChestSlots[row * 9 + column]).also {
it.dock = Dock.LEFT
}
}
}
if (menu.enderChestOpenState.get()) {
tab.activate()
} }
} }

View File

@ -34,6 +34,7 @@ open class FramePanel<out S : Screen>(
var inactiveIcon: IGUIRenderable? = null, var inactiveIcon: IGUIRenderable? = null,
) : AbstractButtonPanel<S>(this@FramePanel.screen, this@FramePanel, 0f, 0f, 26f, 28f) { ) : AbstractButtonPanel<S>(this@FramePanel.screen, this@FramePanel, 0f, 0f, 26f, 28f) {
var isActive = tabs.isEmpty() var isActive = tabs.isEmpty()
protected set
init { init {
tabs.add(this) tabs.add(this)
@ -117,7 +118,7 @@ open class FramePanel<out S : Screen>(
onClose?.run() onClose?.run()
} }
override fun onClick(mouseButton: Int) { fun activate() {
if (!isActive) { if (!isActive) {
for (tab in tabs) { for (tab in tabs) {
if (tab !== this) { if (tab !== this) {
@ -133,6 +134,10 @@ open class FramePanel<out S : Screen>(
} }
} }
override fun onClick(mouseButton: Int) {
activate()
}
override fun onRemoved() { override fun onRemoved() {
super.onRemoved() super.onRemoved()
tabs.remove(this) tabs.remove(this)

View File

@ -20,6 +20,7 @@ import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.isExplosion import ru.dbotthepony.mc.otm.core.isExplosion
import ru.dbotthepony.mc.otm.core.isFire import ru.dbotthepony.mc.otm.core.isFire
import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.runIfClient import ru.dbotthepony.mc.otm.runIfClient
import ru.dbotthepony.mc.otm.triggers.ExopackSlotsExpandedTrigger import ru.dbotthepony.mc.otm.triggers.ExopackSlotsExpandedTrigger
import java.util.UUID import java.util.UUID
@ -108,6 +109,10 @@ abstract class AbstractExopackSlotUpgradeItem(properties: Properties = defaultPr
ExopackSlotsExpandedTrigger.trigger(player, slotCount, matteryPlayer.exopackContainer.containerSize) ExopackSlotsExpandedTrigger.trigger(player, slotCount, matteryPlayer.exopackContainer.containerSize)
player.displayClientMessage(TranslatableComponent("otm.exopack_upgrades.slots_upgraded", slotCount).withStyle(ChatFormatting.DARK_GREEN), false) player.displayClientMessage(TranslatableComponent("otm.exopack_upgrades.slots_upgraded", slotCount).withStyle(ChatFormatting.DARK_GREEN), false)
if (this === MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON) {
MItems.ExopackUpgrades.ENDER_UPGRADE.finishUsingItem(ItemStack(MItems.ExopackUpgrades.INVENTORY_UPGRADE_ENDER_DRAGON), level, player)
}
} }
return itemStack return itemStack

View File

@ -115,6 +115,21 @@ class ExopackInventoryMenu(val capability: MatteryPlayerCapability) : MatteryMen
addStorageSlot(furnaceOutputs, condition = furnaceMenuOpenState) addStorageSlot(furnaceOutputs, condition = furnaceMenuOpenState)
} }
val enderChestSlots: List<MatterySlot>
val enderChestOpenState = InstantBooleanInput(this)
init {
if (capability.isExopackEnderAccessInstalled) {
enderChestSlots = makeSlots(ply.enderChestInventory) { a, b ->
MatterySlot(a, b).also {
addStorageSlot(it, condition = enderChestOpenState)
}
}
} else {
enderChestSlots = listOf()
}
}
private var isRemoved = false private var isRemoved = false
override fun slotsChanged(container: Container) { override fun slotsChanged(container: Container) {

View File

@ -188,6 +188,7 @@ private fun addMainCreativeTabItems(consumer: CreativeModeTab.Output) {
accept(MItems.ExopackUpgrades.INVENTORY_UPGRADE_CREATIVE) accept(MItems.ExopackUpgrades.INVENTORY_UPGRADE_CREATIVE)
accept(MItems.ExopackUpgrades.CRAFTING_UPGRADE) accept(MItems.ExopackUpgrades.CRAFTING_UPGRADE)
accept(MItems.ExopackUpgrades.SMELTING_UPGRADE) accept(MItems.ExopackUpgrades.SMELTING_UPGRADE)
accept(MItems.ExopackUpgrades.ENDER_UPGRADE)
accept(MItems.ExopackUpgrades.INVENTORY_UPGRADE_BIG) accept(MItems.ExopackUpgrades.INVENTORY_UPGRADE_BIG)
accept(MItems.ExopackUpgrades.INVENTORY_UPGRADE_HUGE) accept(MItems.ExopackUpgrades.INVENTORY_UPGRADE_HUGE)

View File

@ -512,21 +512,22 @@ object MItems {
val EXOPACK_PROBE: Item by registry.register(MNames.EXOPACK_PROBE, ::ExopackProbeItem) val EXOPACK_PROBE: Item by registry.register(MNames.EXOPACK_PROBE, ::ExopackProbeItem)
object ExopackUpgrades { object ExopackUpgrades {
val INVENTORY_UPGRADE_CREATIVE: Item by registry.register("exosuit_inventory_upgrade_creative") { ExopackSlotUpgradeItem(null, 27, Rarity.EPIC) } val INVENTORY_UPGRADE_CREATIVE: ExopackSlotUpgradeItem by registry.register("exosuit_inventory_upgrade_creative") { ExopackSlotUpgradeItem(null, 27, Rarity.EPIC) }
val CRAFTING_UPGRADE: Item by registry.register("exosuit_crafting_upgrade") { ExopackUpgradeItem(MatteryPlayerCapability.UpgradeType.CRAFTING, "crafting_upgrade", "crafting_upgraded") } val CRAFTING_UPGRADE: ExopackUpgradeItem by registry.register("exosuit_crafting_upgrade") { ExopackUpgradeItem(MatteryPlayerCapability.UpgradeType.CRAFTING, "crafting_upgrade", "crafting_upgraded") }
val SMELTING_UPGRADE: Item by registry.register("exopack_smelting_upgrade") { ExopackUpgradeItem(MatteryPlayerCapability.UpgradeType.SMELTING, "smelting_upgrade", "smelting_installed") } val SMELTING_UPGRADE: ExopackUpgradeItem by registry.register("exopack_smelting_upgrade") { ExopackUpgradeItem(MatteryPlayerCapability.UpgradeType.SMELTING, "smelting_upgrade", "smelting_installed") }
val ENDER_UPGRADE: ExopackUpgradeItem by registry.register("exopack_ender_upgrade") { ExopackUpgradeItem(MatteryPlayerCapability.UpgradeType.ENDER_ACCESS, "ender_access_upgrade", "ender_access_installed") }
val INVENTORY_UPGRADES = SupplierList(8) { val INVENTORY_UPGRADES = SupplierList(8) {
registry.register("exosuit_inventory_upgrade_$it") { ExopackSlotUpgradeItem(18, Rarity.COMMON) }::get registry.register("exosuit_inventory_upgrade_$it") { ExopackSlotUpgradeItem(18, Rarity.COMMON) }::get
} }
val INVENTORY_UPGRADE_PROCEDURAL: Item by registry.register("exosuit_inventory_upgrade_procedural") { ProceduralExopackSlotUpgradeItem() } val INVENTORY_UPGRADE_PROCEDURAL: ProceduralExopackSlotUpgradeItem by registry.register("exosuit_inventory_upgrade_procedural") { ProceduralExopackSlotUpgradeItem() }
val INVENTORY_UPGRADE_BIG: Item by registry.register("exosuit_inventory_upgrade_big") { ExopackSlotUpgradeItem(60, Rarity.RARE) } val INVENTORY_UPGRADE_BIG: ExopackSlotUpgradeItem by registry.register("exosuit_inventory_upgrade_big") { ExopackSlotUpgradeItem(60, Rarity.RARE) }
val INVENTORY_UPGRADE_HUGE: Item by registry.register("exosuit_inventory_upgrade_huge") { ExopackSlotUpgradeItem(135, Rarity.RARE) } val INVENTORY_UPGRADE_HUGE: ExopackSlotUpgradeItem by registry.register("exosuit_inventory_upgrade_huge") { ExopackSlotUpgradeItem(135, Rarity.RARE) }
val INVENTORY_UPGRADE_WITHER: Item by registry.register("exosuit_inventory_upgrade_wither") { ExopackSlotUpgradeItem(180, Rarity.RARE, hasDescription = true) } val INVENTORY_UPGRADE_WITHER: ExopackSlotUpgradeItem by registry.register("exosuit_inventory_upgrade_wither") { ExopackSlotUpgradeItem(180, Rarity.RARE, hasDescription = true) }
val INVENTORY_UPGRADE_ENDER_DRAGON: Item by registry.register("exosuit_inventory_upgrade_ender_dragon") { ExopackSlotUpgradeItem(180, Rarity.EPIC, hasDescription = true) } val INVENTORY_UPGRADE_ENDER_DRAGON: ExopackSlotUpgradeItem by registry.register("exosuit_inventory_upgrade_ender_dragon") { ExopackSlotUpgradeItem(180, Rarity.EPIC, hasDescription = true) }
} }
init { init {

View File

@ -55,6 +55,7 @@ import ru.dbotthepony.mc.otm.triggers.BlackHoleTrigger
import ru.dbotthepony.mc.otm.triggers.EnderTeleporterFallDeathTrigger import ru.dbotthepony.mc.otm.triggers.EnderTeleporterFallDeathTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackBatterySlotTrigger import ru.dbotthepony.mc.otm.triggers.ExopackBatterySlotTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackGainedCraftingTrigger import ru.dbotthepony.mc.otm.triggers.ExopackGainedCraftingTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackGainedEnderAccessTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackGainedSmeltingTrigger import ru.dbotthepony.mc.otm.triggers.ExopackGainedSmeltingTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackObtainedTrigger import ru.dbotthepony.mc.otm.triggers.ExopackObtainedTrigger
import ru.dbotthepony.mc.otm.triggers.ExopackSlotsExpandedTrigger import ru.dbotthepony.mc.otm.triggers.ExopackSlotsExpandedTrigger
@ -303,6 +304,7 @@ object MRegistry {
CriteriaTriggers.register(ExopackObtainedTrigger) CriteriaTriggers.register(ExopackObtainedTrigger)
CriteriaTriggers.register(ExopackGainedSmeltingTrigger) CriteriaTriggers.register(ExopackGainedSmeltingTrigger)
CriteriaTriggers.register(ExopackGainedCraftingTrigger) CriteriaTriggers.register(ExopackGainedCraftingTrigger)
CriteriaTriggers.register(ExopackGainedEnderAccessTrigger)
CriteriaTriggers.register(ExopackSlotsExpandedTrigger) CriteriaTriggers.register(ExopackSlotsExpandedTrigger)
CriteriaTriggers.register(ExopackBatterySlotTrigger) CriteriaTriggers.register(ExopackBatterySlotTrigger)
CriteriaTriggers.register(TakeItemOutOfReplicatorTrigger) CriteriaTriggers.register(TakeItemOutOfReplicatorTrigger)

View File

@ -17,6 +17,7 @@ import ru.dbotthepony.mc.otm.core.toJsonStrict
val ExopackObtainedTrigger = SingletonTrigger(ResourceLocation(OverdriveThatMatters.MOD_ID, "exopack_obtained")) val ExopackObtainedTrigger = SingletonTrigger(ResourceLocation(OverdriveThatMatters.MOD_ID, "exopack_obtained"))
val ExopackGainedCraftingTrigger = SingletonTrigger(ResourceLocation(OverdriveThatMatters.MOD_ID, "exopack_gained_crafting")) val ExopackGainedCraftingTrigger = SingletonTrigger(ResourceLocation(OverdriveThatMatters.MOD_ID, "exopack_gained_crafting"))
val ExopackGainedSmeltingTrigger = SingletonTrigger(ResourceLocation(OverdriveThatMatters.MOD_ID, "exopack_gained_smelting")) val ExopackGainedSmeltingTrigger = SingletonTrigger(ResourceLocation(OverdriveThatMatters.MOD_ID, "exopack_gained_smelting"))
val ExopackGainedEnderAccessTrigger = SingletonTrigger(ResourceLocation(OverdriveThatMatters.MOD_ID, "exopack_gained_ender_access"))
val ExopackBatterySlotTrigger = ItemTrigger(ResourceLocation(OverdriveThatMatters.MOD_ID, "exopack_battery_slot")) val ExopackBatterySlotTrigger = ItemTrigger(ResourceLocation(OverdriveThatMatters.MOD_ID, "exopack_battery_slot"))

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B