iron chests

This commit is contained in:
YuRaNnNzZZ 2025-04-09 00:36:49 +03:00
parent 2922af8715
commit 16515ecc92
Signed by: YuRaNnNzZZ
GPG Key ID: 5F71738C85A6006D
19 changed files with 404 additions and 0 deletions

View File

@ -209,6 +209,9 @@ dependencies {
// runtimeOnly("curse.maven:integrated-tunnels-251389:4344632")
implementation("mekanism:Mekanism:${mc_version}-${mekanism_version}")
implementation("curse.maven:iron-chests-228756:5491156")
implementation("curse.maven:iron-shulker-boxes-314911:5491246")
}
}
@ -268,6 +271,7 @@ minecraft {
mixin {
config("$mod_id.mixins.json")
config("$mod_id.ironchest.mixins.json")
// config("$mod_id.ad_astra.mixins.json")
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.regular.entity.CopperChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(CopperChestBlockEntity.class)
public abstract class CopperChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.copper(containerId, inventory, ((CopperChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.regular.entity.CrystalChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(CrystalChestBlockEntity.class)
public abstract class CrystalChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.crystal(containerId, inventory, ((CrystalChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.regular.entity.DiamondChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(DiamondChestBlockEntity.class)
public abstract class DiamondChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.diamond(containerId, inventory, ((DiamondChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.regular.entity.DirtChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(DirtChestBlockEntity.class)
public abstract class DirtChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.dirt(containerId, inventory, ((DirtChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.regular.entity.GoldChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(GoldChestBlockEntity.class)
public abstract class GoldChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.gold(containerId, inventory, ((GoldChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.regular.entity.IronChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(IronChestBlockEntity.class)
public abstract class IronChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.iron(containerId, inventory, ((IronChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.regular.entity.ObsidianChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(ObsidianChestBlockEntity.class)
public abstract class ObsidianChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.obdisian(containerId, inventory, ((ObsidianChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.trapped.entity.TrappedCopperChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(TrappedCopperChestBlockEntity.class)
public abstract class TrappedCopperChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.copper(containerId, inventory, ((TrappedCopperChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.trapped.entity.TrappedCrystalChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(TrappedCrystalChestBlockEntity.class)
public abstract class TrappedCrystalChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.crystal(containerId, inventory, ((TrappedCrystalChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.trapped.entity.TrappedDiamondChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(TrappedDiamondChestBlockEntity.class)
public abstract class TrappedDiamondChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.diamond(containerId, inventory, ((TrappedDiamondChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.trapped.entity.TrappedDirtChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(TrappedDirtChestBlockEntity.class)
public abstract class TrappedDirtChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.dirt(containerId, inventory, ((TrappedDirtChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.trapped.entity.TrappedGoldChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(TrappedGoldChestBlockEntity.class)
public abstract class TrappedGoldChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.gold(containerId, inventory, ((TrappedGoldChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.trapped.entity.TrappedIronChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(TrappedIronChestBlockEntity.class)
public abstract class TrappedIronChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.iron(containerId, inventory, ((TrappedIronChestBlockEntity)(Object) this));
}
}

View File

@ -0,0 +1,16 @@
package ru.dbotthepony.mc.otm.mixin.ironchest;
import com.progwml6.ironchest.common.block.trapped.entity.TrappedObsidianChestBlockEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import ru.dbotthepony.mc.otm.compat.ironchest.MatteryIronChestMenu;
@Mixin(TrappedObsidianChestBlockEntity.class)
public abstract class TrappedObsidianChestBlockEntityMixin {
@Overwrite(remap = false)
public AbstractContainerMenu createMenu(int containerId, Inventory inventory) {
return MatteryIronChestMenu.obdisian(containerId, inventory, ((TrappedObsidianChestBlockEntity)(Object) this));
}
}

View File

@ -44,6 +44,8 @@ import ru.dbotthepony.mc.otm.client.render.blockentity.BatteryBankRenderer
import ru.dbotthepony.mc.otm.client.render.blockentity.MatterBatteryBankRenderer
import ru.dbotthepony.mc.otm.compat.curios.isCuriosLoaded
import ru.dbotthepony.mc.otm.compat.curios.onCuriosSlotModifiersUpdated
import ru.dbotthepony.mc.otm.compat.ironchest.IronChestMenuTypes
import ru.dbotthepony.mc.otm.compat.ironchest.isIronChestLoaded
import ru.dbotthepony.mc.otm.compat.vanilla.MatteryChestMenu
import ru.dbotthepony.mc.otm.compat.vanilla.VanillaMenuTypes
import ru.dbotthepony.mc.otm.config.PlayerConfig
@ -134,6 +136,10 @@ object OverdriveThatMatters {
StorageStack.register(MOD_BUS)
VanillaMenuTypes.register(MOD_BUS)
if (isIronChestLoaded) {
IronChestMenuTypes.register(MOD_BUS)
}
MCreativeTabs.initialize(MOD_BUS)
MOD_BUS.addListener(::registerNetworkPackets)

View File

@ -0,0 +1,66 @@
package ru.dbotthepony.mc.otm.compat.ironchest
import com.progwml6.ironchest.IronChests
import com.progwml6.ironchest.common.block.IronChestsTypes
import net.minecraft.core.BlockPos
import net.minecraft.core.registries.Registries
import net.minecraft.world.Container
import net.minecraft.world.flag.FeatureFlags
import net.minecraft.world.inventory.MenuType
import net.minecraft.world.level.Level
import net.minecraft.world.level.block.entity.BlockEntity
import net.minecraft.world.level.block.state.BlockState
import net.neoforged.bus.api.IEventBus
import net.neoforged.fml.ModList
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent
import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.capability.IQuickStackContainer
import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.compat.vanilla.VanillaChestScreen
import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.makeSlots
import ru.dbotthepony.mc.otm.registry.MDeferredRegister
val isIronChestLoaded by lazy {
ModList.get().isLoaded(IronChests.MODID)
}
object IronChestMenuTypes {
private val registrar = MDeferredRegister(Registries.MENU, OverdriveThatMatters.MOD_ID)
val IRON by registrar.register("ironchest_iron") { MenuType(MatteryIronChestMenu::iron, FeatureFlags.VANILLA_SET) }
val GOLD by registrar.register("ironchest_gold") { MenuType(MatteryIronChestMenu::gold, FeatureFlags.VANILLA_SET) }
val DIAMOND by registrar.register("ironchest_diamond") { MenuType(MatteryIronChestMenu::diamond, FeatureFlags.VANILLA_SET) }
val COPPER by registrar.register("ironchest_copper") { MenuType(MatteryIronChestMenu::copper, FeatureFlags.VANILLA_SET) }
val CRYSTAL by registrar.register("ironchest_crystal") { MenuType(MatteryIronChestMenu::crystal, FeatureFlags.VANILLA_SET) }
val OBSIDIAN by registrar.register("ironchest_obsidian") { MenuType(MatteryIronChestMenu::obdisian, FeatureFlags.VANILLA_SET) }
val DIRT by registrar.register("ironchest_dirt") { MenuType(MatteryIronChestMenu::dirt, FeatureFlags.VANILLA_SET) }
private fun provider(level: Level, pos: BlockPos, state: BlockState, blockEntity: BlockEntity?, context: Void?): IQuickStackContainer? {
val container = blockEntity as? Container ?: return null
return IQuickStackContainer.Simple(makeSlots(container, ::MatteryMenuSlot))
}
fun registerCapabilities(event: RegisterCapabilitiesEvent) {
IronChestsTypes.entries.map { IronChestsTypes.get(it) }.forEach {
event.registerBlock(MatteryCapability.QUICK_STACK_CONTAINER, ::provider, *it.toTypedArray())
}
}
internal fun register(bus: IEventBus) {
registrar.register(bus)
bus.addListener(this::registerScreens)
bus.addListener(this::registerCapabilities)
}
private fun registerScreens(event: RegisterMenuScreensEvent) {
event.register(IRON, ::VanillaChestScreen)
event.register(GOLD, ::VanillaChestScreen)
event.register(DIAMOND, ::VanillaChestScreen)
event.register(COPPER, ::VanillaChestScreen)
event.register(CRYSTAL, ::VanillaChestScreen)
event.register(OBSIDIAN, ::VanillaChestScreen)
event.register(DIRT, ::VanillaChestScreen)
}
}

View File

@ -0,0 +1,82 @@
package ru.dbotthepony.mc.otm.compat.ironchest
import com.progwml6.ironchest.common.block.IronChestsTypes
import net.minecraft.world.Container
import net.minecraft.world.SimpleContainer
import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.inventory.MenuType
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items
import ru.dbotthepony.mc.otm.compat.vanilla.AbstractVanillaChestMenu
import ru.dbotthepony.mc.otm.container.EnhancedContainer
import ru.dbotthepony.mc.otm.menu.MatteryMenuSlot
import ru.dbotthepony.mc.otm.menu.QuickMoveInput
import ru.dbotthepony.mc.otm.menu.makeSlots
class MatteryIronChestMenu(
type: MenuType<*>, containerId: Int,
inventory: Inventory, chestType: IronChestsTypes,
container: Container = EnhancedContainer.Simple(chestType.size),
) : AbstractVanillaChestMenu(type, containerId, inventory, container) {
override val columns = chestType.rowLength
override val rows = chestType.size / chestType.rowLength
override val containerSlots = if (chestType == IronChestsTypes.DIRT) makeSlots(container, ::MDirtChestSlot) else makeSlots(container, ::MatteryMenuSlot)
init {
container.startOpen(player)
addStorageSlot(containerSlots)
addInventorySlots()
}
override val quickMoveToStorage = QuickMoveInput.create(this, playerCombinedInventorySlots, containerSlots)
override val quickMoveFromStorage = QuickMoveInput.create(this, containerSlots, playerInventorySlots, false)
class MDirtChestSlot(container: Container, slot: Int) : MatteryMenuSlot(container, slot) {
override fun mayPlace(stack: ItemStack): Boolean = stack.isEmpty || stack.`is`(Items.DIRT)
}
companion object {
@JvmStatic
@JvmOverloads
fun iron(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(IronChestsTypes.IRON.size), chestType: IronChestsTypes = IronChestsTypes.IRON): MatteryIronChestMenu {
return MatteryIronChestMenu(IronChestMenuTypes.IRON, containerId, inventory, chestType, container)
}
@JvmStatic
@JvmOverloads
fun gold(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(IronChestsTypes.GOLD.size), chestType: IronChestsTypes = IronChestsTypes.GOLD): MatteryIronChestMenu {
return MatteryIronChestMenu(IronChestMenuTypes.GOLD, containerId, inventory, chestType, container)
}
@JvmStatic
@JvmOverloads
fun diamond(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(IronChestsTypes.DIAMOND.size), chestType: IronChestsTypes = IronChestsTypes.DIAMOND): MatteryIronChestMenu {
return MatteryIronChestMenu(IronChestMenuTypes.DIAMOND, containerId, inventory, chestType, container)
}
@JvmStatic
@JvmOverloads
fun copper(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(IronChestsTypes.COPPER.size), chestType: IronChestsTypes = IronChestsTypes.COPPER): MatteryIronChestMenu {
return MatteryIronChestMenu(IronChestMenuTypes.COPPER, containerId, inventory, chestType, container)
}
@JvmStatic
@JvmOverloads
fun crystal(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(IronChestsTypes.CRYSTAL.size), chestType: IronChestsTypes = IronChestsTypes.CRYSTAL): MatteryIronChestMenu {
return MatteryIronChestMenu(IronChestMenuTypes.CRYSTAL, containerId, inventory, chestType, container)
}
@JvmStatic
@JvmOverloads
fun obdisian(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(IronChestsTypes.OBSIDIAN.size), chestType: IronChestsTypes = IronChestsTypes.OBSIDIAN): MatteryIronChestMenu {
return MatteryIronChestMenu(IronChestMenuTypes.OBSIDIAN, containerId, inventory, chestType, container)
}
@JvmStatic
@JvmOverloads
fun dirt(containerId: Int, inventory: Inventory, container: Container = SimpleContainer(IronChestsTypes.DIRT.size), chestType: IronChestsTypes = IronChestsTypes.DIRT): MatteryIronChestMenu {
return MatteryIronChestMenu(IronChestMenuTypes.DIRT, containerId, inventory, chestType, container)
}
}
}

View File

@ -0,0 +1,22 @@
{
"required": false,
"package": "ru.dbotthepony.mc.otm.mixin.ironchest",
"compatibilityLevel": "JAVA_21",
"minVersion": "0.8",
"mixins": [
"IronChestBlockEntityMixin",
"GoldChestBlockEntityMixin",
"DiamondChestBlockEntityMixin",
"CopperChestBlockEntityMixin",
"CrystalChestBlockEntityMixin",
"ObsidianChestBlockEntityMixin",
"DirtChestBlockEntityMixin",
"TrappedIronChestBlockEntityMixin",
"TrappedGoldChestBlockEntityMixin",
"TrappedDiamondChestBlockEntityMixin",
"TrappedCopperChestBlockEntityMixin",
"TrappedCrystalChestBlockEntityMixin",
"TrappedObsidianChestBlockEntityMixin",
"TrappedDirtChestBlockEntityMixin"
]
}