1
1
package smartin .miapi .modules .abilities .util .ItemProjectile ;
2
2
3
3
import dev .architectury .event .EventResult ;
4
+ import net .minecraft .block .BlockState ;
4
5
import net .minecraft .enchantment .EnchantmentHelper ;
5
6
import net .minecraft .entity .Entity ;
6
7
import net .minecraft .entity .EntityType ;
16
17
import net .minecraft .server .network .ServerPlayerEntity ;
17
18
import net .minecraft .sound .SoundEvent ;
18
19
import net .minecraft .sound .SoundEvents ;
20
+ import net .minecraft .util .hit .BlockHitResult ;
19
21
import net .minecraft .util .hit .EntityHitResult ;
20
22
import net .minecraft .util .math .Vec3d ;
21
23
import net .minecraft .world .World ;
@@ -42,6 +44,7 @@ public class ItemProjectile extends PersistentProjectileEntity {
42
44
public WrappedSoundEvent hitEntitySound = new WrappedSoundEvent (this .getHitSound (), 1.0f , 1.0f );
43
45
public WrappedSoundEvent hitGroundSound = new WrappedSoundEvent (this .getHitSound (), 1.0f , 1.0f );
44
46
public ProjectileHitBehaviour projectileHitBehaviour = new EntityBounceBehaviour ();
47
+ private BlockState inBlockState ;
45
48
46
49
public ItemProjectile (EntityType <? extends Entity > entityType , World world ) {
47
50
super ((EntityType <? extends PersistentProjectileEntity >) entityType , world );
@@ -74,9 +77,9 @@ public ItemStack getBowItem() {
74
77
@ Override
75
78
protected void initDataTracker () {
76
79
super .initDataTracker ();
77
- this .dataTracker .startTracking (THROWING_STACK , ItemStack .EMPTY );
78
80
this .dataTracker .startTracking (LOYALTY , (byte ) 0 );
79
81
this .dataTracker .startTracking (ENCHANTED , false );
82
+ this .dataTracker .startTracking (THROWING_STACK , ItemStack .EMPTY );
80
83
this .dataTracker .startTracking (BOW_ITEM_STACK , ItemStack .EMPTY );
81
84
this .dataTracker .startTracking (WATER_DRAG , 0.99f );
82
85
this .dataTracker .startTracking (SPEED_DAMAGE , true );
@@ -94,6 +97,7 @@ public void setSpeedDamage(boolean speedDamage) {
94
97
@ Override
95
98
public void tick () {
96
99
if (this .inGroundTime > 4 ) {
100
+ this .setVelocity (new Vec3d (0 , 0 , 0 ));
97
101
this .dealtDamage = true ;
98
102
}
99
103
@@ -109,12 +113,12 @@ public void tick() {
109
113
} else {
110
114
this .setNoClip (true );
111
115
Vec3d targetDir = entity .getEyePos ().subtract (this .getPos ());
112
- this .setPos (this .getX (), this .getY () + targetDir .y * 0.015 * ( double ) loyaltyLevel , this .getZ ());
116
+ this .setPos (this .getX (), this .getY () + targetDir .y * 0.015 * loyaltyLevel , this .getZ ());
113
117
if (this .getWorld ().isClient ) {
114
118
this .lastRenderY = this .getY ();
115
119
}
116
120
117
- double speedAdjustment = 0.05 * ( double ) loyaltyLevel ;
121
+ double speedAdjustment = 0.05 * loyaltyLevel ;
118
122
this .setVelocity (this .getVelocity ().multiply (0.95 ).add (targetDir .normalize ().multiply (speedAdjustment )));
119
123
if (this .returnTimer == 0 ) {
120
124
this .playSound (SoundEvents .ITEM_TRIDENT_RETURN , 10.0F , 1.0F );
@@ -195,6 +199,11 @@ protected void onEntityHit(EntityHitResult entityHitResult) {
195
199
this .playSound (this .hitEntitySound .event (), this .hitEntitySound .volume (), this .hitEntitySound .pitch ());
196
200
}
197
201
202
+ @ Override
203
+ protected void onBlockHit (BlockHitResult blockHitResult ) {
204
+ super .onBlockHit (blockHitResult );
205
+ }
206
+
198
207
public float getProjectileDamage () {
199
208
float damage = (float ) getDamage ();
200
209
if (this .getSpeedDamage ()) {
@@ -215,22 +224,22 @@ protected boolean tryPickup(PlayerEntity player) {
215
224
case DISALLOWED :
216
225
yield false ;
217
226
case ALLOWED : {
218
- yield tryInsertAtSlot (player .getInventory (),this .asItemStack (),slotId );
227
+ yield tryInsertAtSlot (player .getInventory (), this .asItemStack (), slotId );
219
228
}
220
229
case CREATIVE_ONLY : {
221
230
yield player .getAbilities ().creativeMode ;
222
231
}
223
232
};
224
- return earlyPickup || super .tryPickup (player ) || this .isNoClip () && this .isOwner (player ) && (tryInsertAtSlot (player .getInventory (),this .asItemStack (),slotId ) || player .getInventory ().insertStack (this .asItemStack ()));
233
+ return earlyPickup || super .tryPickup (player ) || this .isNoClip () && this .isOwner (player ) && (tryInsertAtSlot (player .getInventory (), this .asItemStack (), slotId ) || player .getInventory ().insertStack (this .asItemStack ()));
225
234
}
226
235
227
- public boolean tryInsertAtSlot (PlayerInventory inventory ,ItemStack stack ,int slot ){
228
- if (inventory .size ()> slot && slot > 0 ) {
236
+ public boolean tryInsertAtSlot (PlayerInventory inventory , ItemStack stack , int slot ) {
237
+ if (inventory .size () > slot && slot > 0 ) {
229
238
ItemStack inventoryStack = inventory .getStack (slot );
230
- if (inventoryStack .isEmpty ()){
239
+ if (inventoryStack .isEmpty ()) {
231
240
return inventory .insertStack (slot , stack );
232
241
}
233
- if (ItemStack .canCombine (inventoryStack ,stack )){
242
+ if (ItemStack .canCombine (inventoryStack , stack )) {
234
243
return inventory .insertStack (slot , stack );
235
244
}
236
245
}
@@ -265,6 +274,15 @@ public void readCustomDataFromNbt(NbtCompound nbt) {
265
274
ItemStack bowItem = ItemStack .fromNbt (nbt .getCompound ("BowItem" ));
266
275
this .dataTracker .set (BOW_ITEM_STACK , bowItem );
267
276
}
277
+ if (nbt .contains ("WaterDrag" )){
278
+ this .dataTracker .set (WATER_DRAG ,nbt .getFloat ("WaterDrag" ));
279
+ }
280
+ if (nbt .contains ("SpeedDamage" )){
281
+ this .dataTracker .set (SPEED_DAMAGE ,nbt .getBoolean ("SpeedDamage" ));
282
+ }
283
+ if (nbt .contains ("PreferredSlot" )){
284
+ this .dataTracker .set (PREFERRED_SLOT ,nbt .getInt ("PreferredSlot" ));
285
+ }
268
286
269
287
this .dealtDamage = nbt .getBoolean ("DealtDamage" );
270
288
this .dataTracker .set (LOYALTY , (byte ) EnchantmentHelper .getLoyalty (this .thrownStack ));
@@ -276,6 +294,9 @@ public void writeCustomDataToNbt(NbtCompound nbt) {
276
294
nbt .put ("ThrownItem" , this .thrownStack .writeNbt (new NbtCompound ()));
277
295
nbt .put ("BowItem" , this .getBowItem ().writeNbt (new NbtCompound ()));
278
296
nbt .putBoolean ("DealtDamage" , this .dealtDamage );
297
+ nbt .putFloat ("WaterDrag" ,this .dataTracker .get (WATER_DRAG ));
298
+ nbt .putBoolean ("SpeedDamage" ,this .dataTracker .get (SPEED_DAMAGE ));
299
+ nbt .putInt ("PreferredSlot" , this .dataTracker .get (PREFERRED_SLOT ));
279
300
}
280
301
281
302
@ Override
0 commit comments