1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package space.autistic.radio.item
import net.minecraft.component.DataComponentTypes
import net.minecraft.component.type.NbtComponent
import net.minecraft.entity.EntityType
import net.minecraft.entity.decoration.AbstractDecorationEntity
import net.minecraft.item.ItemFrameItem
import net.minecraft.item.ItemUsageContext
import net.minecraft.util.ActionResult
import net.minecraft.world.event.GameEvent
import space.autistic.radio.PirateRadioEntityTypes
import space.autistic.radio.entity.DisposableTransmitterEntity
class DisposableTransmitterItem(
private val entityType: EntityType<out AbstractDecorationEntity>?,
settings: Settings?
) :
ItemFrameItem(entityType, settings) {
override fun useOnBlock(context: ItemUsageContext): ActionResult {
val blockPos = context.blockPos
val direction = context.side
val blockPos2 = blockPos.offset(direction)
val playerEntity = context.player
val itemStack = context.stack
if (playerEntity != null && !this.canPlaceOn(playerEntity, direction, itemStack, blockPos2)) {
return ActionResult.FAIL
} else {
val world = context.world
val abstractDecorationEntity: AbstractDecorationEntity
if (this.entityType === PirateRadioEntityTypes.DISPOSABLE_TRANSMITTER) {
abstractDecorationEntity = DisposableTransmitterEntity(world, blockPos2, direction)
} else {
return ActionResult.success(world.isClient)
}
val nbtComponent = itemStack.getOrDefault(DataComponentTypes.ENTITY_DATA, NbtComponent.DEFAULT)
if (!nbtComponent.isEmpty) {
EntityType.loadFromEntityNbt(world, playerEntity, abstractDecorationEntity, nbtComponent)
}
if (abstractDecorationEntity.canStayAttached()) {
if (!world.isClient) {
abstractDecorationEntity.onPlace()
world.emitGameEvent(playerEntity, GameEvent.ENTITY_PLACE, abstractDecorationEntity.pos)
world.spawnEntity(abstractDecorationEntity)
}
itemStack.decrement(1)
return ActionResult.success(world.isClient)
} else {
return ActionResult.CONSUME
}
}
}
}
|