mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-02-24 15:00:48 +00:00
more intuitive mixer recipe setting, particle sys crap
This commit is contained in:
parent
da1b4b24f1
commit
0135b66884
@ -53,6 +53,10 @@ public class FluidTank {
|
|||||||
|
|
||||||
public void setTankType(FluidType type) {
|
public void setTankType(FluidType type) {
|
||||||
|
|
||||||
|
if(type == null) {
|
||||||
|
type = Fluids.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
if(this.type == type)
|
if(this.type == type)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -85,16 +89,16 @@ public class FluidTank {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Called on TE update
|
//Called on TE update
|
||||||
public void updateTank(TileEntity te) {
|
@Deprecated public void updateTank(TileEntity te) {
|
||||||
updateTank(te, 100);
|
updateTank(te, 100);
|
||||||
}
|
}
|
||||||
public void updateTank(TileEntity te, int range) {
|
@Deprecated public void updateTank(TileEntity te, int range) {
|
||||||
updateTank(te.xCoord, te.yCoord, te.zCoord, te.getWorldObj().provider.dimensionId, range);
|
updateTank(te.xCoord, te.yCoord, te.zCoord, te.getWorldObj().provider.dimensionId, range);
|
||||||
}
|
}
|
||||||
public void updateTank(int x, int y, int z, int dim) {
|
@Deprecated public void updateTank(int x, int y, int z, int dim) {
|
||||||
updateTank(x, y, z, dim, 100);
|
updateTank(x, y, z, dim, 100);
|
||||||
}
|
}
|
||||||
public void updateTank(int x, int y, int z, int dim, int range) {
|
@Deprecated public void updateTank(int x, int y, int z, int dim, int range) {
|
||||||
PacketDispatcher.wrapper.sendToAllAround(new TEFluidPacket(x, y, z, fluid, index, type), new TargetPoint(dim, x, y, z, range));
|
PacketDispatcher.wrapper.sendToAllAround(new TEFluidPacket(x, y, z, fluid, index, type), new TargetPoint(dim, x, y, z, range));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import io.netty.buffer.ByteBuf;
|
|||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public class TEFluidPacket implements IMessage {
|
public class TEFluidPacket implements IMessage {
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package com.hbm.particle.psys.engine;
|
|||||||
|
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
import net.minecraft.util.AxisAlignedBB;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -10,7 +11,7 @@ import net.minecraft.world.World;
|
|||||||
* @author hbm
|
* @author hbm
|
||||||
*/
|
*/
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public class PSysFX {
|
public abstract class PSysFX {
|
||||||
|
|
||||||
public World world;
|
public World world;
|
||||||
public double posX;
|
public double posX;
|
||||||
@ -19,14 +20,62 @@ public class PSysFX {
|
|||||||
public double prevPosX;
|
public double prevPosX;
|
||||||
public double prevPosY;
|
public double prevPosY;
|
||||||
public double prevPosZ;
|
public double prevPosZ;
|
||||||
public double motionX;
|
|
||||||
public double motionY;
|
|
||||||
public double motionZ;
|
|
||||||
public static double interpPosX;
|
public static double interpPosX;
|
||||||
public static double interpPosY;
|
public static double interpPosY;
|
||||||
public static double interpPosZ;
|
public static double interpPosZ;
|
||||||
|
public AxisAlignedBB boundingBox;
|
||||||
|
public int particleAge;
|
||||||
|
public int particleMaxAge;
|
||||||
|
public boolean isExpired = false;
|
||||||
|
public boolean shouldExpireWhenUnloaded = true;
|
||||||
|
public boolean isUnloaded = false;
|
||||||
|
|
||||||
public PSysFX() {
|
public PSysFX(World world, double x, double y, double z) {
|
||||||
|
this.world = world;
|
||||||
|
this.posX = x;
|
||||||
|
this.posY = y;
|
||||||
|
this.posZ = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateParticle() {
|
||||||
|
this.prevPosX = posX;
|
||||||
|
this.prevPosY = posY;
|
||||||
|
this.prevPosZ = posZ;
|
||||||
|
this.isUnloaded = !world.getChunkProvider().chunkExists((int) Math.floor(posX) >> 4, (int) Math.floor(posZ) >> 4);
|
||||||
|
|
||||||
|
this.particleAge++;
|
||||||
|
|
||||||
|
if(this.particleAge >= this.particleMaxAge) {
|
||||||
|
this.expire();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.shouldExpireWhenUnloaded && this.isUnloaded) {
|
||||||
|
this.expire();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void renderParticle();
|
||||||
|
|
||||||
|
public AxisAlignedBB getBoundingBox() {
|
||||||
|
return this.boundingBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBoundingBox(AxisAlignedBB bb) {
|
||||||
|
this.boundingBox = bb;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setPosToAABB() {
|
||||||
|
AxisAlignedBB aabb = this.getBoundingBox();
|
||||||
|
this.posX = (aabb.minX + aabb.maxX) / 2.0D;
|
||||||
|
this.posY = aabb.minY;
|
||||||
|
this.posZ = (aabb.minZ + aabb.maxZ) / 2.0D;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void expire() {
|
||||||
|
this.isExpired = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExpireOnUnload(boolean expire) {
|
||||||
|
this.shouldExpireWhenUnloaded = expire;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
87
src/main/java/com/hbm/particle/psys/engine/PSysFXMoving.java
Normal file
87
src/main/java/com/hbm/particle/psys/engine/PSysFXMoving.java
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
package com.hbm.particle.psys.engine;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.hbm.lib.Library;
|
||||||
|
|
||||||
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
import net.minecraft.util.AxisAlignedBB;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public abstract class PSysFXMoving extends PSysFX {
|
||||||
|
|
||||||
|
public double motionX;
|
||||||
|
public double motionY;
|
||||||
|
public double motionZ;
|
||||||
|
boolean noClip = false;
|
||||||
|
/* using the forgedirection's ordinal as an index, this tells us what side of a block the particle has collided with */
|
||||||
|
public boolean collisionData[] = new boolean[6];
|
||||||
|
|
||||||
|
public PSysFXMoving(World world, double x, double y, double z, double mX, double mY, double mZ) {
|
||||||
|
super(world, x, y, z);
|
||||||
|
this.motionX = mX;
|
||||||
|
this.motionY = mY;
|
||||||
|
this.motionZ = mZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getParticleGravity() {
|
||||||
|
return 0.04D;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getParticleDrag() {
|
||||||
|
return 0.98D;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateParticle() {
|
||||||
|
super.updateParticle();
|
||||||
|
|
||||||
|
if(!this.isUnloaded) {
|
||||||
|
this.motionX -= this.getParticleGravity();
|
||||||
|
this.motionX *= this.getParticleDrag();
|
||||||
|
this.motionY *= this.getParticleDrag();
|
||||||
|
this.motionZ *= this.getParticleDrag();
|
||||||
|
|
||||||
|
this.move(motionX, motionY, motionZ);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void move(double x, double y, double z) {
|
||||||
|
|
||||||
|
double x0 = x;
|
||||||
|
double y0 = y;
|
||||||
|
double z0 = z;
|
||||||
|
|
||||||
|
this.collisionData = new boolean[6];
|
||||||
|
|
||||||
|
if(!noClip) {
|
||||||
|
List<AxisAlignedBB> list = this.world.getCollidingBoundingBoxes(null, this.getBoundingBox().expand(x, y, z));
|
||||||
|
|
||||||
|
for(AxisAlignedBB aabb : list) y = aabb.calculateYOffset(this.getBoundingBox(), y);
|
||||||
|
this.setBoundingBox(this.getBoundingBox().offset(0.0D, y, 0.0D));
|
||||||
|
|
||||||
|
for(AxisAlignedBB aabb : list) x = aabb.calculateXOffset(this.getBoundingBox(), x);
|
||||||
|
this.setBoundingBox(this.getBoundingBox().offset(x, 0.0D, 0.0D));
|
||||||
|
|
||||||
|
for(AxisAlignedBB aabb : list) z = aabb.calculateZOffset(this.getBoundingBox(), z);
|
||||||
|
this.setBoundingBox(this.getBoundingBox().offset(0.0D, 0.0D, z));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
this.setBoundingBox(this.getBoundingBox().offset(x, y, z));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setPosToAABB();
|
||||||
|
|
||||||
|
if(x0 != x && x > 0) this.collisionData[Library.NEG_X.ordinal()] = true;
|
||||||
|
if(x0 != x && x < 0) this.collisionData[Library.POS_X.ordinal()] = true;
|
||||||
|
if(y0 != y && y > 0) this.collisionData[Library.NEG_Y.ordinal()] = true;
|
||||||
|
if(y0 != y && y < 0) this.collisionData[Library.POS_Y.ordinal()] = true;
|
||||||
|
if(z0 != z && z > 0) this.collisionData[Library.NEG_Z.ordinal()] = true;
|
||||||
|
if(z0 != z && z < 0) this.collisionData[Library.POS_Z.ordinal()] = true;
|
||||||
|
|
||||||
|
if(x0 != x) this.motionX = 0.0D;
|
||||||
|
if(y0 != y) this.motionY = 0.0D;
|
||||||
|
if(z0 != z) this.motionZ = 0.0D;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -29,17 +29,17 @@ public class ParticleEngine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateParticles() {
|
public void updateParticles() {
|
||||||
|
for(FXLayer layer : layers) layer.updateLayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderParticles(float interp) {
|
public void renderParticles(float interp) {
|
||||||
|
for(FXLayer layer : layers) layer.renderLayer(interp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class FXLayer {
|
public static class FXLayer {
|
||||||
|
|
||||||
protected ResourceLocation batchTexture;
|
protected ResourceLocation batchTexture;
|
||||||
protected List particles;
|
protected List<PSysFX> particles;
|
||||||
|
|
||||||
public FXLayer() { }
|
public FXLayer() { }
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ public class ParticleEngine {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void renderLayer() {
|
protected void renderLayer(float interp) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -145,23 +145,11 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements INB
|
|||||||
|
|
||||||
if(recipe == null) return false;
|
if(recipe == null) return false;
|
||||||
|
|
||||||
if(recipe.input1 != null) {
|
tanks[0].setTankType(recipe.input1.type);
|
||||||
|
tanks[1].setTankType(recipe.input2.type);
|
||||||
|
|
||||||
if(recipe.input1.type != tanks[0].getTankType()) {
|
if(recipe.input1 != null && tanks[0].getFill() < recipe.input1.fill) return false;
|
||||||
tanks[0].setTankType(recipe.input1.type);
|
if(recipe.input2 != null && tanks[1].getFill() < recipe.input2.fill) return false;
|
||||||
}
|
|
||||||
|
|
||||||
if(tanks[0].getFill() < recipe.input1.fill) return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(recipe.input2 != null) {
|
|
||||||
|
|
||||||
if(recipe.input2.type != tanks[1].getTankType()) {
|
|
||||||
tanks[1].setTankType(recipe.input2.type);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(tanks[1].getFill() < recipe.input2.fill) return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* simplest check would usually go first, but fluid checks also do the setup and we want that to happen even without power */
|
/* simplest check would usually go first, but fluid checks also do the setup and we want that to happen even without power */
|
||||||
if(this.power < getConsumption()) return false;
|
if(this.power < getConsumption()) return false;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user