Skip to content

Commit 60cc5f8

Browse files
committed
rewrite item carrier
1 parent 8d02c9c commit 60cc5f8

File tree

4 files changed

+49
-23
lines changed

4 files changed

+49
-23
lines changed

src/main/kotlin/dev/sterner/client/renderer/entity/ItemCarrierItemEntityRenderer.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class ItemCarrierItemEntityRenderer(context: EntityRendererProvider.Context) :
4242
bufferIn: MultiBufferSource,
4343
packedLightIn: Int
4444
) {
45+
println(entity.getItem())
4546
val spiritType = SpiritTypeRegistry.AQUEOUS_SPIRIT
4647
val trailBuilder = SpiritBasedWorldVFXBuilder.create(spiritType).setRenderType(TRAIL_TYPE)
4748
RenderUtils.renderEntityTrail(
@@ -86,7 +87,7 @@ class ItemCarrierItemEntityRenderer(context: EntityRendererProvider.Context) :
8687
bufferIn: MultiBufferSource?,
8788
packedLightIn: Int
8889
) {
89-
val itemStack = entity.itemStack
90+
val itemStack = entity.getItem()
9091
val model = itemRenderer.getModel(itemStack, entity.level(), null as LivingEntity?, entity.itemStack.count)
9192
val yOffset = entity.getYOffset(partialTicks)
9293
val scale = model.transforms.getTransform(ItemDisplayContext.GROUND).scale.y()

src/main/kotlin/dev/sterner/common/entity/ItemCarrierItemEntity.kt

+42-18
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package dev.sterner.common.entity
22

33
import com.sammy.malum.common.entity.FloatingEntity
4+
import com.sammy.malum.common.entity.spirit.SpiritItemEntity
45
import com.sammy.malum.registry.common.SpiritTypeRegistry
56
import com.sammy.malum.registry.common.item.ItemRegistry
67
import com.sammy.malum.visual_effects.SpiritLightSpecs
8+
import dev.sterner.common.entity.ParticleEntity.Companion.DATA_SPIRIT
79
import dev.sterner.registry.VoidBoundEntityTypeRegistry
810
import net.minecraft.nbt.CompoundTag
11+
import net.minecraft.network.protocol.Packet
12+
import net.minecraft.network.protocol.game.ClientGamePacketListener
913
import net.minecraft.network.syncher.EntityDataAccessor
1014
import net.minecraft.network.syncher.EntityDataSerializers
1115
import net.minecraft.network.syncher.SynchedEntityData
@@ -39,37 +43,44 @@ class ItemCarrierItemEntity(level: Level?) : FloatingEntity(VoidBoundEntityTypeR
3943
this.itemStack = stack
4044
this.setPos(posX, posY, posZ)
4145
this.setDeltaMovement(velX, velY, velZ)
42-
this.maxAge = 800
46+
this.maxAge = 8000
47+
this.age = 0
48+
}
49+
50+
init {
51+
this.maxAge = 8000
4352
}
4453

4554
override fun addAdditionalSaveData(pCompound: CompoundTag) {
46-
super.addAdditionalSaveData(pCompound)
55+
pCompound.putInt("age", this.age)
56+
pCompound.putFloat("windUp", this.windUp)
57+
if (this.ownerUUID != null) {
58+
pCompound.putUUID("ownerUUID", this.ownerUUID)
59+
}
4760
val itemstack = this.getItemRaw()
4861
if (!itemstack.isEmpty) {
4962
pCompound.put("Item", itemstack.save(CompoundTag()))
5063
}
5164
}
5265

5366
override fun readAdditionalSaveData(pCompound: CompoundTag) {
54-
super.readAdditionalSaveData(pCompound)
55-
val itemstack = ItemStack.of(pCompound.getCompound("Item"))
56-
this.setItem(itemstack)
67+
this.age = pCompound.getInt("age")
68+
this.windUp = pCompound.getFloat("windUp")
69+
if (pCompound.contains("ownerUUID")) {
70+
this.setOwner(pCompound.getUUID("ownerUUID"))
71+
}
72+
if (pCompound.contains("Item")) {
73+
val itemstack = ItemStack.of(pCompound.getCompound("Item"))
74+
this.setItem(itemstack)
75+
}
5776
}
5877

5978
fun setItem(pStack: ItemStack) {
60-
getEntityData().set(DATA_ITEM_STACK, pStack)
79+
entityData.set(DATA_ITEM_STACK, pStack)
6180
}
6281

6382
override fun defineSynchedData() {
64-
getEntityData().define(DATA_ITEM_STACK, ItemStack.EMPTY)
65-
}
66-
67-
override fun onSyncedDataUpdated(pKey: EntityDataAccessor<*>) {
68-
if (DATA_ITEM_STACK == pKey) {
69-
this.itemStack = getEntityData().get(DATA_ITEM_STACK) as ItemStack
70-
}
71-
72-
super.onSyncedDataUpdated(pKey)
83+
entityData.define(DATA_ITEM_STACK, ItemStack.EMPTY)
7384
}
7485

7586
override fun collect() {
@@ -81,7 +92,7 @@ class ItemCarrierItemEntity(level: Level?) : FloatingEntity(VoidBoundEntityTypeR
8192
}
8293

8394
protected fun getItemRaw(): ItemStack {
84-
return getEntityData().get(DATA_ITEM_STACK) as ItemStack
95+
return entityData.get(DATA_ITEM_STACK) as ItemStack
8596
}
8697

8798
protected fun getDefaultItem(): Item {
@@ -93,11 +104,24 @@ class ItemCarrierItemEntity(level: Level?) : FloatingEntity(VoidBoundEntityTypeR
93104
return if (itemstack.isEmpty) ItemStack(this.getDefaultItem()) else itemstack
94105
}
95106

107+
override fun tick() {
108+
super.tick()
109+
println("$age : $maxAge : $isAlive : ${level().isClientSide}")
110+
}
111+
112+
override fun onSyncedDataUpdated(pKey: EntityDataAccessor<*>) {
113+
if (DATA_ITEM_STACK.equals(pKey)) {
114+
itemStack = getEntityData().get(DATA_ITEM_STACK)
115+
}
116+
117+
super.onSyncedDataUpdated(pKey)
118+
}
119+
120+
96121
override fun spawnParticles(x: Double, y: Double, z: Double) {
97122
val motion = this.deltaMovement
98123
val norm = motion.normalize().scale(0.05000000074505806)
99-
val lightSpecs: ParticleEffectSpawner =
100-
SpiritLightSpecs.spiritLightSpecs(this.level(), Vec3(x, y, z), SpiritTypeRegistry.AQUEOUS_SPIRIT)
124+
val lightSpecs: ParticleEffectSpawner = SpiritLightSpecs.spiritLightSpecs(this.level(), Vec3(x, y, z), SpiritTypeRegistry.AQUEOUS_SPIRIT)
101125
lightSpecs.builder.setMotion(norm)
102126
lightSpecs.bloomBuilder.setMotion(norm)
103127
lightSpecs.spawnParticles()

src/main/kotlin/dev/sterner/common/item/equipment/TidecutterItem.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import net.minecraft.server.level.ServerLevel
1616
import net.minecraft.tags.BlockTags
1717
import net.minecraft.world.InteractionHand
1818
import net.minecraft.world.InteractionResultHolder
19+
import net.minecraft.world.entity.Entity
1920
import net.minecraft.world.entity.LivingEntity
2021
import net.minecraft.world.entity.item.ItemEntity
2122
import net.minecraft.world.entity.player.Player
@@ -26,7 +27,6 @@ import net.minecraft.world.level.Level
2627
import net.minecraft.world.level.block.Block
2728
import net.minecraft.world.level.block.Blocks
2829
import net.minecraft.world.level.block.state.BlockState
29-
import team.lodestar.lodestone.helpers.ItemHelper
3030
import team.lodestar.lodestone.helpers.RandomHelper
3131
import team.lodestar.lodestone.systems.item.tools.magic.MagicAxeItem
3232
import java.awt.Color
@@ -77,12 +77,14 @@ open class TidecutterItem(
7777
override fun onUseTick(level: Level, livingEntity: LivingEntity, stack: ItemStack, remainingUseDuration: Int) {
7878
val nearbyItems: MutableList<ItemEntity> = level.getEntitiesOfClass(ItemEntity::class.java, livingEntity.boundingBox.inflate(10.0))
7979
if (nearbyItems.isNotEmpty()) {
80+
println(level.isClientSide)
8081
for (item in nearbyItems) {
8182

8283
val newStack = item.item.copy()
8384
newStack.count = newStack.count
8485
newStack.tag = newStack.tag
8586

87+
val speed: Float = 0.15f + 0.25f / 5
8688
val entity = ItemCarrierItemEntity(
8789
level, livingEntity.uuid, newStack,
8890
item.x,
@@ -92,8 +94,7 @@ open class TidecutterItem(
9294
RandomHelper.randomBetween(level.random, 0.05f, 0.06f).toDouble(),
9395
RandomHelper.randomBetween(level.random, -speed, speed).toDouble()
9496
)
95-
entity.entityData.set(ItemCarrierItemEntity.DATA_ITEM_STACK, newStack)
96-
item.discard()
97+
item.remove(Entity.RemovalReason.DISCARDED)
9798
level.addFreshEntity(entity)
9899
}
99100
}

src/main/kotlin/dev/sterner/registry/VoidBoundEntityTypeRegistry.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ object VoidBoundEntityTypeRegistry {
3232
w
3333
)
3434
}, MobCategory.MISC
35-
).sized(0.05f, 0.05f).clientTrackingRange(50).build(VoidBound.id("item_carrier").toString())
35+
).sized(0.5f, 0.75f).clientTrackingRange(50).build(VoidBound.id("item_carrier").toString())
3636
}
3737

3838
var SOUL_STEEL_GOLEM_ENTITY: RegistryObject<EntityType<SoulSteelGolemEntity>> =

0 commit comments

Comments
 (0)