summary refs log tree commit diff stats
path: root/src/main/kotlin/space/autistic/radio/item
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/space/autistic/radio/item')
-rw-r--r--src/main/kotlin/space/autistic/radio/item/DisposableTransmitterItem.kt56
-rw-r--r--src/main/kotlin/space/autistic/radio/item/StorageCardItem.kt20
2 files changed, 76 insertions, 0 deletions
diff --git a/src/main/kotlin/space/autistic/radio/item/DisposableTransmitterItem.kt b/src/main/kotlin/space/autistic/radio/item/DisposableTransmitterItem.kt
new file mode 100644
index 0000000..c9a53e4
--- /dev/null
+++ b/src/main/kotlin/space/autistic/radio/item/DisposableTransmitterItem.kt
@@ -0,0 +1,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
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/space/autistic/radio/item/StorageCardItem.kt b/src/main/kotlin/space/autistic/radio/item/StorageCardItem.kt
new file mode 100644
index 0000000..da1b057
--- /dev/null
+++ b/src/main/kotlin/space/autistic/radio/item/StorageCardItem.kt
@@ -0,0 +1,20 @@
+package space.autistic.radio.item
+
+import net.minecraft.entity.player.PlayerEntity
+import net.minecraft.item.Item
+import net.minecraft.item.ItemStack
+import net.minecraft.stat.Stats
+import net.minecraft.util.Hand
+import net.minecraft.util.TypedActionResult
+import net.minecraft.world.World
+import space.autistic.radio.PirateRadio
+
+class StorageCardItem(settings: Settings) : Item(settings) {
+
+    override fun use(world: World, user: PlayerEntity, hand: Hand): TypedActionResult<ItemStack> {
+        val itemStack = user.getStackInHand(hand)
+        PirateRadio.proxy!!.useStorageCard(user, itemStack, hand)
+        user.incrementStat(Stats.USED.getOrCreateStat(this))
+        return TypedActionResult.success(itemStack, world.isClient())
+    }
+}
\ No newline at end of file