budding amethyst emits hex particles

This commit is contained in:
yrsegal@gmail.com 2022-05-29 19:24:53 -04:00
parent 758d71bc18
commit e1ba0a14dc
3 changed files with 65 additions and 4 deletions

View file

@ -42,7 +42,7 @@ public class ConjureParticle extends TextureSheetParticle {
this.setAlpha(a / 255f * lightness);
this.friction = 0.96F;
this.gravity = light ? -0.01F : 0F;
this.gravity = light && dy != 0 && dx != 0 && dz != 0 ? -0.01F : 0F;
this.speedUpWhenYMotionIsBlocked = true;
this.sprites = pSprites;

View file

@ -0,0 +1,50 @@
package at.petrak.hexcasting.mixin.client;
import at.petrak.hexcasting.common.particles.ConjureParticleOptions;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.util.Mth;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import java.util.Random;
@Mixin(ClientLevel.class)
public abstract class MixinClientLevel {
@Inject(method = "doAnimateTick",
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/Block;animateTick(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Ljava/util/Random;)V"),
locals = LocalCapture.CAPTURE_FAILSOFT)
public void addBuddingAmethystParticles(int baseX, int baseY, int baseZ, int range, Random rand, Block marked, BlockPos.MutableBlockPos pos, CallbackInfo ci,
int trueX, int trueY, int trueZ, BlockState state) {
ClientLevel self = ((ClientLevel) (Object) this);
if (state.is(Blocks.BUDDING_AMETHYST)) {
ParticleOptions options = new ConjureParticleOptions(0x8932b8, true);
Vec3 center = Vec3.atCenterOf(pos);
for (Direction direction : Direction.values()) {
int dX = direction.getStepX();
int dY = direction.getStepY();
int dZ = direction.getStepZ();
int count = rand.nextInt(10) / 5;
for (int i = 0; i < count; i++) {
double pX = center.x + (dX == 0 ? Mth.nextDouble(rand, -0.5D, 0.5D) : (double) dX * 0.55D);
double pY = center.y + (dY == 0 ? Mth.nextDouble(rand, -0.5D, 0.5D) : (double) dY * 0.55D);
double pZ = center.z + (dZ == 0 ? Mth.nextDouble(rand, -0.5D, 0.5D) : (double) dZ * 0.55D);
self.addParticle(options, pX, pY, pZ, 0, 0, 0);
}
}
}
}
}

View file

@ -5,8 +5,19 @@
"refmap": "hexcasting.mixins.refmap.json",
"package": "at.petrak.hexcasting.mixin",
"mixins": [
"MixinMob", "MixinRaider", "MixinReloadableServerResources", "MixinVillager", "MixinWitch",
"accessor.AccessorLivingEntity", "accessor.AccessorLootTable", "accessor.AccessorRecipeProvider",
"accessor.AccessorTagsProvider", "accessor.AccessorUseOnContext", "accessor.CriteriaTriggersAccessor"
"MixinMob",
"MixinRaider",
"MixinReloadableServerResources",
"MixinVillager",
"MixinWitch",
"accessor.AccessorLivingEntity",
"accessor.AccessorLootTable",
"accessor.AccessorRecipeProvider",
"accessor.AccessorTagsProvider",
"accessor.AccessorUseOnContext",
"accessor.CriteriaTriggersAccessor"
],
"client": [
"client.MixinClientLevel"
]
}