diff --git a/build.gradle.kts b/build.gradle.kts index 9498d9349..1568738bb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ base { archivesBaseName = "Adorn" } -version = "0.1.3+1.14" +version = "0.1.4+1.14" allprojects { apply(plugin = "java") @@ -35,11 +35,6 @@ allprojects { maven(url = "https://minecraft.curseforge.com/api/maven") { name = "CurseForge" } - - // For LBA - maven(url = "https://mod-buildcraft.com/maven") { - name = "BuildCraft" - } } tasks.withType { @@ -79,6 +74,5 @@ dependencies { // Other mods modCompileAndInclude("polyester:Polyester:0.2.1+1.14") modCompileAndInclude("towelette:Towelette:1.5.2") - modCompileAndInclude("alexiil.mc.lib:libblockattributes:0.4.0") modCompileAndInclude("io.github.cottonmc:cotton:0.6.1+1.14-SNAPSHOT") } diff --git a/src/main/kotlin/juuxel/adorn/block/DrawerBlock.kt b/src/main/kotlin/juuxel/adorn/block/DrawerBlock.kt index 17d28135d..3e74a0716 100644 --- a/src/main/kotlin/juuxel/adorn/block/DrawerBlock.kt +++ b/src/main/kotlin/juuxel/adorn/block/DrawerBlock.kt @@ -22,7 +22,7 @@ import net.minecraft.world.World class DrawerBlock( material: String -) : Block(Settings.copy(Blocks.OAK_PLANKS)), PolyesterBlock, BlockEntityProvider, BaseInventoryBlockEntity.BlockAttributeProviderImpl { +) : Block(Settings.copy(Blocks.OAK_PLANKS)), PolyesterBlock, BlockEntityProvider, BaseInventoryBlockEntity.InventoryProviderImpl { override val name = "${material}_drawer" override val itemSettings = Item.Settings().itemGroup(ItemGroup.DECORATIONS) @@ -55,7 +55,7 @@ class DrawerBlock( val entity = world.getBlockEntity(pos) if (entity is BaseInventoryBlockEntity) { - ItemScatterer.spawn(world, pos, getInventory(state1, world, pos)) + ItemScatterer.spawn(world, pos, entity) world.updateHorizontalAdjacent(pos, this) } diff --git a/src/main/kotlin/juuxel/adorn/block/KitchenCupboardBlock.kt b/src/main/kotlin/juuxel/adorn/block/KitchenCupboardBlock.kt index 35b969476..878706226 100644 --- a/src/main/kotlin/juuxel/adorn/block/KitchenCupboardBlock.kt +++ b/src/main/kotlin/juuxel/adorn/block/KitchenCupboardBlock.kt @@ -17,7 +17,7 @@ import net.minecraft.world.World class KitchenCupboardBlock( material: String -) : BaseKitchenCounterBlock(), BlockEntityProvider, BaseInventoryBlockEntity.BlockAttributeProviderImpl { +) : BaseKitchenCounterBlock(), BlockEntityProvider, BaseInventoryBlockEntity.InventoryProviderImpl { override val name = "${material}_kitchen_cupboard" override fun createBlockEntity(view: BlockView?) = BLOCK_ENTITY_TYPE.instantiate() @@ -39,7 +39,7 @@ class KitchenCupboardBlock( val entity = world.getBlockEntity(pos) if (entity is BaseInventoryBlockEntity) { - ItemScatterer.spawn(world, pos, getInventory(state1, world, pos)) + ItemScatterer.spawn(world, pos, entity) world.updateHorizontalAdjacent(pos, this) } diff --git a/src/main/kotlin/juuxel/adorn/block/entity/BaseInventoryBlockEntity.kt b/src/main/kotlin/juuxel/adorn/block/entity/BaseInventoryBlockEntity.kt index 3e4d50624..097042793 100644 --- a/src/main/kotlin/juuxel/adorn/block/entity/BaseInventoryBlockEntity.kt +++ b/src/main/kotlin/juuxel/adorn/block/entity/BaseInventoryBlockEntity.kt @@ -1,57 +1,75 @@ package juuxel.adorn.block.entity -import alexiil.mc.lib.attributes.AttributeList -import alexiil.mc.lib.attributes.AttributeProvider -import alexiil.mc.lib.attributes.item.impl.SimpleFixedItemInv -import io.github.juuxel.polyester.registry.PolyesterBlock -import juuxel.adorn.util.SidedFixedInventoryWrapper +import juuxel.adorn.util.SidedInventoryImpl import net.minecraft.block.BlockState import net.minecraft.block.InventoryProvider import net.minecraft.block.entity.BlockEntity import net.minecraft.block.entity.BlockEntityType +import net.minecraft.entity.player.PlayerEntity +import net.minecraft.inventory.Inventories +import net.minecraft.inventory.Inventory +import net.minecraft.inventory.SidedInventory +import net.minecraft.item.ItemStack import net.minecraft.nbt.CompoundTag +import net.minecraft.util.DefaultedList import net.minecraft.util.math.BlockPos import net.minecraft.world.IWorld -import net.minecraft.world.World abstract class BaseInventoryBlockEntity( type: BlockEntityType<*>, - invSize: Int -) : BlockEntity(type), AttributeProvider/*, InventoryProvider*/ { - val inventory = SimpleFixedItemInv(invSize) - - init { - inventory.addListener({ _, _, _, _ -> markDirty() }, {}) - } + private val invSize: Int +) : BlockEntity(type), Inventory { + val items: DefaultedList = DefaultedList.create(invSize, ItemStack.EMPTY) + val sidedInventory: SidedInventory = SidedInventoryImpl(this) override fun toTag(tag: CompoundTag) = super.toTag(tag).apply { - put("Items", inventory.toTag()) + Inventories.toTag(tag, items) } override fun fromTag(tag: CompoundTag) { super.fromTag(tag) - inventory.fromTag(tag.getCompound("Items")) + Inventories.fromTag(tag, items) } - override fun addAllAttributes(world: World, pos: BlockPos, state: BlockState, attributes: AttributeList<*>) { - attributes.offer(inventory) - attributes.offer(inventory.extractable) - attributes.offer(inventory.insertable) + override fun getInvStack(slot: Int) = items[slot] + + override fun clear() { + items.clear() + markDirty() } -// override fun getInventory(state: BlockState, world: IWorld, pos: BlockPos) = -// SidedFixedInventoryWrapper(inventory) + override fun setInvStack(slot: Int, stack: ItemStack) { + items[slot] = stack + } + + override fun removeInvStack(slot: Int) = + Inventories.removeStack(items, slot) + + override fun canPlayerUseInv(player: PlayerEntity?) = true + + override fun getInvSize() = invSize - // Uses PolyesterBlock to force being applied to a block - interface BlockAttributeProviderImpl : PolyesterBlock, AttributeProvider, InventoryProvider { - override fun addAllAttributes(world: World, pos: BlockPos, state: BlockState, attributes: AttributeList<*>) { - (world.getBlockEntity(pos) as? BaseInventoryBlockEntity) - ?.addAllAttributes(world, pos, state, attributes) + override fun takeInvStack(p0: Int, p1: Int) = + Inventories.splitStack(items, p0, p1).also { + if (!it.isEmpty) { + markDirty() + } + } + + override fun isInvEmpty(): Boolean { + for (stack in items) { + if (!stack.isEmpty) { + return false + } } - override fun getInventory(state: BlockState, world: IWorld, pos: BlockPos) = + return true + } + + interface InventoryProviderImpl : InventoryProvider { + override fun getInventory(state: BlockState?, world: IWorld, pos: BlockPos): SidedInventory? = (world.getBlockEntity(pos) as? BaseInventoryBlockEntity)?.let { - SidedFixedInventoryWrapper(it.inventory) + it.sidedInventory } } } diff --git a/src/main/kotlin/juuxel/adorn/util/SidedFixedInventoryWrapper.kt b/src/main/kotlin/juuxel/adorn/util/SidedFixedInventoryWrapper.kt deleted file mode 100644 index df7a3dc4a..000000000 --- a/src/main/kotlin/juuxel/adorn/util/SidedFixedInventoryWrapper.kt +++ /dev/null @@ -1,27 +0,0 @@ -package juuxel.adorn.util - -import alexiil.mc.lib.attributes.Simulation -import alexiil.mc.lib.attributes.item.FixedItemInv -import alexiil.mc.lib.attributes.item.impl.PartialInventoryFixedWrapper -import net.minecraft.entity.player.PlayerEntity -import net.minecraft.inventory.SidedInventory -import net.minecraft.item.ItemStack -import net.minecraft.util.math.Direction - -class SidedFixedInventoryWrapper(private val inv: FixedItemInv) : PartialInventoryFixedWrapper(inv), SidedInventory { - private val slots: IntArray = IntArray(0) //IntArray(inv.slotCount) { it } - - override fun canPlayerUseInv(player: PlayerEntity?) = true - - override fun getInvAvailableSlots(var1: Direction?) = slots - - override fun canExtractInvStack(slot: Int, stack: ItemStack, direction: Direction?) = false - /*!inv.transferable.attemptExtraction( - { ItemStack.areEqualIgnoreTags(it, stack) }, - stack.amount, - Simulation.SIMULATE - ).isEmpty*/ - - override fun canInsertInvStack(slot: Int, stack: ItemStack, direction: Direction?) = false - /*inv.transferable.attemptInsertion(stack, Simulation.SIMULATE).isEmpty*/ -} diff --git a/src/main/kotlin/juuxel/adorn/util/SidedInventoryImpl.kt b/src/main/kotlin/juuxel/adorn/util/SidedInventoryImpl.kt new file mode 100644 index 000000000..1daf389a7 --- /dev/null +++ b/src/main/kotlin/juuxel/adorn/util/SidedInventoryImpl.kt @@ -0,0 +1,19 @@ +package juuxel.adorn.util + +import net.minecraft.entity.player.PlayerEntity +import net.minecraft.inventory.Inventory +import net.minecraft.inventory.SidedInventory +import net.minecraft.item.ItemStack +import net.minecraft.util.math.Direction + +class SidedInventoryImpl(private val inv: Inventory) : Inventory by inv, SidedInventory { + private val slots: IntArray = IntArray(inv.invSize) { it } + + override fun canPlayerUseInv(player: PlayerEntity?) = true + + override fun getInvAvailableSlots(var1: Direction?) = slots + + override fun canExtractInvStack(slot: Int, stack: ItemStack, direction: Direction?) = true + + override fun canInsertInvStack(slot: Int, stack: ItemStack, direction: Direction?) = true +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 931fcc563..15833f920 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -35,7 +35,6 @@ "fabric-language-kotlin": ">=1.3.30", "towelette": ">=1.5.0", "polyester": ">=0.2.0", - "cotton": ">=0.6.1", - "libblockattributes": ">=0.4.0" + "cotton": ">=0.6.1" } }