Skip to content

Commit 93cf5fa

Browse files
authored
Fix #2399 (#2440)
1 parent ab660fb commit 93cf5fa

File tree

6 files changed

+42
-3
lines changed

6 files changed

+42
-3
lines changed

src/main/java/twilightforest/entity/projectile/IceArrow.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.minecraft.world.entity.Entity;
66
import net.minecraft.world.entity.EntityType;
77
import net.minecraft.world.entity.LivingEntity;
8+
import net.minecraft.world.entity.projectile.AbstractArrow;
89
import net.minecraft.world.item.ItemStack;
910
import net.minecraft.world.level.Level;
1011
import net.minecraft.world.level.block.Blocks;
@@ -24,6 +25,10 @@ public IceArrow(Level world, @Nullable LivingEntity shooter, ItemStack stack, It
2425
super(TFEntities.ICE_ARROW.get(), world, shooter, stack, weapon);
2526
}
2627

28+
public IceArrow(AbstractArrow parentArrow, ItemStack stack, ItemStack weapon) {
29+
super(TFEntities.ICE_ARROW.get(), parentArrow, stack, weapon);
30+
}
31+
2732
@Override
2833
public void tick() {
2934
super.tick();

src/main/java/twilightforest/entity/projectile/SeekerArrow.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.minecraft.network.syncher.SynchedEntityData;
77
import net.minecraft.world.entity.*;
88
import net.minecraft.world.entity.monster.Monster;
9+
import net.minecraft.world.entity.projectile.AbstractArrow;
910
import net.minecraft.world.item.ItemStack;
1011
import net.minecraft.world.level.Level;
1112
import net.minecraft.world.phys.AABB;
@@ -35,6 +36,11 @@ public SeekerArrow(Level world, LivingEntity shooter, ItemStack stack, ItemStack
3536
this.setBaseDamage(1.0D);
3637
}
3738

39+
public SeekerArrow(AbstractArrow parentArrow, ItemStack stack, ItemStack weapon) {
40+
super(TFEntities.SEEKER_ARROW.get(), parentArrow, stack, weapon);
41+
this.setBaseDamage(1.0D);
42+
}
43+
3844
@Override
3945
protected void defineSynchedData(SynchedEntityData.Builder builder) {
4046
super.defineSynchedData(builder);

src/main/java/twilightforest/entity/projectile/TFArrow.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@
1111

1212
public abstract class TFArrow extends AbstractArrow implements ITFProjectile {
1313

14+
@Nullable
15+
protected final AbstractArrow parentArrow;
16+
1417
public TFArrow(EntityType<? extends TFArrow> type, Level level) {
1518
super(type, level);
19+
this.parentArrow = null;
1620
}
1721

1822
public TFArrow(EntityType<? extends TFArrow> type, Level level, @Nullable LivingEntity shooter, ItemStack stack, ItemStack weapon) {
@@ -21,10 +25,29 @@ public TFArrow(EntityType<? extends TFArrow> type, Level level, @Nullable Living
2125
if (shooter != null) {
2226
this.setPos(shooter.getX(), shooter.getEyeY() - 0.1D, shooter.getZ());
2327
}
28+
this.parentArrow = null;
29+
}
30+
31+
public TFArrow(EntityType<? extends TFArrow> type, AbstractArrow parentArrow, ItemStack stack, ItemStack weapon) {
32+
super(type, (LivingEntity) parentArrow.getOwner(), parentArrow.level(), stack, weapon);
33+
var shooter = (LivingEntity) parentArrow.getOwner();
34+
this.setOwner(shooter);
35+
if (shooter != null) {
36+
this.setPos(shooter.getX(), shooter.getEyeY() - 0.1D, shooter.getZ());
37+
}
38+
this.parentArrow = parentArrow;
2439
}
2540

2641
@Override
2742
protected ItemStack getDefaultPickupItem() {
2843
return new ItemStack(Items.ARROW);
2944
}
45+
46+
@Override
47+
public void doPostHurtEffects(LivingEntity target) {
48+
if (this.parentArrow != null) {
49+
this.parentArrow.doPostHurtEffects(target);
50+
}
51+
super.doPostHurtEffects(target);
52+
}
3053
}

src/main/java/twilightforest/item/IceBowItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ public IceBowItem(Properties properties) {
1414

1515
@Override
1616
public AbstractArrow customArrow(AbstractArrow arrow, ItemStack projectileStack, ItemStack weaponStack) {
17-
return new IceArrow(arrow.level(), (LivingEntity) arrow.getOwner(), projectileStack.copyWithCount(1), weaponStack);
17+
return new IceArrow(arrow, projectileStack.copyWithCount(1), weaponStack);
1818
}
1919
}

src/main/java/twilightforest/item/SeekerBowItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ public SeekerBowItem(Properties properties) {
1414

1515
@Override
1616
public AbstractArrow customArrow(AbstractArrow arrow, ItemStack projectileStack, ItemStack weaponStack) {
17-
return new SeekerArrow(arrow.level(), (LivingEntity) arrow.getOwner(), projectileStack.copyWithCount(1), weaponStack);
17+
return new SeekerArrow(arrow, projectileStack.copyWithCount(1), weaponStack);
1818
}
1919
}

src/main/resources/META-INF/accesstransformer.cfg

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,4 +254,9 @@ public net.minecraft.client.data.models.ModelProvider$SimpleModelCollector <init
254254
public net.minecraft.world.item.BlockItem updateBlockEntityComponents(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/item/ItemStack;)V
255255

256256
public net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer renderArmorPiece(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/EquipmentSlot;ILnet/minecraft/client/model/HumanoidModel;)V
257-
public net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer getArmorModel(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;Lnet/minecraft/world/entity/EquipmentSlot;)Lnet/minecraft/client/model/HumanoidModel;
257+
public net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer getArmorModel(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;Lnet/minecraft/world/entity/EquipmentSlot;)Lnet/minecraft/client/model/HumanoidModel;
258+
259+
# TFArrow (add the effects of the original arrow to target entity)
260+
public net.minecraft.world.entity.projectile.AbstractArrow doPostHurtEffects(Lnet/minecraft/world/entity/LivingEntity;)V
261+
public net.minecraft.world.entity.projectile.Arrow doPostHurtEffects(Lnet/minecraft/world/entity/LivingEntity;)V
262+
public net.minecraft.world.entity.projectile.SpectralArrow doPostHurtEffects(Lnet/minecraft/world/entity/LivingEntity;)V

0 commit comments

Comments
 (0)