Fix cargo crate not generating loot from loot tables when destroyed
Fixes #111
This commit is contained in:
parent
6c2f5a6f48
commit
30db39453a
@ -30,6 +30,16 @@ import ru.dbotthepony.mc.otm.core.component3
|
||||
|
||||
interface IDroppableContainer {
|
||||
val droppableContainer: Container
|
||||
|
||||
fun beforeDroppingItems(
|
||||
oldBlockState: BlockState,
|
||||
level: Level,
|
||||
blockPos: BlockPos,
|
||||
newBlockState: BlockState,
|
||||
movedByPiston: Boolean
|
||||
) {}
|
||||
|
||||
fun beforeDestroyedByPlayer(level: Level, blockPos: BlockPos, blockState: BlockState, player: Player) {}
|
||||
}
|
||||
|
||||
abstract class MatteryBlock @JvmOverloads constructor(
|
||||
@ -163,14 +173,26 @@ abstract class MatteryBlock @JvmOverloads constructor(
|
||||
val blockentity = level.getBlockEntity(blockPos)
|
||||
|
||||
if (blockentity is IDroppableContainer) {
|
||||
blockentity.beforeDroppingItems(oldBlockState, level, blockPos, newBlockState, movedByPiston)
|
||||
Containers.dropContents(level, blockPos, blockentity.droppableContainer)
|
||||
level.updateNeighbourForOutputSignal(blockPos, this)
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
super.onRemove(oldBlockState, level, blockPos, newBlockState, movedByPiston)
|
||||
}
|
||||
|
||||
override fun playerWillDestroy(level: Level, blockPos: BlockPos, blockState: BlockState, player: Player) {
|
||||
super.playerWillDestroy(level, blockPos, blockState, player)
|
||||
|
||||
val blockentity = level.getBlockEntity(blockPos)
|
||||
|
||||
if (blockentity is IDroppableContainer) {
|
||||
blockentity.beforeDestroyedByPlayer(level, blockPos, blockState, player)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val DEFAULT_PROPERTIES: Properties = Properties.of(Material.STONE, MaterialColor.METAL).requiresCorrectToolForDrops().strength(1.5f, 25.0f)
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ import net.minecraft.world.entity.player.Inventory
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.inventory.AbstractContainerMenu
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.gameevent.GameEvent
|
||||
@ -45,15 +46,29 @@ class CargoCrateBlockEntity(
|
||||
val container = MatteryContainer(this::setChanged, CAPACITY)
|
||||
private var interactingPlayers = 0
|
||||
val handler = container.handler(object : MatteryContainerHooks {
|
||||
override fun preInsert(slot: Int, stack: ItemStack, simulate: Boolean) {
|
||||
unpackLootTable()
|
||||
override fun canInsert(slot: Int, stack: ItemStack): Boolean {
|
||||
return lootTable != null
|
||||
}
|
||||
|
||||
override fun preExtract(slot: Int, amount: Int, simulate: Boolean) {
|
||||
unpackLootTable()
|
||||
override fun canExtract(slot: Int, amount: Int, stack: ItemStack): Boolean {
|
||||
return lootTable != null
|
||||
}
|
||||
})
|
||||
|
||||
override fun beforeDroppingItems(
|
||||
oldBlockState: BlockState,
|
||||
level: Level,
|
||||
blockPos: BlockPos,
|
||||
newBlockState: BlockState,
|
||||
movedByPiston: Boolean
|
||||
) {
|
||||
unpackLootTable()
|
||||
}
|
||||
|
||||
override fun beforeDestroyedByPlayer(level: Level, blockPos: BlockPos, blockState: BlockState, player: Player) {
|
||||
unpackLootTable(player)
|
||||
}
|
||||
|
||||
var lootTable: ResourceLocation? = null
|
||||
var lootTableSeed: Long? = null
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user