diff --git a/src/main/java/net/solaara/beeyourself/BeeYourself.java b/src/main/java/net/solaara/beeyourself/BeeYourself.java index b5d707b..a1b17c7 100644 --- a/src/main/java/net/solaara/beeyourself/BeeYourself.java +++ b/src/main/java/net/solaara/beeyourself/BeeYourself.java @@ -4,11 +4,13 @@ import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; +import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; import net.minecraft.item.ItemGroup; import net.minecraft.item.SpawnEggItem; +import net.minecraft.particle.DefaultParticleType; import net.minecraft.item.Item; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; @@ -23,6 +25,8 @@ public class BeeYourself implements ModInitializer { // That way, it's clear which mod wrote info, warnings, and errors. public static final Logger LOGGER = LoggerFactory.getLogger("bee-yourself"); + public static final DefaultParticleType TRANS_FLAG_HEART_PARTICLE = FabricParticleTypes.simple(); + public static final EntityType TRANS_BEE = Registry.register( Registry.ENTITY_TYPE, new Identifier("beeyourself", "transbee"), @@ -41,6 +45,8 @@ public void onInitialize() { FabricDefaultAttributeRegistry.register(TRANS_BEE, TransBeeEntity.create_transbee_attributes()); Registry.register(Registry.ITEM, new Identifier("bee-yourself", "trans_bee_spawn_egg"), TRANS_BEE_SPAWN_EGG); + Registry.register(Registry.PARTICLE_TYPE, new Identifier("bee-yourself", "trans_flag_heart"), + TRANS_FLAG_HEART_PARTICLE); LOGGER.info("BeeYourself onInitialize()"); } diff --git a/src/main/java/net/solaara/beeyourself/BeeYourselfClient.java b/src/main/java/net/solaara/beeyourself/BeeYourselfClient.java index cecd6b1..00d7c17 100644 --- a/src/main/java/net/solaara/beeyourself/BeeYourselfClient.java +++ b/src/main/java/net/solaara/beeyourself/BeeYourselfClient.java @@ -4,10 +4,15 @@ import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; +import net.fabricmc.fabric.api.event.client.ClientSpriteRegistryCallback; +import net.minecraft.client.particle.EmotionParticle.HeartFactory; import net.minecraft.client.render.entity.model.EntityModelLayer; +import net.minecraft.screen.PlayerScreenHandler; import net.minecraft.util.Identifier; import net.solaara.beeyourself.transbee.TransBeeEntityModel; import net.solaara.beeyourself.transbee.TransBeeEntityRenderer; +import net.solaara.beeyourself.transflagheart.TransFlagHeartParticle; @Environment(EnvType.CLIENT) public class BeeYourselfClient implements ClientModInitializer { @@ -21,6 +26,9 @@ public void onInitializeClient() { return new TransBeeEntityRenderer(context); }); + ParticleFactoryRegistry.getInstance().register(BeeYourself.TRANS_FLAG_HEART_PARTICLE, + TransFlagHeartParticle.Factory::new); + EntityModelLayerRegistry.register(MODEL_TRANSBEE_LAYER, TransBeeEntityModel::getTexturedModelData); } diff --git a/src/main/java/net/solaara/beeyourself/transbee/TransBeeEntity.java b/src/main/java/net/solaara/beeyourself/transbee/TransBeeEntity.java index 0dc816e..62cc474 100644 --- a/src/main/java/net/solaara/beeyourself/transbee/TransBeeEntity.java +++ b/src/main/java/net/solaara/beeyourself/transbee/TransBeeEntity.java @@ -76,9 +76,10 @@ public ActionResult interactMob(PlayerEntity player, Hand hand) { double d = this.random.nextGaussian() * 0.2; double e = this.random.nextGaussian() * 0.2; double f = this.random.nextGaussian() * 0.2; - ModUtils.spawnForcedParticles((ServerWorld) world, ParticleTypes.HEART, this.getParticleX(1.0), + ModUtils.spawnForcedParticles((ServerWorld) world, BeeYourself.TRANS_FLAG_HEART_PARTICLE, + this.getParticleX(1.0), this.getRandomBodyY() + 0.5, - this.getParticleZ(1.0), 7, d, e, + this.getParticleZ(1.0), 17, d, e, f, 1); this.setTarget(player); diff --git a/src/main/java/net/solaara/beeyourself/transflagheart/TransFlagHeartParticle.java b/src/main/java/net/solaara/beeyourself/transflagheart/TransFlagHeartParticle.java new file mode 100644 index 0000000..3539f6f --- /dev/null +++ b/src/main/java/net/solaara/beeyourself/transflagheart/TransFlagHeartParticle.java @@ -0,0 +1,66 @@ +package net.solaara.beeyourself.transflagheart; + +import net.fabricmc.api.Environment; +import net.fabricmc.api.EnvType; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleFactory; +import net.minecraft.client.particle.ParticleTextureSheet; +import net.minecraft.client.particle.SpriteBillboardParticle; +import net.minecraft.client.particle.SpriteProvider; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.particle.DefaultParticleType; +import net.solaara.beeyourself.BeeYourself; + +@Environment(EnvType.CLIENT) +public class TransFlagHeartParticle extends SpriteBillboardParticle { + // The sprite provider which is used to determine the particle's texture + private final SpriteProvider spriteProvider; + private final int variant; + + TransFlagHeartParticle(ClientWorld world, double x, double y, double z, double velX, double velY, double velZ, + SpriteProvider spriteProvider) { + super(world, x, y, z); + this.spriteProvider = spriteProvider; // Sets the sprite provider from above to the sprite provider in the + // constructor parameters + this.x = x; // The x from the constructor parameters + this.y = y; + this.z = z; + this.alpha = 1.0f; // Setting the alpha to 1.0f means there will be no opacity change until the + // alpha value is changed + this.velocityMultiplier = 0.86F; + this.velocityX *= 0.01F; + this.velocityY *= 0.01F; + this.velocityZ *= 0.01F; + this.velocityY += 0.1; + this.scale *= 1.5F; + this.maxAge = 16; + this.collidesWithWorld = false; + this.setSpriteForAge(spriteProvider); // Required + this.variant = world.random.nextInt(1, 4); + var test = this.spriteProvider.getSprite(this.variant, this.variant); + + BeeYourself.LOGGER.info("variant " + this.variant); + BeeYourself.LOGGER.info("variant " + test); + } + + @Override + public ParticleTextureSheet getType() { + return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; + } + + @Environment(EnvType.CLIENT) + public static class Factory implements ParticleFactory { + // The factory used in a particle's registry + private final SpriteProvider spriteProvider; + + public Factory(SpriteProvider spriteProvider) { + this.spriteProvider = spriteProvider; + } + + public Particle createParticle(DefaultParticleType defaultParticleType, ClientWorld clientWorld, double x, + double y, double z, double velX, double velY, double velZ) { + return new TransFlagHeartParticle(clientWorld, x, y, z, velX, velY, velZ, this.spriteProvider); + } + } +} diff --git a/src/main/resources/assets/bee-yourself/particles/trans_flag_heart.json b/src/main/resources/assets/bee-yourself/particles/trans_flag_heart.json new file mode 100644 index 0000000..ad56925 --- /dev/null +++ b/src/main/resources/assets/bee-yourself/particles/trans_flag_heart.json @@ -0,0 +1,7 @@ +{ + "textures": [ + "bee-yourself:trans_flag_heart_1", + "bee-yourself:trans_flag_heart_2", + "bee-yourself:trans_flag_heart_3" + ] +} diff --git a/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_1.png b/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_1.png new file mode 100644 index 0000000..4656294 Binary files /dev/null and b/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_1.png differ diff --git a/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_2.png b/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_2.png new file mode 100644 index 0000000..f64c665 Binary files /dev/null and b/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_2.png differ diff --git a/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_3.png b/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_3.png new file mode 100644 index 0000000..3a73021 Binary files /dev/null and b/src/main/resources/assets/bee-yourself/textures/particle/trans_flag_heart_3.png differ diff --git a/src/main/resources/assets/bee-yourself/textures/particle/trans_heart_atlas.png b/src/main/resources/assets/bee-yourself/textures/particle/trans_heart_atlas.png new file mode 100644 index 0000000..bcc4a9e Binary files /dev/null and b/src/main/resources/assets/bee-yourself/textures/particle/trans_heart_atlas.png differ