Posted March 16, 20214 yr So I have the following: ShrapnelTNTEntity: package me.gleep.oreganized.entities; import me.gleep.oreganized.util.RegistryHandler; import net.minecraft.entity.*; import net.minecraft.nbt.CompoundNBT; import net.minecraft.network.IPacket; import net.minecraft.network.datasync.DataParameter; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.network.play.server.SSpawnObjectPacket; import net.minecraft.particles.ParticleTypes; import net.minecraft.world.Explosion; import net.minecraft.world.World; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; public class ShrapnelTNTEntity extends Entity { private static final DataParameter<Integer> FUSE = EntityDataManager.createKey(ShrapnelTNTEntity.class, DataSerializers.VARINT); @Nullable private LivingEntity tntPlacedBy; private int fuse = 100; public ShrapnelTNTEntity(EntityType<? extends ShrapnelTNTEntity> entityTypeIn, World worldIn) { super(entityTypeIn, worldIn); this.preventEntitySpawning = true; } public ShrapnelTNTEntity(World worldIn, double x, double y, double z, @Nullable LivingEntity igniter) { this(RegistryHandler.SHRAPNEL_TNT_ENTITY.get(), worldIn); this.setPosition(x, y, z); double d0 = worldIn.rand.nextDouble() * (double)((float)Math.PI * 2F); this.setMotion(-Math.sin(d0) * 0.02D, (double)0.2F, -Math.cos(d0) * 0.02D); this.setFuse(100); this.prevPosX = x; this.prevPosY = y; this.prevPosZ = z; this.tntPlacedBy = igniter; } public void tick() { if (!this.hasNoGravity()) { this.setMotion(this.getMotion().add(0.0D, -0.04D, 0.0D)); } this.move(MoverType.SELF, this.getMotion()); this.setMotion(this.getMotion().scale(0.98D)); if (this.onGround) { this.setMotion(this.getMotion().mul(0.7D, -0.5D, 0.7D)); } --this.fuse; if (this.fuse <= 0) { this.remove(); if (!this.world.isRemote) { this.explode(); } } else { this.func_233566_aG_(); if (this.world.isRemote) { this.world.addParticle(ParticleTypes.SMOKE, this.getPosX(), this.getPosY() + 0.5D, this.getPosZ(), 0.0D, 0.0D, 0.0D); } } } protected void explode() { this.world.createExplosion(this, this.getPosX(), this.getPosYHeight(0.0625D), this.getPosZ(), 3.0F, Explosion.Mode.BREAK); } public void setFuse(int fuseIn) { this.dataManager.set(FUSE, fuseIn); this.fuse = fuseIn; } @Override protected boolean canTriggerWalking() { return false; } @Override public boolean canBeCollidedWith() { return !this.isAlive(); } public int getFuse() { return this.fuse; } @Override protected float getEyeHeight(Pose poseIn, EntitySize sizeIn) { return 0.15F; } @Override public void notifyDataManagerChange(DataParameter<?> key) { if (FUSE.equals(key)) { this.fuse = this.getFuseDataManager(); } } public int getFuseDataManager() { return this.dataManager.get(FUSE); } @Nullable public LivingEntity getTntPlacedBy() { return this.tntPlacedBy; } @Override protected void registerData() { this.dataManager.register(FUSE, 100); } @Override protected void readAdditional(CompoundNBT compound) { this.setFuse(compound.getShort("Fuse")); } @Override protected void writeAdditional(CompoundNBT compound) { compound.putShort("Fuse", (short)this.getFuse()); } @NotNull @Override public IPacket<?> createSpawnPacket() { return new SSpawnObjectPacket(this); } } ShrapnelTNTRenderer: package me.gleep.oreganized.entities.entityrenderer; import com.mojang.blaze3d.matrix.MatrixStack; import me.gleep.oreganized.entities.ShrapnelTNTEntity; import me.gleep.oreganized.util.RegistryHandler; import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererManager; import net.minecraft.client.renderer.entity.TNTMinecartRenderer; import net.minecraft.client.renderer.texture.AtlasTexture; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3f; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.client.registry.IRenderFactory; import org.jetbrains.annotations.NotNull; @OnlyIn(Dist.CLIENT) public class ShrapnelTNTRenderer extends EntityRenderer<ShrapnelTNTEntity> { public ShrapnelTNTRenderer(EntityRendererManager renderManagerIn) { super(renderManagerIn); this.shadowSize = 0.5F; } @Override public void render(ShrapnelTNTEntity entityIn, float entityYaw, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int packedLightIn) { matrixStackIn.push(); matrixStackIn.translate(0.0D, 0.5D, 0.0D); if ((float)entityIn.getFuse() - partialTicks + 1.0F < 10.0F) { float f = 1.0F - ((float)entityIn.getFuse() - partialTicks + 1.0F) / 10.0F; f = MathHelper.clamp(f, 0.0F, 1.0F); f = f * f; f = f * f; float f1 = 1.0F + f * 0.3F; matrixStackIn.scale(f1, f1, f1); } matrixStackIn.rotate(Vector3f.YP.rotationDegrees(-90.0F)); matrixStackIn.translate(-0.5D, -0.5D, 0.5D); matrixStackIn.rotate(Vector3f.YP.rotationDegrees(90.0F)); TNTMinecartRenderer.renderTntFlash(RegistryHandler.SHRAPNEL_TNT.get().getDefaultState(), matrixStackIn, bufferIn, packedLightIn, entityIn.getFuse() / 5 % 2 == 0); matrixStackIn.pop(); super.render(entityIn, entityYaw, partialTicks, matrixStackIn, bufferIn, packedLightIn); } @NotNull @Override public ResourceLocation getEntityTexture(ShrapnelTNTEntity entity) { return AtlasTexture.LOCATION_BLOCKS_TEXTURE; } } RegistryHandler: package me.gleep.oreganized.util; import me.gleep.oreganized.Oreganized; import me.gleep.oreganized.armors.*; import me.gleep.oreganized.blocks.*; import me.gleep.oreganized.entities.LeadNuggetEntity; import me.gleep.oreganized.entities.ShrapnelTNTEntity; import me.gleep.oreganized.entities.tileentities.ExposerBlockTileEntity; import me.gleep.oreganized.effects.*; import me.gleep.oreganized.fluids.*; import me.gleep.oreganized.items.*; import me.gleep.oreganized.tools.*; import net.minecraft.block.*; import net.minecraft.block.material.Material; import net.minecraft.client.gui.DisplayEffectsScreen; import net.minecraft.client.renderer.entity.EntityRendererManager; import net.minecraft.entity.EntityClassification; import net.minecraft.entity.EntityType; import net.minecraft.fluid.Fluid; import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.*; import net.minecraft.potion.Effect; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.ToolType; import net.minecraftforge.fluids.ForgeFlowingFluid; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; public class RegistryHandler { public static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITIES, Oreganized.MOD_ID); public static void init() { ENTITIES.register(FMLJavaModLoadingContext.get().getModEventBus()); //... } public static final RegistryObject<EntityType<ShrapnelTNTEntity>> SHRAPNEL_TNT_ENTITY = ENTITIES.register("shrapnel_tnt", () -> EntityType.Builder.<ShrapnelTNTEntity>create( ShrapnelTNTEntity::new, EntityClassification.MISC ).immuneToFire().size(0.98F, 0.98F).trackingRange(10).func_233608_b_(10).build("shrapnel_tnt") ); } And the renderer registration: private void doClientStuff(final FMLClientSetupEvent event) { RenderingRegistry.registerEntityRenderingHandler(RegistryHandler.SHRAPNEL_TNT_ENTITY.get(), ShrapnelTNTRenderer::new); } and the tnt itself works but the "exploding" entity does not render. I tried almost everything can anyone help me? Edited March 16, 20214 yr by <Gl33p_0r4nge>
March 16, 20214 yr Author Yes thanks it works now: BTW in console I got this: [09:44:59] [Render thread/ERROR] [minecraft/Util]: No data fixer registered for shrapnel_tnt is it something I should worry about?
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.