Files
Applied-Energistics-2/src/main/java/appeng/client/render/effects/CraftingFx.java
T
2022-09-17 08:08:02 -03:00

156 lines
6.0 KiB
Java

/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
*
* Applied Energistics 2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Applied Energistics 2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
*/
package appeng.client.render.effects;
import appeng.api.util.AEPartLocation;
import appeng.client.render.textures.ParticleTextures;
import net.minecraft.client.particle.ParticleBreaking;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.entity.Entity;
import net.minecraft.item.Item;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class CraftingFx extends ParticleBreaking {
private final TextureAtlasSprite particleTextureIndex;
private final int startBlkX;
private final int startBlkY;
private final int startBlkZ;
public CraftingFx(final World par1World, final double par2, final double par4, final double par6, final Item par8Item) {
super(par1World, par2, par4, par6, par8Item);
this.particleGravity = 0;
this.particleBlue = 1;
this.particleGreen = 0.9f;
this.particleRed = 1;
this.particleAlpha = 1.3f;
this.particleScale = 1.5f;
this.particleTextureIndex = ParticleTextures.BlockEnergyParticle;
this.particleMaxAge /= 1.2;
this.startBlkX = MathHelper.floor(this.posX);
this.startBlkY = MathHelper.floor(this.posY);
this.startBlkZ = MathHelper.floor(this.posZ);
}
@Override
public int getFXLayer() {
return 1;
}
@Override
public void renderParticle(final BufferBuilder par1Tessellator, final Entity p_180434_2_, final float partialTick, final float x, final float y, final float z, final float rx, final float rz) {
if (partialTick < 0 || partialTick > 1) {
return;
}
final float f6 = this.particleTextureIndex.getMinU();
final float f7 = this.particleTextureIndex.getMaxU();
final float f8 = this.particleTextureIndex.getMinV();
final float f9 = this.particleTextureIndex.getMaxV();
final float scale = 0.1F * this.particleScale;
float offX = (float) (this.prevPosX + (this.posX - this.prevPosX) * partialTick);
float offY = (float) (this.prevPosY + (this.posY - this.prevPosY) * partialTick);
float offZ = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * partialTick);
final int blkX = MathHelper.floor(offX);
final int blkY = MathHelper.floor(offY);
final int blkZ = MathHelper.floor(offZ);
if (blkX == this.startBlkX && blkY == this.startBlkY && blkZ == this.startBlkZ) {
offX -= interpPosX;
offY -= interpPosY;
offZ -= interpPosZ;
int i = this.getBrightnessForRender(partialTick);
int j = i >> 16 & 65535;
int k = i & 65535;
// AELog.info( "" + partialTick );
final float f14 = 1.0F;
par1Tessellator.pos(offX - x * scale - rx * scale, offY - y * scale, offZ - z * scale - rz * scale)
.tex(f7, f9)
.color(this.particleRed * f14, this.particleGreen * f14, this.particleBlue * f14, this.particleAlpha)
.lightmap(j, k)
.endVertex();
par1Tessellator.pos(offX - x * scale + rx * scale, offY + y * scale, offZ - z * scale + rz * scale)
.tex(f7, f8)
.color(this.particleRed * f14, this.particleGreen * f14, this.particleBlue * f14, this.particleAlpha)
.lightmap(j, k)
.endVertex();
par1Tessellator.pos(offX + x * scale + rx * scale, offY + y * scale, offZ + z * scale + rz * scale)
.tex(f6, f8)
.color(this.particleRed * f14, this.particleGreen * f14, this.particleBlue * f14, this.particleAlpha)
.lightmap(j, k)
.endVertex();
par1Tessellator.pos(offX + x * scale - rx * scale, offY - y * scale, offZ + z * scale - rz * scale)
.tex(f6, f9)
.color(this.particleRed * f14, this.particleGreen * f14, this.particleBlue * f14, this.particleAlpha)
.lightmap(j, k)
.endVertex();
}
}
public void fromItem(final AEPartLocation d) {
this.posX += 0.2 * d.xOffset;
this.posY += 0.2 * d.yOffset;
this.posZ += 0.2 * d.zOffset;
this.particleScale *= 0.8f;
}
@Override
public void onUpdate() {
this.prevPosX = this.posX;
this.prevPosY = this.posY;
this.prevPosZ = this.posZ;
if (this.particleAge++ >= this.particleMaxAge) {
this.setExpired();
}
this.motionY -= 0.04D * this.particleGravity;
this.move(this.motionX, this.motionY, this.motionZ);
this.motionX *= 0.9800000190734863D;
this.motionY *= 0.9800000190734863D;
this.motionZ *= 0.9800000190734863D;
this.particleScale *= 0.51f;
this.particleAlpha *= 0.51f;
}
public void setMotionX(float motionX) {
this.motionX = motionX;
}
public void setMotionY(float motionY) {
this.motionY = motionY;
}
public void setMotionZ(float motionZ) {
this.motionZ = motionZ;
}
}