11package com .github .ethanicuss .astraladditions .entities .boomerang ;
22
3+ import com .github .ethanicuss .astraladditions .AstralAdditions ;
34import com .github .ethanicuss .astraladditions .registry .ModItems ;
5+ import net .fabricmc .fabric .api .item .v1 .FabricItem ;
6+ import net .fabricmc .fabric .impl .registry .sync .FabricRegistry ;
47import net .minecraft .entity .Entity ;
58import net .minecraft .entity .EntityType ;
9+ import net .minecraft .entity .ItemEntity ;
610import net .minecraft .entity .damage .DamageSource ;
711import net .minecraft .entity .data .DataTracker ;
812import net .minecraft .entity .data .TrackedData ;
913import net .minecraft .entity .data .TrackedDataHandlerRegistry ;
1014import net .minecraft .entity .mob .GhastEntity ;
1115import net .minecraft .entity .player .PlayerEntity ;
1216import net .minecraft .entity .projectile .thrown .ThrownItemEntity ;
17+ import net .minecraft .inventory .Inventory ;
1318import net .minecraft .item .Item ;
1419import net .minecraft .item .ItemStack ;
1520import net .minecraft .item .Items ;
1621import net .minecraft .particle .ParticleEffect ;
1722import net .minecraft .particle .ParticleTypes ;
23+ import net .minecraft .util .Identifier ;
1824import net .minecraft .util .hit .EntityHitResult ;
1925import net .minecraft .util .hit .HitResult ;
2026import net .minecraft .util .math .Vec3d ;
27+ import net .minecraft .util .registry .BuiltinRegistries ;
28+ import net .minecraft .util .registry .Registry ;
2129import net .minecraft .world .World ;
2230
2331import java .util .Objects ;
@@ -27,8 +35,12 @@ public class BoomerangEntity extends ThrownItemEntity {
2735
2836 private static final TrackedData <Boolean > HIT = DataTracker .registerData (BoomerangEntity .class , TrackedDataHandlerRegistry .BOOLEAN );
2937 private static final TrackedData <Integer > AGE = DataTracker .registerData (BoomerangEntity .class , TrackedDataHandlerRegistry .INTEGER );
38+ private static final TrackedData <Float > DAMAGE = DataTracker .registerData (BoomerangEntity .class , TrackedDataHandlerRegistry .FLOAT );
3039 private static final TrackedData <Integer > MAX_AGE = DataTracker .registerData (BoomerangEntity .class , TrackedDataHandlerRegistry .INTEGER );
40+ private static final TrackedData <Float > SPEED = DataTracker .registerData (BoomerangEntity .class , TrackedDataHandlerRegistry .FLOAT );
41+ private static final TrackedData <Float > CURVE = DataTracker .registerData (BoomerangEntity .class , TrackedDataHandlerRegistry .FLOAT );
3142 private static final TrackedData <String > OWNER = DataTracker .registerData (BoomerangEntity .class , TrackedDataHandlerRegistry .STRING );
43+ private static final TrackedData <String > ITEM = DataTracker .registerData (BoomerangEntity .class , TrackedDataHandlerRegistry .STRING );
3244
3345 public BoomerangEntity (EntityType <? extends Entity > entityType , World world ) {
3446 super ((EntityType <? extends ThrownItemEntity >)entityType , world );
@@ -56,14 +68,32 @@ public void handleStatus(byte status) {
5668 public void setOwner (String UUID ){
5769 this .getDataTracker ().set (OWNER , UUID );
5870 }
71+ public void setRangItem (String rangItem ){
72+ this .getDataTracker ().set (ITEM , rangItem );
73+ }
74+ public ItemStack getRangItem (){
75+ return Registry .ITEM .get (new Identifier (AstralAdditions .MOD_ID , this .dataTracker .get (ITEM ))).getDefaultStack ();
76+ }
77+ public void setMaxAge (int maxAge ){
78+ this .getDataTracker ().set (MAX_AGE , maxAge );
79+ }
80+ public void setRangDamage (float damage ){
81+ this .getDataTracker ().set (DAMAGE , damage );
82+ }
83+ public void setRangSpeed (float speed ){
84+ this .getDataTracker ().set (SPEED , speed );
85+ }
86+ public void setCurve (float curve ){
87+ this .getDataTracker ().set (CURVE , curve );
88+ }
5989
6090 @ Override
6191 public void tick () {
6292 if (this .getDataTracker ().get (HIT )) {
6393 if (!Objects .equals (this .getDataTracker ().get (OWNER ), "" )) {
6494 PlayerEntity p = world .getPlayerByUuid (UUID .fromString (this .getDataTracker ().get (OWNER )));
6595 if (p != null ){
66- double strength = 2.5 ;
96+ double strength = this . getDataTracker (). get ( SPEED )+ 0.5f ;
6797 double xdiff = this .getX () - p .getX ();
6898 double zdiff = this .getZ () - p .getZ ();
6999 double dist ;
@@ -96,18 +126,23 @@ public void tick() {
96126 }
97127 }
98128 else {
99- this .getDataTracker ().set (AGE , this .getDataTracker ().get (AGE )+1 );
129+ float xspeed = (float )this .getVelocity ().getX ();
130+ float yspeed = (float )this .getVelocity ().getZ ();
131+ float angle = (float )(Math .toDegrees (Math .atan (xspeed /yspeed ))) - this .getDataTracker ().get (CURVE );
132+ if (yspeed < 0 ){angle += 180 ; System .out .println ("brah" );}
133+ this .setVelocity (Math .sqrt (Math .pow (xspeed , 2 )+Math .pow (yspeed , 2 ))*Math .sin (Math .toRadians (angle )), (float )this .getVelocity ().getY (), Math .sqrt (Math .pow (xspeed , 2 )+Math .pow (yspeed , 2 ))*Math .cos (Math .toRadians (angle )));
100134 if (this .getDataTracker ().get (AGE ) > this .getDataTracker ().get (MAX_AGE )){
101135 this .getDataTracker ().set (HIT , true );
102136 }
103137 }
104138 if (this .getDataTracker ().get (AGE ) > this .getDataTracker ().get (MAX_AGE )*3 ){
105139 PlayerEntity p = world .getPlayerByUuid (UUID .fromString (this .getDataTracker ().get (OWNER )));
106140 if (p != null ){
107- p . giveItemStack ( ModItems . DIAMOND_BOOMER . getDefaultStack ( ));
141+ world . spawnEntity ( new ItemEntity ( world , p . getX (), p . getY () + 1 , p . getZ (), this . getRangItem () ));
108142 this .discard ();
109143 }
110144 }
145+ this .getDataTracker ().set (AGE , this .getDataTracker ().get (AGE )+1 );
111146 super .tick ();
112147 }
113148
@@ -116,13 +151,20 @@ protected void onEntityHit(EntityHitResult entityHitResult) {
116151 super .onEntityHit (entityHitResult );
117152 Entity entity = entityHitResult .getEntity ();
118153 if (!Objects .equals (entity .getUuidAsString (), this .getDataTracker ().get (OWNER ))) {
119- entity .damage (DamageSource .thrownProjectile (this , this .getOwner ()), 6 );
120- entity .addVelocity (0.0f , 0.3f , 0.0f );
154+ entity .damage (DamageSource .thrownProjectile (this , this .getOwner ()), this . getDataTracker (). get ( DAMAGE ) );
155+ entity .addVelocity (0.0f , 0.01f * this . getDataTracker (). get ( SPEED ) , 0.0f );
121156 }
122157 else {
123158 PlayerEntity p = world .getPlayerByUuid (UUID .fromString (this .getDataTracker ().get (OWNER )));
124159 if (p != null ){
125- p .giveItemStack (ModItems .DIAMOND_BOOMER .getDefaultStack ());
160+ ItemStack i = this .getRangItem ();
161+ if (i != null ) {
162+ if (p .getInventory ().getStack (p .getInventory ().selectedSlot ).isEmpty ()) {
163+ p .getInventory ().setStack (p .getInventory ().selectedSlot , i );
164+ } else {
165+ world .spawnEntity (new ItemEntity (world , p .getX (), p .getY () + 1 , p .getZ (), i ));
166+ }
167+ }
126168 this .discard ();
127169 }
128170 }
@@ -144,6 +186,10 @@ protected void initDataTracker() {
144186 this .dataTracker .startTracking (HIT , false );
145187 this .dataTracker .startTracking (OWNER , "" );
146188 this .dataTracker .startTracking (AGE , 0 );
189+ this .dataTracker .startTracking (DAMAGE , 1.0f );
147190 this .dataTracker .startTracking (MAX_AGE , 8 );
191+ this .dataTracker .startTracking (SPEED , 1.0f );
192+ this .dataTracker .startTracking (CURVE , 0.0f );
193+ this .dataTracker .startTracking (ITEM , "minecraft:dirt" );
148194 }
149195}
0 commit comments