Skip to content

Commit fe92f1a

Browse files
committed
Paramaterised boomerang item/entity
Added curve property Added shimmerang
1 parent 7a54f99 commit fe92f1a

File tree

6 files changed

+230
-15
lines changed

6 files changed

+230
-15
lines changed

src/main/java/com/github/ethanicuss/astraladditions/entities/boomerang/BoomerangEntity.java

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,31 @@
11
package com.github.ethanicuss.astraladditions.entities.boomerang;
22

3+
import com.github.ethanicuss.astraladditions.AstralAdditions;
34
import com.github.ethanicuss.astraladditions.registry.ModItems;
5+
import net.fabricmc.fabric.api.item.v1.FabricItem;
6+
import net.fabricmc.fabric.impl.registry.sync.FabricRegistry;
47
import net.minecraft.entity.Entity;
58
import net.minecraft.entity.EntityType;
9+
import net.minecraft.entity.ItemEntity;
610
import net.minecraft.entity.damage.DamageSource;
711
import net.minecraft.entity.data.DataTracker;
812
import net.minecraft.entity.data.TrackedData;
913
import net.minecraft.entity.data.TrackedDataHandlerRegistry;
1014
import net.minecraft.entity.mob.GhastEntity;
1115
import net.minecraft.entity.player.PlayerEntity;
1216
import net.minecraft.entity.projectile.thrown.ThrownItemEntity;
17+
import net.minecraft.inventory.Inventory;
1318
import net.minecraft.item.Item;
1419
import net.minecraft.item.ItemStack;
1520
import net.minecraft.item.Items;
1621
import net.minecraft.particle.ParticleEffect;
1722
import net.minecraft.particle.ParticleTypes;
23+
import net.minecraft.util.Identifier;
1824
import net.minecraft.util.hit.EntityHitResult;
1925
import net.minecraft.util.hit.HitResult;
2026
import net.minecraft.util.math.Vec3d;
27+
import net.minecraft.util.registry.BuiltinRegistries;
28+
import net.minecraft.util.registry.Registry;
2129
import net.minecraft.world.World;
2230

2331
import 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
}

src/main/java/com/github/ethanicuss/astraladditions/entities/boomerang/BoomerangEntityRenderer.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@
44
import com.github.ethanicuss.astraladditions.entities.cometball.CometballEntity;
55
import net.fabricmc.api.EnvType;
66
import net.fabricmc.api.Environment;
7+
import net.minecraft.client.MinecraftClient;
78
import net.minecraft.client.render.OverlayTexture;
89
import net.minecraft.client.render.RenderLayer;
910
import net.minecraft.client.render.VertexConsumer;
1011
import net.minecraft.client.render.VertexConsumerProvider;
1112
import net.minecraft.client.render.entity.EntityRenderer;
1213
import net.minecraft.client.render.entity.EntityRendererFactory;
14+
import net.minecraft.client.render.model.json.ModelTransformation;
1315
import net.minecraft.client.util.math.MatrixStack;
16+
import net.minecraft.item.ItemStack;
17+
import net.minecraft.item.Items;
1418
import net.minecraft.util.Identifier;
1519
import net.minecraft.util.math.BlockPos;
1620
import net.minecraft.util.math.Matrix3f;
@@ -20,7 +24,7 @@
2024
@Environment(value= EnvType.CLIENT)
2125
public class BoomerangEntityRenderer
2226
extends EntityRenderer<BoomerangEntity> {
23-
private static final Identifier TEXTURE = new Identifier(AstralAdditions.MOD_ID, "textures/entity/cometball/cometball.png");
27+
private static final Identifier TEXTURE = new Identifier(AstralAdditions.MOD_ID, "textures/item/fragile_item.png");
2428
private static RenderLayer LAYER = RenderLayer.getEntityCutoutNoCull(TEXTURE);
2529

2630
public BoomerangEntityRenderer(EntityRendererFactory.Context context) {
@@ -33,8 +37,8 @@ protected int getBlockLight(BoomerangEntity dragonFireballEntity, BlockPos block
3337
}
3438

3539
@Override
36-
public void render(BoomerangEntity dragonFireballEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) {
37-
matrixStack.push();
40+
public void render(BoomerangEntity entity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) {
41+
/*matrixStack.push();
3842
matrixStack.scale(1.0f, 1.0f, 1.0f);
3943
matrixStack.multiply(this.dispatcher.getRotation());
4044
matrixStack.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(180.0f));
@@ -47,7 +51,17 @@ public void render(BoomerangEntity dragonFireballEntity, float f, float g, Matri
4751
produceVertex(vertexConsumer, matrix4f, matrix3f, i, 1.0f, 1, 1, 0);
4852
produceVertex(vertexConsumer, matrix4f, matrix3f, i, 0.0f, 1, 0, 0);
4953
matrixStack.pop();
50-
super.render(dragonFireballEntity, f, g, matrixStack, vertexConsumerProvider, i);
54+
super.render(dragonFireballEntity, f, g, matrixStack, vertexConsumerProvider, i);*/
55+
ItemStack itemStack = entity.getRangItem();
56+
if (itemStack != ItemStack.EMPTY || itemStack.isOf(Items.AIR)) {
57+
matrixStack.push();
58+
matrixStack.translate(0.0, -0.1, 0.0);
59+
matrixStack.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion((entity.getWorld().getTime())*20));
60+
matrixStack.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(90));
61+
matrixStack.scale(1.5f, 1.0f, 1.5f);
62+
MinecraftClient.getInstance().getItemRenderer().renderItem(itemStack, ModelTransformation.Mode.FIXED, i, 0, matrixStack, vertexConsumerProvider, 0);
63+
matrixStack.pop();
64+
}
5165
}
5266

5367
private static void produceVertex(VertexConsumer vertexConsumer, Matrix4f positionMatrix, Matrix3f normalMatrix, int light, float x, int y, int textureU, int textureV) {

src/main/java/com/github/ethanicuss/astraladditions/items/BoomerangItem.java

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,44 @@
33
import com.github.ethanicuss.astraladditions.entities.ModEntities;
44
import com.github.ethanicuss.astraladditions.entities.boomerang.BoomerangEntity;
55
import com.github.ethanicuss.astraladditions.entities.cometball.CometballEntity;
6+
import net.minecraft.client.item.TooltipContext;
67
import net.minecraft.entity.damage.DamageSource;
78
import net.minecraft.entity.player.PlayerEntity;
89
import net.minecraft.item.Item;
910
import net.minecraft.item.ItemStack;
11+
import net.minecraft.nbt.NbtCompound;
1012
import net.minecraft.particle.ParticleTypes;
1113
import net.minecraft.sound.SoundCategory;
1214
import net.minecraft.sound.SoundEvents;
1315
import net.minecraft.stat.Stats;
16+
import net.minecraft.text.LiteralText;
17+
import net.minecraft.text.Text;
18+
import net.minecraft.util.Formatting;
1419
import net.minecraft.util.Hand;
20+
import net.minecraft.util.StringHelper;
1521
import net.minecraft.util.TypedActionResult;
1622
import net.minecraft.util.math.MathHelper;
1723
import net.minecraft.util.math.Vec3d;
1824
import net.minecraft.world.World;
25+
import org.jetbrains.annotations.Nullable;
26+
27+
import java.util.List;
28+
import java.util.Objects;
1929

2030
public class BoomerangItem
2131
extends Item {
2232

23-
public BoomerangItem(Item.Settings settings) {
33+
public int DISTANCE = 0;
34+
public float SPEED = 0;
35+
public float DAMAGE = 0;
36+
public float CURVE = 0;
37+
38+
public BoomerangItem(Item.Settings settings, float damage, int distance, float speed, float curve) {
2439
super(settings);
40+
this.DAMAGE = damage;
41+
this.DISTANCE = distance;
42+
this.SPEED = speed;
43+
this.CURVE = curve;
2544
}
2645

2746
@Override
@@ -31,10 +50,15 @@ public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand han
3150
if (!world.isClient) {
3251
BoomerangEntity snowballEntity = new BoomerangEntity(ModEntities.BOOMERANG, user.getWorld());
3352
snowballEntity.setOwner(user);
34-
3553
snowballEntity.updatePosition(user.getX(), user.getEyeY(), user.getZ());
36-
snowballEntity.setItem(itemStack);
37-
snowballEntity.setVelocity(user, user.getPitch(), user.getYaw(), 0.0f, 1.8f, 0.5f);
54+
55+
snowballEntity.setRangItem(this.asItem().toString());
56+
snowballEntity.setRangDamage(this.DAMAGE);
57+
snowballEntity.setMaxAge(this.DISTANCE);
58+
snowballEntity.setRangSpeed(this.SPEED);
59+
snowballEntity.setCurve(this.CURVE);
60+
snowballEntity.setVelocity(user, user.getPitch(), user.getYaw()-this.CURVE*5, 0.0f, this.SPEED, 0.5f);
61+
3862
snowballEntity.setOwner(user.getUuidAsString());
3963
world.spawnEntity(snowballEntity);
4064
}
@@ -46,4 +70,15 @@ public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand han
4670

4771
return TypedActionResult.success(itemStack, world.isClient());
4872
}
73+
74+
@Override
75+
public void appendTooltip(ItemStack itemStack, @Nullable World world, List<Text> tooltip, TooltipContext context) {
76+
if (itemStack.hasNbt()) {
77+
NbtCompound nbtCompound = itemStack.getNbt();
78+
tooltip.add(new LiteralText("Damage: " + this.DAMAGE).formatted(Formatting.BLUE));
79+
tooltip.add(new LiteralText("Speed: " + this.SPEED).formatted(Formatting.BLUE));
80+
tooltip.add(new LiteralText("Duration: " + this.DISTANCE).formatted(Formatting.BLUE));
81+
tooltip.add(new LiteralText("Curve: " + this.CURVE).formatted(Formatting.BLUE));
82+
}
83+
}
4984
}

src/main/java/com/github/ethanicuss/astraladditions/registry/ModItems.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ public class ModItems {
4848
public static final Item CHROMATIC_VACUUM = new ChromaticVacuumItem(new FabricItemSettings().group(ItemGroup.TOOLS).maxCount(1).maxDamage(512));
4949
public static final Item ASTRAL_HOE = new AstralHoeItem(new FabricItemSettings().group(ItemGroup.COMBAT).maxCount(1).rarity(Rarity.RARE).maxDamage(1536));
5050
public static final Item SOULSTEAL_DAGGER = new SoulstealDaggerItem(new FabricItemSettings().group(ItemGroup.COMBAT).maxCount(1).rarity(Rarity.RARE).maxDamage(768));
51-
public static final Item DIAMOND_BOOMER = new BoomerangItem(new FabricItemSettings().group(ItemGroup.COMBAT).maxCount(4).rarity(Rarity.RARE));
51+
public static final Item DIAMOND_BOOMER = new BoomerangItem(new FabricItemSettings().group(ItemGroup.COMBAT).maxCount(1).rarity(Rarity.RARE), 6.0f, 12, 1.2f, 0.0f);
52+
public static final Item SHIMMERANG = new BoomerangItem(new FabricItemSettings().group(ItemGroup.COMBAT).maxCount(1).rarity(Rarity.RARE), 8.0f, 8, 2.0f, 5.0f);
5253
public static void registerItems() {
5354
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "cometball"), COMETBALL);
5455
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "pylon"), PYLON);
@@ -79,6 +80,7 @@ public static void registerItems() {
7980
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "astral_hoe"), ASTRAL_HOE);
8081
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "soulsteal_dagger"), SOULSTEAL_DAGGER);
8182
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "diamond_boomer"), DIAMOND_BOOMER);
83+
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "shimmerang"), SHIMMERANG);
8284
addSacrificeItem(AWAKENED_SHIMMER_HEART, ModEntities.SHIMMER_BLAZE);
8385
}
8486
private static List<Item> sacrificableItems = new ArrayList<Item>();

0 commit comments

Comments
 (0)