Fix TinyTNT not spawning the correct entity client-side (and the renderer using the wrong shadow).

This commit is contained in:
Sebastian Hartte
2020-06-29 21:14:58 +02:00
parent d5491549eb
commit 7233b11284
2 changed files with 27 additions and 2 deletions
@@ -29,6 +29,7 @@ import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.MoverType; import net.minecraft.entity.MoverType;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.item.TNTEntity; import net.minecraft.entity.item.TNTEntity;
import net.minecraft.network.IPacket;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraft.particles.ParticleTypes; import net.minecraft.particles.ParticleTypes;
import net.minecraft.util.DamageSource; import net.minecraft.util.DamageSource;
@@ -47,11 +48,16 @@ import appeng.core.AEConfig;
import appeng.core.AppEng; import appeng.core.AppEng;
import appeng.core.sync.packets.MockExplosionPacket; import appeng.core.sync.packets.MockExplosionPacket;
import appeng.util.Platform; import appeng.util.Platform;
import net.minecraftforge.fml.network.NetworkHooks;
import javax.annotation.Nullable;
public final class TinyTNTPrimedEntity extends TNTEntity implements IEntityAdditionalSpawnData { public final class TinyTNTPrimedEntity extends TNTEntity implements IEntityAdditionalSpawnData {
public static EntityType<TinyTNTPrimedEntity> TYPE; public static EntityType<TinyTNTPrimedEntity> TYPE;
private LivingEntity placedBy;
public TinyTNTPrimedEntity(EntityType<? extends TinyTNTPrimedEntity> type, World worldIn) { public TinyTNTPrimedEntity(EntityType<? extends TinyTNTPrimedEntity> type, World worldIn) {
super(type, worldIn); super(type, worldIn);
this.preventEntitySpawning = true; this.preventEntitySpawning = true;
@@ -59,7 +65,21 @@ public final class TinyTNTPrimedEntity extends TNTEntity implements IEntityAddit
public TinyTNTPrimedEntity(final World w, final double x, final double y, final double z, public TinyTNTPrimedEntity(final World w, final double x, final double y, final double z,
final LivingEntity igniter) { final LivingEntity igniter) {
super(w, x, y, z, igniter); super(TYPE, w);
this.setPosition(x, y, z);
double d0 = w.rand.nextDouble() * (double)((float)Math.PI * 2F);
this.setMotion(-Math.sin(d0) * 0.02D, (double)0.2F, -Math.cos(d0) * 0.02D);
this.setFuse(80);
this.prevPosX = x;
this.prevPosY = y;
this.prevPosZ = z;
this.placedBy = igniter;
}
@Nullable
@Override
public LivingEntity getTntPlacedBy() {
return this.placedBy;
} }
/** /**
@@ -170,6 +190,11 @@ public final class TinyTNTPrimedEntity extends TNTEntity implements IEntityAddit
new MockExplosionPacket(this.getPosX(), this.getPosY(), this.getPosZ())); new MockExplosionPacket(this.getPosX(), this.getPosY(), this.getPosZ()));
} }
@Override
public IPacket<?> createSpawnPacket() {
return NetworkHooks.getEntitySpawningPacket(this);
}
@Override @Override
public void writeSpawnData(PacketBuffer buffer) { public void writeSpawnData(PacketBuffer buffer) {
buffer.writeByte(this.getFuse()); buffer.writeByte(this.getFuse());
@@ -38,7 +38,7 @@ public class TinyTNTPrimedRenderer extends EntityRenderer<TinyTNTPrimedEntity> {
public TinyTNTPrimedRenderer(final EntityRendererManager manager) { public TinyTNTPrimedRenderer(final EntityRendererManager manager) {
super(manager); super(manager);
this.shadowSize = 0.5F; this.shadowSize = 0.25F;
} }
@Override @Override