mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
An absolute ton of cleanup.
This commit is contained in:
parent
c25f4c8d60
commit
ec6cd544d2
@ -80,7 +80,7 @@ public class CommandPacketInfo extends CommandBase {
|
||||
if (totalCnt != 0)
|
||||
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "% Remaining to process: " + BobMathUtil.roundDecimal(((double) PacketThreading.threadPool.getQueue().size() / totalCnt) * 100, 2) + "%"));
|
||||
|
||||
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Time spent waiting on thread(s) last tick: " + BobMathUtil.roundDecimal(TimeUnit.NANOSECONDS.convert(PacketThreading.nanoTimeWaited, TimeUnit.MILLISECONDS), 4) + "ms"));
|
||||
sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Time spent waiting on thread(s) last tick: " + BobMathUtil.roundDecimal(TimeUnit.MILLISECONDS.convert(PacketThreading.nanoTimeWaited, TimeUnit.NANOSECONDS), 4) + "ms"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements
|
||||
public Entity tracking;
|
||||
public double velocity;
|
||||
protected int activationTimer;
|
||||
|
||||
|
||||
public static double baseSpeed = 1.5D;
|
||||
|
||||
public EntityMissileAntiBallistic(World world) {
|
||||
@ -60,21 +60,21 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements
|
||||
super.onUpdate();
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
|
||||
if(velocity < 6) velocity += 0.1;
|
||||
|
||||
|
||||
if(activationTimer < 40) {
|
||||
activationTimer++;
|
||||
motionY = baseSpeed;
|
||||
} else {
|
||||
Entity prevTracking = this.tracking;
|
||||
|
||||
|
||||
if(this.tracking == null || this.tracking.isDead) this.targetMissile();
|
||||
|
||||
|
||||
if(prevTracking == null && this.tracking != null) {
|
||||
ExplosionLarge.spawnShock(worldObj, posX, posY, posZ, 24, 3F);
|
||||
}
|
||||
|
||||
|
||||
if(this.tracking != null) {
|
||||
this.aimAtTarget();
|
||||
} else {
|
||||
@ -83,15 +83,20 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements
|
||||
}
|
||||
|
||||
loadNeighboringChunks((int) Math.floor(posX / 16), (int) Math.floor(posZ / 16));
|
||||
|
||||
|
||||
if(this.posY > 2000 && (this.tracking == null || this.tracking.isDead)) this.setDead();
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
Vec3 vec = Vec3.createVectorHelper(motionX, motionY, motionZ).normalize();
|
||||
MainRegistry.proxy.particleControl(posX - vec.xCoord, posY - vec.yCoord, posZ - vec.zCoord, 2);
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setString("type", "ABMContrail");
|
||||
data.setDouble("posX", posX - vec.xCoord);
|
||||
data.setDouble("posY", posY - vec.yCoord);
|
||||
data.setDouble("posZ", posZ - vec.zCoord);
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
|
||||
|
||||
float f2 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
|
||||
this.rotationYaw = (float) (Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
|
||||
for(this.rotationPitch = (float) (Math.atan2(this.motionY, f2) * 180.0D / Math.PI) - 90; this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F);
|
||||
@ -102,33 +107,33 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements
|
||||
|
||||
/** Detects and caches nearby EntityMissileBaseNT */
|
||||
protected void targetMissile() {
|
||||
|
||||
|
||||
Entity closest = null;
|
||||
double dist = 1_000;
|
||||
|
||||
|
||||
for(Entity e : TileEntityMachineRadarNT.matchingEntities) {
|
||||
if(e.dimension != this.dimension) continue;
|
||||
if(!(e instanceof EntityMissileBaseNT)) continue; //can only lock onto missiles
|
||||
if(e instanceof EntityMissileStealth) continue; //cannot lack onto missiles with stealth coating
|
||||
|
||||
|
||||
Vec3 vec = Vec3.createVectorHelper(e.posX - posX, e.posY - posY, e.posZ - posZ);
|
||||
|
||||
|
||||
if(vec.lengthVector() < dist) {
|
||||
closest = e;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.tracking = closest;
|
||||
}
|
||||
|
||||
|
||||
/** Predictive targeting system */
|
||||
protected void aimAtTarget() {
|
||||
|
||||
|
||||
Vec3 delta = Vec3.createVectorHelper(tracking.posX - posX, tracking.posY - posY, tracking.posZ - posZ);
|
||||
double intercept = delta.lengthVector() / (this.baseSpeed * this.velocity);
|
||||
Vec3 predicted = Vec3.createVectorHelper(tracking.posX + (tracking.posX - tracking.lastTickPosX) * intercept, tracking.posY + (tracking.posY - tracking.lastTickPosY) * intercept, tracking.posZ + (tracking.posZ - tracking.lastTickPosZ) * intercept);
|
||||
Vec3 motion = Vec3.createVectorHelper(predicted.xCoord - posX, predicted.yCoord - posY, predicted.zCoord - posZ).normalize();
|
||||
|
||||
|
||||
if(delta.lengthVector() < 10 && activationTimer >= 40) {
|
||||
this.setDead();
|
||||
ExplosionLarge.explode(worldObj, posX, posY, posZ, 15F, true, false, false);
|
||||
@ -168,13 +173,13 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements
|
||||
super.readEntityFromNBT(nbt);
|
||||
this.velocity = nbt.getDouble("veloc");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void writeEntityToNBT(NBTTagCompound nbt) {
|
||||
super.writeEntityToNBT(nbt);
|
||||
nbt.setDouble("veloc", this.velocity);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void init(Ticket ticket) {
|
||||
if(!worldObj.isRemote) {
|
||||
@ -197,7 +202,7 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements
|
||||
|
||||
public void loadNeighboringChunks(int newChunkX, int newChunkZ) {
|
||||
if(!worldObj.isRemote && loaderTicket != null) {
|
||||
|
||||
|
||||
clearChunkLoader();
|
||||
|
||||
loadedChunks.clear();
|
||||
@ -208,13 +213,13 @@ public class EntityMissileAntiBallistic extends EntityThrowableInterp implements
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setDead() {
|
||||
super.setDead();
|
||||
this.clearChunkLoader();
|
||||
}
|
||||
|
||||
|
||||
public void clearChunkLoader() {
|
||||
if(!worldObj.isRemote && loaderTicket != null) {
|
||||
for(ChunkCoordIntPair chunk : loadedChunks) {
|
||||
|
||||
@ -78,7 +78,7 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo
|
||||
ExplosionLarge.spawnShrapnelShower(worldObj, posX, posY, posZ, motionX, motionY, motionZ, 15, 0.075);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
|
||||
@ -87,11 +87,11 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo
|
||||
if(type != null && type.updateCustom != null) {
|
||||
type.updateCustom.accept(this);
|
||||
}
|
||||
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
if(this.hasPropulsion()) this.fuel -= this.consumption;
|
||||
}
|
||||
|
||||
|
||||
super.onUpdate();
|
||||
}
|
||||
|
||||
@ -131,7 +131,7 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo
|
||||
nbt.setInteger("fins", this.dataWatcher.getWatchableObjectInt(11));
|
||||
nbt.setInteger("thruster", this.dataWatcher.getWatchableObjectInt(12));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void spawnContrail() {
|
||||
|
||||
@ -148,7 +148,16 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo
|
||||
case XENON: break;
|
||||
}
|
||||
|
||||
if(!smoke.isEmpty()) for(int i = 0; i < velocity; i++) MainRegistry.proxy.spawnParticle(posX - v.xCoord * i, posY - v.yCoord * i, posZ - v.zCoord * i, smoke, null);
|
||||
if(!smoke.isEmpty()) {
|
||||
for (int i = 0; i < velocity; i++) {
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setDouble("posX", posX - v.xCoord * i);
|
||||
data.setDouble("posY", posY - v.yCoord * i);
|
||||
data.setDouble("posZ", posZ - v.zCoord * i);
|
||||
data.setString("type", smoke);
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -158,7 +167,7 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo
|
||||
|
||||
WarheadType type = (WarheadType) part.attributes[0];
|
||||
float strength = (Float) part.attributes[1];
|
||||
|
||||
|
||||
if(type.impactCustom != null) {
|
||||
type.impactCustom.accept(this);
|
||||
return;
|
||||
@ -244,7 +253,7 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo
|
||||
if(top == PartSize.SIZE_15 && bottom == PartSize.SIZE_15) return "radar.target.custom15";
|
||||
if(top == PartSize.SIZE_15 && bottom == PartSize.SIZE_20) return "radar.target.custom1520";
|
||||
if(top == PartSize.SIZE_20 && bottom == PartSize.SIZE_20) return "radar.target.custom20";
|
||||
|
||||
|
||||
return "radar.target.custom";
|
||||
}
|
||||
|
||||
@ -260,7 +269,7 @@ public class EntityMissileCustom extends EntityMissileBaseNT implements IChunkLo
|
||||
if(top == PartSize.SIZE_15 && bottom == PartSize.SIZE_15) return IRadarDetectableNT.TIER15;
|
||||
if(top == PartSize.SIZE_15 && bottom == PartSize.SIZE_20) return IRadarDetectableNT.TIER15_20;
|
||||
if(top == PartSize.SIZE_20 && bottom == PartSize.SIZE_20) return IRadarDetectableNT.TIER20;
|
||||
|
||||
|
||||
return IRadarDetectableNT.TIER1;
|
||||
}
|
||||
|
||||
|
||||
@ -28,14 +28,14 @@ import net.minecraftforge.common.ForgeChunkManager.Type;
|
||||
public class EntityArtilleryRocket extends EntityThrowableInterp implements IChunkLoader, IRadarDetectable {
|
||||
|
||||
private Ticket loaderTicket;
|
||||
|
||||
|
||||
//TODO: find satisfying solution for when an entity is unloaded and reloaded, possibly a custom entity lookup using persistent UUIDs
|
||||
public Entity targetEntity = null;
|
||||
public Vec3 lastTargetPos;
|
||||
|
||||
|
||||
public IRocketTargetingBehavior targeting;
|
||||
public IRocketSteeringBehavior steering;
|
||||
|
||||
|
||||
public EntityArtilleryRocket(World world) {
|
||||
super(world);
|
||||
this.ignoreFrustumCheck = true;
|
||||
@ -49,18 +49,18 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu
|
||||
init(ForgeChunkManager.requestTicket(MainRegistry.instance, worldObj, Type.ENTITY));
|
||||
this.dataWatcher.addObject(10, new Integer(0));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean isInRangeToRenderDist(double distance) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public EntityArtilleryRocket setType(int type) {
|
||||
this.dataWatcher.updateObject(10, type);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public HIMARSRocket getType() {
|
||||
try {
|
||||
return ItemAmmoHIMARS.itemTypes[this.dataWatcher.getWatchableObjectInt(10)];
|
||||
@ -68,35 +68,35 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu
|
||||
return ItemAmmoHIMARS.itemTypes[0];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public EntityArtilleryRocket setTarget(Entity target) {
|
||||
this.targetEntity = target;
|
||||
setTarget(target.posX, target.posY - target.yOffset + target.height / 2D, target.posZ);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public EntityArtilleryRocket setTarget(double x, double y, double z) {
|
||||
this.lastTargetPos = Vec3.createVectorHelper(x, y, z);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public Vec3 getLastTarget() {
|
||||
return this.lastTargetPos;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
|
||||
|
||||
if(worldObj.isRemote) {
|
||||
this.lastTickPosX = this.posX;
|
||||
this.lastTickPosY = this.posY;
|
||||
this.lastTickPosZ = this.posZ;
|
||||
}
|
||||
|
||||
|
||||
super.onUpdate();
|
||||
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
|
||||
/*if(this.targetEntity == null) {
|
||||
Vec3 delta = Vec3.createVectorHelper(this.lastTargetPos.xCoord - this.posX, this.lastTargetPos.yCoord - this.posY, this.lastTargetPos.zCoord - this.posZ);
|
||||
if(delta.lengthVector() <= 15D) {
|
||||
@ -104,26 +104,35 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu
|
||||
this.steering = null;
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
if(this.targeting != null && this.targetEntity != null) this.targeting.recalculateTargetPosition(this, this.targetEntity);
|
||||
if(this.steering != null) this.steering.adjustCourse(this, 25D, 15D);
|
||||
|
||||
|
||||
loadNeighboringChunks((int)Math.floor(posX / 16D), (int)Math.floor(posZ / 16D));
|
||||
this.getType().onUpdate(this);
|
||||
} else {
|
||||
|
||||
|
||||
Vec3 v = Vec3.createVectorHelper(lastTickPosX - posX, lastTickPosY - posY, lastTickPosZ - posZ);
|
||||
double velocity = v.lengthVector();
|
||||
v = v.normalize();
|
||||
|
||||
|
||||
int offset = 6;
|
||||
if(velocity > 1) for(int i = offset; i < velocity + offset; i++) MainRegistry.proxy.spawnParticle(posX + v.xCoord * i, posY + v.yCoord * i, posZ + v.zCoord * i, "exKerosene", null);
|
||||
if(velocity > 1) {
|
||||
for (int i = offset; i < velocity + offset; i++) {
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setDouble("posX", posX + v.xCoord * i);
|
||||
data.setDouble("posY", posY + v.yCoord * i);
|
||||
data.setDouble("posZ", posZ + v.zCoord * i);
|
||||
data.setString("type", "exKerosene");
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onImpact(MovingObjectPosition mop) {
|
||||
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
this.getType().onImpact(this, mop);
|
||||
}
|
||||
@ -145,7 +154,7 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu
|
||||
|
||||
public void loadNeighboringChunks(int newChunkX, int newChunkZ) {
|
||||
if(!worldObj.isRemote && loaderTicket != null) {
|
||||
|
||||
|
||||
clearChunkLoader();
|
||||
|
||||
loadedChunks.clear();
|
||||
@ -157,12 +166,12 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void killAndClear() {
|
||||
this.setDead();
|
||||
this.clearChunkLoader();
|
||||
}
|
||||
|
||||
|
||||
public void clearChunkLoader() {
|
||||
if(!worldObj.isRemote && loaderTicket != null) {
|
||||
for(ChunkCoordIntPair chunk : loadedChunks) {
|
||||
@ -174,15 +183,15 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu
|
||||
@Override
|
||||
public void writeEntityToNBT(NBTTagCompound nbt) {
|
||||
super.writeEntityToNBT(nbt);
|
||||
|
||||
|
||||
if(this.lastTargetPos == null) {
|
||||
this.lastTargetPos = Vec3.createVectorHelper(posX, posY, posZ);
|
||||
}
|
||||
|
||||
|
||||
nbt.setDouble("targetX", this.lastTargetPos.xCoord);
|
||||
nbt.setDouble("targetY", this.lastTargetPos.yCoord);
|
||||
nbt.setDouble("targetZ", this.lastTargetPos.zCoord);
|
||||
|
||||
|
||||
nbt.setInteger("type", this.dataWatcher.getWatchableObjectInt(10));
|
||||
}
|
||||
|
||||
@ -191,7 +200,7 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu
|
||||
super.readEntityFromNBT(nbt);
|
||||
|
||||
this.lastTargetPos = Vec3.createVectorHelper(nbt.getDouble("targetX"), nbt.getDouble("targetY"), nbt.getDouble("targetZ"));
|
||||
|
||||
|
||||
this.dataWatcher.updateObject(10, nbt.getInteger("type"));
|
||||
}
|
||||
|
||||
@ -209,7 +218,7 @@ public class EntityArtilleryRocket extends EntityThrowableInterp implements IChu
|
||||
public RadarTargetType getTargetType() {
|
||||
return RadarTargetType.ARTILLERY;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int approachNum() {
|
||||
return 0; //
|
||||
|
||||
@ -24,7 +24,7 @@ public class EntityWaterSplash extends EntityThrowable {
|
||||
public EntityWaterSplash(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) {
|
||||
super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
super.onUpdate();
|
||||
@ -35,8 +35,12 @@ public class EntityWaterSplash extends EntityThrowable {
|
||||
this.setDead();
|
||||
}
|
||||
} else {
|
||||
|
||||
MainRegistry.proxy.particleControl(posX, posY, posZ, 0);
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setString("type", "waterSplash");
|
||||
data.setDouble("posX", posX);
|
||||
data.setDouble("posY", posY);
|
||||
data.setDouble("posZ", posZ);
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@ import com.hbm.handler.HbmKeybinds.EnumKeybind;
|
||||
import com.hbm.handler.pollution.PollutionHandler;
|
||||
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
|
||||
import com.hbm.handler.radiation.ChunkRadiationManager;
|
||||
import com.hbm.handler.threading.PacketThreading;
|
||||
import com.hbm.interfaces.IArmorModDash;
|
||||
import com.hbm.items.armor.ArmorFSB;
|
||||
import com.hbm.items.weapon.sedna.factory.ConfettiUtil;
|
||||
@ -81,7 +82,6 @@ public class EntityEffectHandler {
|
||||
if(entity instanceof EntityPlayerMP) {
|
||||
HbmLivingProps props = HbmLivingProps.getData(entity);
|
||||
HbmPlayerProps pprps = HbmPlayerProps.getData((EntityPlayerMP) entity);
|
||||
ByteBuf buf = PooledByteBufAllocator.DEFAULT.buffer();
|
||||
|
||||
if(pprps.shield < pprps.getEffectiveMaxShield() && entity.ticksExisted > pprps.lastDamage + 60) {
|
||||
int tsd = entity.ticksExisted - (pprps.lastDamage + 60);
|
||||
@ -91,10 +91,7 @@ public class EntityEffectHandler {
|
||||
if(pprps.shield > pprps.getEffectiveMaxShield())
|
||||
pprps.shield = pprps.getEffectiveMaxShield();
|
||||
|
||||
props.serialize(buf);
|
||||
pprps.serialize(buf);
|
||||
PacketDispatcher.wrapper.sendTo(new ExtPropPacket(buf), (EntityPlayerMP) entity);
|
||||
buf.release();
|
||||
PacketThreading.createSendToThreadedPacket(new ExtPropPacket(props, pprps), (EntityPlayerMP) entity);
|
||||
}
|
||||
|
||||
if(!entity.worldObj.isRemote) {
|
||||
|
||||
@ -5,12 +5,14 @@ import java.util.Map.Entry;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.config.RadiationConfig;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.packet.toclient.AuxParticlePacket;
|
||||
|
||||
import com.hbm.packet.toclient.AuxParticlePacketNT;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.ChunkCoordIntPair;
|
||||
import net.minecraft.world.World;
|
||||
@ -25,31 +27,31 @@ import net.minecraftforge.event.world.WorldEvent;
|
||||
* @author hbm
|
||||
*/
|
||||
public class ChunkRadiationHandlerSimple extends ChunkRadiationHandler {
|
||||
|
||||
|
||||
private HashMap<World, SimpleRadiationPerWorld> perWorld = new HashMap();
|
||||
private static final float maxRad = 100_000F;
|
||||
|
||||
@Override
|
||||
public float getRadiation(World world, int x, int y, int z) {
|
||||
SimpleRadiationPerWorld radWorld = perWorld.get(world);
|
||||
|
||||
|
||||
if(radWorld != null) {
|
||||
ChunkCoordIntPair coords = new ChunkCoordIntPair(x >> 4, z >> 4);
|
||||
Float rad = radWorld.radiation.get(coords);
|
||||
return rad == null ? 0F : MathHelper.clamp_float(rad, 0, maxRad);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRadiation(World world, int x, int y, int z, float rad) {
|
||||
SimpleRadiationPerWorld radWorld = perWorld.get(world);
|
||||
|
||||
|
||||
if(radWorld != null) {
|
||||
|
||||
|
||||
if(world.blockExists(x, 0, z)) {
|
||||
|
||||
|
||||
ChunkCoordIntPair coords = new ChunkCoordIntPair(x >> 4, z >> 4);
|
||||
radWorld.radiation.put(coords, MathHelper.clamp_float(rad, 0, maxRad));
|
||||
world.getChunkFromBlockCoords(x, z).isModified = true;
|
||||
@ -69,28 +71,28 @@ public class ChunkRadiationHandlerSimple extends ChunkRadiationHandler {
|
||||
|
||||
@Override
|
||||
public void updateSystem() {
|
||||
|
||||
|
||||
for(Entry<World, SimpleRadiationPerWorld> entry : perWorld.entrySet()) {
|
||||
|
||||
|
||||
HashMap<ChunkCoordIntPair, Float> radiation = entry.getValue().radiation;
|
||||
HashMap<ChunkCoordIntPair, Float> buff = new HashMap(radiation);
|
||||
radiation.clear();
|
||||
World world = entry.getKey();
|
||||
|
||||
|
||||
for(Entry<ChunkCoordIntPair, Float> chunk : buff.entrySet()) {
|
||||
|
||||
|
||||
if(chunk.getValue() == 0)
|
||||
continue;
|
||||
|
||||
|
||||
ChunkCoordIntPair coord = chunk.getKey();
|
||||
|
||||
|
||||
for(int i = -1; i <= 1; i++) {
|
||||
for(int j = -1; j<= 1; j++) {
|
||||
|
||||
|
||||
int type = Math.abs(i) + Math.abs(j);
|
||||
float percent = type == 0 ? 0.6F : type == 1 ? 0.075F : 0.025F;
|
||||
ChunkCoordIntPair newCoord = new ChunkCoordIntPair(coord.chunkXPos + i, coord.chunkZPos + j);
|
||||
|
||||
|
||||
if(buff.containsKey(newCoord)) {
|
||||
Float val = radiation.get(newCoord);
|
||||
float rad = val == null ? 0 : val;
|
||||
@ -100,15 +102,20 @@ public class ChunkRadiationHandlerSimple extends ChunkRadiationHandler {
|
||||
} else {
|
||||
radiation.put(newCoord, chunk.getValue() * percent);
|
||||
}
|
||||
|
||||
|
||||
float rad = radiation.get(newCoord);
|
||||
if(rad > RadiationConfig.fogRad && world != null && world.rand.nextInt(RadiationConfig.fogCh) == 0 && world.getChunkProvider().chunkExists(coord.chunkXPos, coord.chunkZPos)) {
|
||||
|
||||
|
||||
int x = coord.chunkXPos * 16 + world.rand.nextInt(16);
|
||||
int z = coord.chunkZPos * 16 + world.rand.nextInt(16);
|
||||
int y = world.getHeightValue(x, z) + world.rand.nextInt(5);
|
||||
|
||||
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacket(x, y, z, 3), new TargetPoint(world.provider.dimensionId, x, y, z, 100));
|
||||
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setString("type", "radFog");
|
||||
data.setDouble("posX", x);
|
||||
data.setDouble("posY", y);
|
||||
data.setDouble("posZ", z);
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -119,7 +126,7 @@ public class ChunkRadiationHandlerSimple extends ChunkRadiationHandler {
|
||||
@Override
|
||||
public void clearSystem(World world) {
|
||||
SimpleRadiationPerWorld radWorld = perWorld.get(world);
|
||||
|
||||
|
||||
if(radWorld != null) {
|
||||
radWorld.radiation.clear();
|
||||
}
|
||||
@ -136,15 +143,15 @@ public class ChunkRadiationHandlerSimple extends ChunkRadiationHandler {
|
||||
if(!event.world.isRemote)
|
||||
perWorld.remove(event.world);
|
||||
}
|
||||
|
||||
|
||||
private static final String NBT_KEY_CHUNK_RADIATION = "hfr_simple_radiation";
|
||||
|
||||
@Override
|
||||
public void receiveChunkLoad(ChunkDataEvent.Load event) {
|
||||
|
||||
|
||||
if(!event.world.isRemote) {
|
||||
SimpleRadiationPerWorld radWorld = perWorld.get(event.world);
|
||||
|
||||
|
||||
if(radWorld != null) {
|
||||
radWorld.radiation.put(event.getChunk().getChunkCoordIntPair(), event.getData().getFloat(NBT_KEY_CHUNK_RADIATION));
|
||||
}
|
||||
@ -153,10 +160,10 @@ public class ChunkRadiationHandlerSimple extends ChunkRadiationHandler {
|
||||
|
||||
@Override
|
||||
public void receiveChunkSave(ChunkDataEvent.Save event) {
|
||||
|
||||
|
||||
if(!event.world.isRemote) {
|
||||
SimpleRadiationPerWorld radWorld = perWorld.get(event.world);
|
||||
|
||||
|
||||
if(radWorld != null) {
|
||||
Float val = radWorld.radiation.get(event.getChunk().getChunkCoordIntPair());
|
||||
float rad = val == null ? 0F : val;
|
||||
@ -167,74 +174,74 @@ public class ChunkRadiationHandlerSimple extends ChunkRadiationHandler {
|
||||
|
||||
@Override
|
||||
public void receiveChunkUnload(ChunkEvent.Unload event) {
|
||||
|
||||
|
||||
if(!event.world.isRemote) {
|
||||
SimpleRadiationPerWorld radWorld = perWorld.get(event.world);
|
||||
|
||||
|
||||
if(radWorld != null) {
|
||||
radWorld.radiation.remove(event.getChunk());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static class SimpleRadiationPerWorld {
|
||||
|
||||
|
||||
public HashMap<ChunkCoordIntPair, Float> radiation = new HashMap();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void handleWorldDestruction() {
|
||||
|
||||
|
||||
int count = 10;
|
||||
int threshold = 10;
|
||||
int chunks = 5;
|
||||
|
||||
|
||||
//for all worlds
|
||||
for(Entry<World, SimpleRadiationPerWorld> per : perWorld.entrySet()) {
|
||||
|
||||
|
||||
World world = per.getKey();
|
||||
SimpleRadiationPerWorld list = per.getValue();
|
||||
|
||||
|
||||
Object[] entries = list.radiation.entrySet().toArray();
|
||||
|
||||
|
||||
if(entries.length == 0)
|
||||
continue;
|
||||
|
||||
|
||||
//chose this many random chunks
|
||||
for(int c = 0; c < chunks; c++) {
|
||||
|
||||
|
||||
Entry<ChunkCoordIntPair, Float> randEnt = (Entry<ChunkCoordIntPair, Float>) entries[world.rand.nextInt(entries.length)];
|
||||
|
||||
|
||||
ChunkCoordIntPair coords = randEnt.getKey();
|
||||
WorldServer serv = (WorldServer) world;
|
||||
ChunkProviderServer provider = (ChunkProviderServer) serv.getChunkProvider();
|
||||
|
||||
|
||||
//choose this many random locations within the chunk
|
||||
for(int i = 0; i < count; i++) {
|
||||
|
||||
|
||||
if(randEnt == null || randEnt.getValue() < threshold)
|
||||
continue;
|
||||
|
||||
|
||||
if(provider.chunkExists(coords.chunkXPos, coords.chunkZPos)) {
|
||||
|
||||
|
||||
for(int a = 0; a < 16; a++) {
|
||||
for(int b = 0; b < 16; b++) {
|
||||
|
||||
|
||||
if(world.rand.nextInt(3) != 0)
|
||||
continue;
|
||||
|
||||
|
||||
int x = coords.getCenterXPos() - 8 + a;
|
||||
int z = coords.getCenterZPosition() - 8 + b;
|
||||
int y = world.getHeightValue(x, z) - world.rand.nextInt(2);
|
||||
|
||||
|
||||
if(world.getBlock(x, y, z) == Blocks.grass) {
|
||||
world.setBlock(x, y, z, ModBlocks.waste_earth);
|
||||
|
||||
|
||||
} else if(world.getBlock(x, y, z) == Blocks.tallgrass) {
|
||||
world.setBlock(x, y, z, Blocks.air);
|
||||
|
||||
|
||||
} else if(world.getBlock(x, y, z).getMaterial() == Material.leaves && !(world.getBlock(x, y, z) == ModBlocks.waste_leaves)) {
|
||||
|
||||
|
||||
if(world.rand.nextInt(7) <= 5) {
|
||||
world.setBlock(x, y, z, ModBlocks.waste_leaves);
|
||||
} else {
|
||||
|
||||
@ -7,6 +7,7 @@ import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.packet.PrecompiledPacket;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -71,7 +72,6 @@ public class PacketThreading {
|
||||
// `message` can be precompiled or not.
|
||||
if(message instanceof PrecompiledPacket)
|
||||
((PrecompiledPacket) message).getPreBuf(); // Gets the precompiled buffer, doing nothing if it already exists.
|
||||
|
||||
totalCnt++;
|
||||
|
||||
Runnable task = () -> {
|
||||
@ -88,6 +88,31 @@ public class PacketThreading {
|
||||
addTask(task);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a packet to the thread pool to be processed in the future. This is only compatible with the `sendTo` dispatch operation.
|
||||
*
|
||||
* @param message Message to process.
|
||||
* @param player PlayerMP to send to.
|
||||
*/
|
||||
public static void createSendToThreadedPacket(IMessage message, EntityPlayerMP player) {
|
||||
if(message instanceof PrecompiledPacket)
|
||||
((PrecompiledPacket) message).getPreBuf();
|
||||
totalCnt++;
|
||||
|
||||
Runnable task = () -> {
|
||||
try {
|
||||
lock.lock();
|
||||
PacketDispatcher.wrapper.sendTo(message, player);
|
||||
if (message instanceof PrecompiledPacket)
|
||||
((PrecompiledPacket) message).getPreBuf().release();
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
};
|
||||
|
||||
addTask(task);
|
||||
}
|
||||
|
||||
private static void addTask(Runnable task) {
|
||||
if(isTriggered())
|
||||
task.run();
|
||||
@ -107,7 +132,7 @@ public class PacketThreading {
|
||||
for (Future<?> future : futureList) {
|
||||
nanoTimeWaited = System.nanoTime() - startTime;
|
||||
future.get(50, TimeUnit.MILLISECONDS); // I HATE EVERYTHING
|
||||
if(TimeUnit.NANOSECONDS.convert(nanoTimeWaited, TimeUnit.MILLISECONDS) > 50) throw new TimeoutException(); // >50ms total time? timeout? yes sir, ooh rah!
|
||||
if(TimeUnit.MILLISECONDS.convert(nanoTimeWaited, TimeUnit.NANOSECONDS) > 50) throw new TimeoutException(); // >50ms total time? timeout? yes sir, ooh rah!
|
||||
}
|
||||
}
|
||||
} catch (ExecutionException ignored) {
|
||||
|
||||
@ -836,80 +836,6 @@ public class ClientProxy extends ServerProxy {
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.missile_custom, new ItemRenderMissile());
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void particleControl(double x, double y, double z, int type) {
|
||||
|
||||
|
||||
World world = Minecraft.getMinecraft().theWorld;
|
||||
TextureManager man = Minecraft.getMinecraft().renderEngine;
|
||||
|
||||
switch(type) {
|
||||
case 0:
|
||||
|
||||
for(int i = 0; i < 10; i++) {
|
||||
EntityCloudFX smoke = new EntityCloudFX(world, x + world.rand.nextGaussian(), y + world.rand.nextGaussian(), z + world.rand.nextGaussian(), 0.0, 0.0, 0.0);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(smoke);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
|
||||
EntityCloudFX smoke = new EntityCloudFX(world, x, y, z, 0.0, 0.1, 0.0);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(smoke);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
|
||||
ParticleRadiationFog fog = new ParticleRadiationFog(man, world, x, y, z);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(fog);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//version 2, now with strings!
|
||||
@Deprecated
|
||||
@Override
|
||||
public void spawnParticle(double x, double y, double z, String type, float args[]) {
|
||||
|
||||
World world = Minecraft.getMinecraft().theWorld;
|
||||
TextureManager man = Minecraft.getMinecraft().renderEngine;
|
||||
|
||||
if("launchsmoke".equals(type) && args.length == 3) {
|
||||
ParticleSmokePlume contrail = new ParticleSmokePlume(man, world, x, y, z);
|
||||
contrail.motionX = args[0];
|
||||
contrail.motionY = args[1];
|
||||
contrail.motionZ = args[2];
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
if("exKerosene".equals(type)) {
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z, 0F, 0F, 0F, 1F);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
if("exSolid".equals(type)) {
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z, 0.3F, 0.2F, 0.05F, 1F);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
if("exHydrogen".equals(type)) {
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z, 0.7F, 0.7F, 0.7F, 1F);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
if("exBalefire".equals(type)) {
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z, 0.2F, 0.7F, 0.2F, 1F);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
if("radSmoke".equals(type)) {
|
||||
ParticleRadiationFog contrail = new ParticleRadiationFog(man, world, x, y, z);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
}
|
||||
|
||||
//mk3, only use this one
|
||||
@Override
|
||||
public void effectNT(NBTTagCompound data) {
|
||||
@ -933,6 +859,64 @@ public class ClientProxy extends ServerProxy {
|
||||
return;
|
||||
}
|
||||
|
||||
// Old MK1 system ported to MK3:
|
||||
|
||||
if("waterSplash".equals(type)) {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
EntityCloudFX smoke = new EntityCloudFX(world, x + world.rand.nextGaussian(), y + world.rand.nextGaussian(), z + world.rand.nextGaussian(), 0.0, 0.0, 0.0);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(smoke);
|
||||
}
|
||||
}
|
||||
|
||||
if("cloudFX2".equals(type)) { // i have genuinely no idea what used this
|
||||
EntityCloudFX smoke = new EntityCloudFX(world, x, y, z, 0.0, 0.1, 0.0);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(smoke);
|
||||
}
|
||||
|
||||
if("ABMContrail".equals(type)) {
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
|
||||
// End MK1 porting.
|
||||
|
||||
// Old MK2 system ported to MK3:
|
||||
|
||||
if("launchSmoke".equals(type)) {
|
||||
ParticleSmokePlume contrail = new ParticleSmokePlume(man, world, x, y, z);
|
||||
contrail.motionX = data.getDouble("moX");
|
||||
contrail.motionY = data.getDouble("moY");
|
||||
contrail.motionZ = data.getDouble("moZ");
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
|
||||
if("exKerosene".equals(type)) {
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z, 0F, 0F, 0F, 1F);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
|
||||
if("exSolid".equals(type)) {
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z, 0.3F, 0.2F, 0.05F, 1F);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
|
||||
if("exHydrogen".equals(type)) {
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z, 0.7F, 0.7F, 0.7F, 1F);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
|
||||
if("exBalefire".equals(type)) {
|
||||
ParticleContrail contrail = new ParticleContrail(man, world, x, y, z, 0.2F, 0.7F, 0.2F, 1F);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
|
||||
if("radFog".equals(type)) {
|
||||
ParticleRadiationFog contrail = new ParticleRadiationFog(man, world, x, y, z);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(contrail);
|
||||
}
|
||||
|
||||
// End MK2 porting.
|
||||
|
||||
if("missileContrail".equals(type)) {
|
||||
|
||||
if(Vec3.createVectorHelper(player.posX - x, player.posY - y, player.posZ - z).lengthVector() > 350) return;
|
||||
|
||||
@ -37,8 +37,6 @@ public class ServerProxy {
|
||||
public void registerGunCfg() { }
|
||||
public void handleNHNEICompat() { }
|
||||
|
||||
public void particleControl(double x, double y, double z, int type) { }
|
||||
|
||||
public void spawnParticle(double x, double y, double z, String type, float[] args) { }
|
||||
|
||||
public void effectNT(NBTTagCompound data) { }
|
||||
|
||||
@ -18,12 +18,8 @@ public class PacketDispatcher {
|
||||
public static void registerPackets() {
|
||||
int i = 0;
|
||||
|
||||
//Sound packet that keeps client and server separated
|
||||
wrapper.registerMessage(LoopedSoundPacket.Handler.class, LoopedSoundPacket.class, i++, Side.CLIENT);
|
||||
//Signals server to consume items and create template
|
||||
wrapper.registerMessage(ItemFolderPacket.Handler.class, ItemFolderPacket.class, i++, Side.SERVER);
|
||||
//Electricity gauge for GUI rendering
|
||||
wrapper.registerMessage(AuxElectricityPacket.Handler.class, AuxElectricityPacket.class, i++, Side.CLIENT);
|
||||
//Siren packet for looped sounds
|
||||
wrapper.registerMessage(TESirenPacket.Handler.class, TESirenPacket.class, i++, Side.CLIENT);
|
||||
//Signals server to change ItemStacks
|
||||
@ -44,8 +40,6 @@ public class PacketDispatcher {
|
||||
wrapper.registerMessage(TEFFPacket.Handler.class, TEFFPacket.class, i++, Side.CLIENT);
|
||||
//Sends button information for ItemGunBase
|
||||
wrapper.registerMessage(GunButtonPacket.Handler.class, GunButtonPacket.class, i++, Side.SERVER);
|
||||
//Packet to send block break particles
|
||||
wrapper.registerMessage(AuxParticlePacket.Handler.class, AuxParticlePacket.class, i++, Side.CLIENT);
|
||||
//Signals server to buy offer from bobmazon
|
||||
wrapper.registerMessage(ItemBobmazonPacket.Handler.class, ItemBobmazonPacket.class, i++, Side.SERVER);
|
||||
//Packet to send missile multipart information to TEs
|
||||
@ -76,12 +70,8 @@ public class PacketDispatcher {
|
||||
wrapper.registerMessage(PermaSyncPacket.Handler.class, PermaSyncPacket.class, i++, Side.CLIENT);
|
||||
//Syncs biome information for single positions or entire chunks
|
||||
wrapper.registerMessage(BiomeSyncPacket.Handler.class, BiomeSyncPacket.class, i++, Side.CLIENT);
|
||||
|
||||
//Tile sync
|
||||
wrapper.registerMessage(AuxGaugePacket.Handler.class, AuxGaugePacket.class, i++, Side.CLIENT); //The horrid one
|
||||
// fucking DIE
|
||||
//wrapper.registerMessage(NBTPacket.Handler.class, NBTPacket.class, i++, Side.CLIENT); //The convenient but laggy one
|
||||
wrapper.registerMessage(BufPacket.Handler.class, BufPacket.class, i++, Side.CLIENT); //The not-so-convenient but not laggy one
|
||||
//The not-so-convenient but not laggy one
|
||||
wrapper.registerMessage(BufPacket.Handler.class, BufPacket.class, i++, Side.CLIENT);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,67 +0,0 @@
|
||||
package com.hbm.packet.toclient;
|
||||
|
||||
import api.hbm.energymk2.IEnergyHandlerMK2;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
@Deprecated //use the NBT packet instead
|
||||
public class AuxElectricityPacket implements IMessage {
|
||||
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
long charge;
|
||||
|
||||
public AuxElectricityPacket()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public AuxElectricityPacket(int x, int y, int z, long charge)
|
||||
{
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.charge = charge;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
x = buf.readInt();
|
||||
y = buf.readInt();
|
||||
z = buf.readInt();
|
||||
charge = buf.readLong();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
buf.writeInt(x);
|
||||
buf.writeInt(y);
|
||||
buf.writeInt(z);
|
||||
buf.writeLong(charge);
|
||||
}
|
||||
|
||||
public static class Handler implements IMessageHandler<AuxElectricityPacket, IMessage> {
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IMessage onMessage(AuxElectricityPacket m, MessageContext ctx) {
|
||||
try {
|
||||
TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z);
|
||||
|
||||
if (te instanceof IEnergyHandlerMK2) {
|
||||
|
||||
IEnergyHandlerMK2 gen = (IEnergyHandlerMK2) te;
|
||||
gen.setPower(m.charge);
|
||||
}
|
||||
} catch (Exception x) { }
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,96 +0,0 @@
|
||||
package com.hbm.packet.toclient;
|
||||
|
||||
import com.hbm.interfaces.Spaghetti;
|
||||
import com.hbm.items.weapon.ItemCustomMissilePart.PartSize;
|
||||
import com.hbm.tileentity.TileEntityMachineBase;
|
||||
import com.hbm.tileentity.bomb.TileEntityCompactLauncher;
|
||||
import com.hbm.tileentity.bomb.TileEntityLaunchTable;
|
||||
import com.hbm.tileentity.machine.TileEntityMachineArcFurnace;
|
||||
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
@Spaghetti("Changing all machines to use TileEntityMachineBase will reduce the total chaos in this class")
|
||||
@Deprecated //use the NBT packet instead
|
||||
public class AuxGaugePacket implements IMessage {
|
||||
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
int value;
|
||||
int id;
|
||||
|
||||
public AuxGaugePacket()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public AuxGaugePacket(int x, int y, int z, int value, int id)
|
||||
{
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.value = value;
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
x = buf.readInt();
|
||||
y = buf.readInt();
|
||||
z = buf.readInt();
|
||||
value = buf.readInt();
|
||||
id = buf.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
buf.writeInt(x);
|
||||
buf.writeInt(y);
|
||||
buf.writeInt(z);
|
||||
buf.writeInt(value);
|
||||
buf.writeInt(id);
|
||||
}
|
||||
|
||||
public static class Handler implements IMessageHandler<AuxGaugePacket, IMessage> {
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IMessage onMessage(AuxGaugePacket m, MessageContext ctx) {
|
||||
try {
|
||||
TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z);
|
||||
if (te instanceof TileEntityMachineArcFurnace) {
|
||||
TileEntityMachineArcFurnace furn = (TileEntityMachineArcFurnace)te;
|
||||
|
||||
if(m.id == 0)
|
||||
furn.dualCookTime = m.value;
|
||||
}
|
||||
if (te instanceof TileEntityCompactLauncher) {
|
||||
TileEntityCompactLauncher launcher = (TileEntityCompactLauncher)te;
|
||||
|
||||
launcher.solid = m.value;
|
||||
}
|
||||
if (te instanceof TileEntityLaunchTable) {
|
||||
TileEntityLaunchTable launcher = (TileEntityLaunchTable)te;
|
||||
|
||||
if(m.id == 0)
|
||||
launcher.solid = m.value;
|
||||
if(m.id == 1)
|
||||
launcher.padSize = PartSize.values()[m.value];
|
||||
}
|
||||
|
||||
if(te instanceof TileEntityMachineBase) {
|
||||
((TileEntityMachineBase)te).processGauge(m.value, m.id);
|
||||
}
|
||||
|
||||
} catch (Exception x) {}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,60 +0,0 @@
|
||||
package com.hbm.packet.toclient;
|
||||
|
||||
import com.hbm.main.MainRegistry;
|
||||
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
public class AuxParticlePacket implements IMessage {
|
||||
|
||||
double x;
|
||||
double y;
|
||||
double z;
|
||||
int type;
|
||||
|
||||
public AuxParticlePacket()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public AuxParticlePacket(double x, double y, double z, int type)
|
||||
{
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
x = buf.readDouble();
|
||||
y = buf.readDouble();
|
||||
z = buf.readDouble();
|
||||
type = buf.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
buf.writeDouble(x);
|
||||
buf.writeDouble(y);
|
||||
buf.writeDouble(z);
|
||||
buf.writeInt(type);
|
||||
}
|
||||
|
||||
public static class Handler implements IMessageHandler<AuxParticlePacket, IMessage> {
|
||||
|
||||
@Override
|
||||
public IMessage onMessage(AuxParticlePacket m, MessageContext ctx) {
|
||||
|
||||
try {
|
||||
|
||||
MainRegistry.proxy.particleControl(m.x, m.y, m.z, m.type);
|
||||
|
||||
} catch(Exception x) { }
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3,44 +3,37 @@ package com.hbm.packet.toclient;
|
||||
import com.hbm.extprop.HbmLivingProps;
|
||||
import com.hbm.extprop.HbmPlayerProps;
|
||||
|
||||
import com.hbm.packet.PrecompiledPacket;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
|
||||
public class ExtPropPacket implements IMessage {
|
||||
public class ExtPropPacket extends PrecompiledPacket {
|
||||
|
||||
ByteBuf buffer;
|
||||
HbmLivingProps props;
|
||||
HbmPlayerProps pprps;
|
||||
ByteBuf buf;
|
||||
|
||||
public ExtPropPacket() { }
|
||||
|
||||
public ExtPropPacket(ByteBuf buf) {
|
||||
|
||||
this.buffer = Unpooled.buffer();
|
||||
buffer.writeBytes(buf);
|
||||
public ExtPropPacket(HbmLivingProps props, HbmPlayerProps pprps) {
|
||||
this.props = props;
|
||||
this.pprps = pprps;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
|
||||
if (buffer == null) {
|
||||
buffer = new PacketBuffer(Unpooled.buffer());
|
||||
}
|
||||
buffer.writeBytes(buf);
|
||||
this.buf = buf;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
|
||||
if (buffer == null) {
|
||||
buffer = new PacketBuffer(Unpooled.buffer());
|
||||
}
|
||||
buf.writeBytes(buffer);
|
||||
props.serialize(buf);
|
||||
pprps.serialize(buf);
|
||||
}
|
||||
|
||||
public static class Handler implements IMessageHandler<ExtPropPacket, IMessage> {
|
||||
@ -55,10 +48,10 @@ public class ExtPropPacket implements IMessage {
|
||||
HbmLivingProps props = HbmLivingProps.getData(Minecraft.getMinecraft().thePlayer);
|
||||
HbmPlayerProps pprps = HbmPlayerProps.getData(Minecraft.getMinecraft().thePlayer);
|
||||
|
||||
props.deserialize(m.buffer);
|
||||
pprps.deserialize(m.buffer);
|
||||
props.deserialize(m.buf);
|
||||
pprps.deserialize(m.buf);
|
||||
|
||||
m.buffer.release();
|
||||
m.buf.release();
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -1,122 +0,0 @@
|
||||
package com.hbm.packet.toclient;
|
||||
|
||||
import com.hbm.interfaces.Spaghetti;
|
||||
import com.hbm.sound.*;
|
||||
import com.hbm.tileentity.machine.*;
|
||||
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
@Spaghetti("this class should be destroyed")
|
||||
public class LoopedSoundPacket implements IMessage {
|
||||
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
|
||||
public LoopedSoundPacket()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public LoopedSoundPacket(int x, int y, int z)
|
||||
{
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
x = buf.readInt();
|
||||
y = buf.readInt();
|
||||
z = buf.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
buf.writeInt(x);
|
||||
buf.writeInt(y);
|
||||
buf.writeInt(z);
|
||||
}
|
||||
|
||||
public static class Handler implements IMessageHandler<LoopedSoundPacket, IMessage> {
|
||||
|
||||
@Override
|
||||
//Tamaized, I love you!
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IMessage onMessage(LoopedSoundPacket m, MessageContext ctx) {
|
||||
TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z);
|
||||
|
||||
if (te != null && te instanceof TileEntityMachineAssembler) {
|
||||
|
||||
boolean flag = true;
|
||||
for(int i = 0; i < SoundLoopAssembler.list.size(); i++) {
|
||||
if(SoundLoopAssembler.list.get(i).getTE() == te && !SoundLoopAssembler.list.get(i).isDonePlaying())
|
||||
flag = false;
|
||||
}
|
||||
|
||||
if(flag && te.getWorldObj().isRemote && ((TileEntityMachineAssembler)te).isProgressing)
|
||||
Minecraft.getMinecraft().getSoundHandler().playSound(new SoundLoopAssembler(new ResourceLocation("hbm:block.assemblerOperate"), te));
|
||||
}
|
||||
|
||||
if (te != null && te instanceof TileEntityMachineTurbofan) {
|
||||
|
||||
boolean flag = true;
|
||||
for(int i = 0; i < SoundLoopTurbofan.list.size(); i++) {
|
||||
if(SoundLoopTurbofan.list.get(i).getTE() == te && !SoundLoopTurbofan.list.get(i).isDonePlaying())
|
||||
flag = false;
|
||||
}
|
||||
|
||||
if(flag && te.getWorldObj().isRemote && ((TileEntityMachineTurbofan)te).wasOn)
|
||||
Minecraft.getMinecraft().getSoundHandler().playSound(new SoundLoopTurbofan(new ResourceLocation("hbm:block.turbofanOperate"), te));
|
||||
}
|
||||
|
||||
if (te != null && te instanceof TileEntityBroadcaster) {
|
||||
|
||||
boolean flag = true;
|
||||
for(int i = 0; i < SoundLoopBroadcaster.list.size(); i++) {
|
||||
if(SoundLoopBroadcaster.list.get(i).getTE() == te && !SoundLoopBroadcaster.list.get(i).isDonePlaying())
|
||||
flag = false;
|
||||
}
|
||||
|
||||
int j = te.xCoord + te.zCoord + te.yCoord;
|
||||
|
||||
if(flag && te.getWorldObj().isRemote)
|
||||
Minecraft.getMinecraft().getSoundHandler().playSound(new SoundLoopBroadcaster(new ResourceLocation("hbm:block.broadcast" + (Math.abs(j) % 3 + 1)), te));
|
||||
}
|
||||
|
||||
if (te != null && te instanceof TileEntityMachineCentrifuge) {
|
||||
|
||||
boolean flag = true;
|
||||
for(int i = 0; i < SoundLoopCentrifuge.list.size(); i++) {
|
||||
if(SoundLoopCentrifuge.list.get(i).getTE() == te && !SoundLoopCentrifuge.list.get(i).isDonePlaying())
|
||||
flag = false;
|
||||
}
|
||||
|
||||
if(flag && te.getWorldObj().isRemote && ((TileEntityMachineCentrifuge)te).isProgressing)
|
||||
Minecraft.getMinecraft().getSoundHandler().playSound(new SoundLoopCentrifuge(new ResourceLocation("hbm:block.centrifugeOperate"), te));
|
||||
}
|
||||
|
||||
if (te != null && te instanceof TileEntityMachineGasCent) {
|
||||
|
||||
boolean flag = true;
|
||||
for(int i = 0; i < SoundLoopCentrifuge.list.size(); i++) {
|
||||
if(SoundLoopCentrifuge.list.get(i).getTE() == te && !SoundLoopCentrifuge.list.get(i).isDonePlaying())
|
||||
flag = false;
|
||||
}
|
||||
|
||||
if(flag && te.getWorldObj().isRemote && ((TileEntityMachineGasCent)te).isProgressing)
|
||||
Minecraft.getMinecraft().getSoundHandler().playSound(new SoundLoopCentrifuge(new ResourceLocation("hbm:block.centrifugeOperate"), te));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
package com.hbm.sound;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.tileentity.machine.TileEntityMachineAssembler;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class SoundLoopAssembler extends SoundLoopMachine {
|
||||
|
||||
public static List<SoundLoopAssembler> list = new ArrayList<SoundLoopAssembler>();
|
||||
|
||||
public SoundLoopAssembler(ResourceLocation path, TileEntity te) {
|
||||
super(path, te);
|
||||
list.add(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
super.update();
|
||||
|
||||
if(te instanceof TileEntityMachineAssembler) {
|
||||
TileEntityMachineAssembler drill = (TileEntityMachineAssembler)te;
|
||||
|
||||
if(this.volume != 3)
|
||||
volume = 3;
|
||||
|
||||
if(!drill.isProgressing)
|
||||
this.donePlaying = true;
|
||||
}
|
||||
}
|
||||
|
||||
public TileEntity getTE() {
|
||||
return te;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,52 +0,0 @@
|
||||
package com.hbm.sound;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.tileentity.machine.TileEntityBroadcaster;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.audio.ISound;
|
||||
import net.minecraft.client.entity.EntityClientPlayerMP;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class SoundLoopBroadcaster extends SoundLoopMachine {
|
||||
|
||||
public static List<SoundLoopBroadcaster> list = new ArrayList<SoundLoopBroadcaster>();
|
||||
public float intendedVolume = 25.0F;
|
||||
|
||||
public SoundLoopBroadcaster(ResourceLocation path, TileEntity te) {
|
||||
super(path, te);
|
||||
list.add(this);
|
||||
this.field_147666_i = ISound.AttenuationType.NONE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
super.update();
|
||||
|
||||
EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
|
||||
float f = 0;
|
||||
|
||||
if(player != null) {
|
||||
f = (float)Math.sqrt(Math.pow(xPosF - player.posX, 2) + Math.pow(yPosF - player.posY, 2) + Math.pow(zPosF - player.posZ, 2));
|
||||
volume = func(f, intendedVolume);
|
||||
|
||||
if(!(player.worldObj.getTileEntity((int)xPosF, (int)yPosF, (int)zPosF) instanceof TileEntityBroadcaster)) {
|
||||
this.donePlaying = true;
|
||||
volume = 0;
|
||||
}
|
||||
} else {
|
||||
volume = intendedVolume;
|
||||
}
|
||||
}
|
||||
|
||||
public TileEntity getTE() {
|
||||
return te;
|
||||
}
|
||||
|
||||
public float func(float f, float v) {
|
||||
return (f / v) * -2 + 2;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,54 +0,0 @@
|
||||
package com.hbm.sound;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.tileentity.machine.TileEntityMachineCentrifuge;
|
||||
import com.hbm.tileentity.machine.TileEntityMachineGasCent;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class SoundLoopCentrifuge extends SoundLoopMachine {
|
||||
|
||||
public static List<SoundLoopCentrifuge> list = new ArrayList<SoundLoopCentrifuge>();
|
||||
|
||||
public SoundLoopCentrifuge(ResourceLocation path, TileEntity te) {
|
||||
super(path, te);
|
||||
list.add(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
super.update();
|
||||
|
||||
if(te instanceof TileEntityMachineCentrifuge) {
|
||||
TileEntityMachineCentrifuge plant = (TileEntityMachineCentrifuge)te;
|
||||
|
||||
if(this.volume != 1)
|
||||
volume = 1;
|
||||
|
||||
if(!plant.isProgressing)
|
||||
this.donePlaying = true;
|
||||
}
|
||||
|
||||
if(te instanceof TileEntityMachineGasCent) {
|
||||
TileEntityMachineGasCent plant = (TileEntityMachineGasCent)te;
|
||||
|
||||
if(this.volume != 1)
|
||||
volume = 1;
|
||||
|
||||
if(!plant.isProgressing)
|
||||
this.donePlaying = true;
|
||||
}
|
||||
|
||||
if(!Minecraft.getMinecraft().getSoundHandler().isSoundPlaying(this)) {
|
||||
stop();
|
||||
}
|
||||
}
|
||||
|
||||
public TileEntity getTE() {
|
||||
return te;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,39 +0,0 @@
|
||||
package com.hbm.sound;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.tileentity.machine.TileEntityMachineTurbofan;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class SoundLoopTurbofan extends SoundLoopMachine {
|
||||
|
||||
public static List<SoundLoopTurbofan> list = new ArrayList<SoundLoopTurbofan>();
|
||||
|
||||
public SoundLoopTurbofan(ResourceLocation path, TileEntity te) {
|
||||
super(path, te);
|
||||
list.add(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
super.update();
|
||||
|
||||
if(te instanceof TileEntityMachineTurbofan) {
|
||||
TileEntityMachineTurbofan drill = (TileEntityMachineTurbofan)te;
|
||||
|
||||
if(this.volume != 10)
|
||||
volume = 10;
|
||||
|
||||
if(!drill.wasOn)
|
||||
this.donePlaying = true;
|
||||
}
|
||||
}
|
||||
|
||||
public TileEntity getTE() {
|
||||
return te;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,10 +1,7 @@
|
||||
package com.hbm.tileentity;
|
||||
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.packet.toclient.AuxGaugePacket;
|
||||
import com.hbm.util.fauxpointtwelve.DirPos;
|
||||
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
@ -147,11 +144,6 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme
|
||||
@Override
|
||||
public abstract void updateEntity();
|
||||
|
||||
@Deprecated public void updateGauge(int val, int id, int range) {
|
||||
if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new AuxGaugePacket(xCoord, yCoord, zCoord, val, id), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range));
|
||||
}
|
||||
@Deprecated public void processGauge(int val, int id) { }
|
||||
|
||||
@Deprecated
|
||||
public void handleButtonPacket(int value, int meta) { }
|
||||
|
||||
|
||||
@ -220,7 +220,15 @@ public class TileEntityCompactLauncher extends TileEntityLoadedBase implements I
|
||||
float moX = (float) (dir ? 0 : worldObj.rand.nextGaussian() * 0.5F);
|
||||
float moZ = (float) (!dir ? 0 : worldObj.rand.nextGaussian() * 0.5F);
|
||||
|
||||
MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "launchsmoke", new float[] {moX, 0, moZ});
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setDouble("posX", xCoord + 0.5);
|
||||
data.setDouble("posY", yCoord + 0.25);
|
||||
data.setDouble("posZ", zCoord + 0.5);
|
||||
data.setString("type", "launchSmoke");
|
||||
data.setDouble("moX", moX);
|
||||
data.setDouble("moY", 0);
|
||||
data.setDouble("moZ", moZ);
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
@ -18,16 +18,16 @@ public class TileEntityLaunchPad extends TileEntityLaunchPadBase {
|
||||
|
||||
@Override public boolean isReadyForLaunch() { return delay <= 0; }
|
||||
@Override public double getLaunchOffset() { return 1D; }
|
||||
|
||||
|
||||
public int delay = 0;
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
|
||||
if(this.delay > 0) delay--;
|
||||
|
||||
|
||||
if(!this.isMissileValid() || !this.hasFuel()) {
|
||||
this.delay = 100;
|
||||
}
|
||||
@ -41,11 +41,11 @@ public class TileEntityLaunchPad extends TileEntityLaunchPadBase {
|
||||
this.state = this.STATE_READY;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
List<EntityMissileBaseNT> entities = worldObj.getEntitiesWithinAABB(EntityMissileBaseNT.class, AxisAlignedBB.getBoundingBox(xCoord - 0.5, yCoord, zCoord - 0.5, xCoord + 1.5, yCoord + 10, zCoord + 1.5));
|
||||
|
||||
|
||||
if(!entities.isEmpty()) {
|
||||
for(int i = 0; i < 15; i++) {
|
||||
|
||||
@ -54,12 +54,20 @@ public class TileEntityLaunchPad extends TileEntityLaunchPadBase {
|
||||
if(worldObj.rand.nextBoolean()) dir = dir.getRotation(ForgeDirection.UP);
|
||||
float moX = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetX;
|
||||
float moZ = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetZ;
|
||||
|
||||
MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "launchsmoke", new float[] {moX, 0, moZ});
|
||||
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setDouble("posX", xCoord + 0.5);
|
||||
data.setDouble("posY", yCoord + 0.25);
|
||||
data.setDouble("posZ", zCoord + 0.5);
|
||||
data.setString("type", "launchSmoke");
|
||||
data.setDouble("moX", moX);
|
||||
data.setDouble("moY", 0);
|
||||
data.setDouble("moZ", moZ);
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
super.updateEntity();
|
||||
}
|
||||
|
||||
@ -68,7 +76,7 @@ public class TileEntityLaunchPad extends TileEntityLaunchPadBase {
|
||||
super.finalizeLaunch(missile);
|
||||
this.delay = 100;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public DirPos[] getConPos() {
|
||||
return new DirPos[] {
|
||||
@ -82,24 +90,24 @@ public class TileEntityLaunchPad extends TileEntityLaunchPadBase {
|
||||
new DirPos(xCoord + 1, yCoord, zCoord - 2, Library.NEG_Z)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
this.delay = nbt.getInteger("delay");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
nbt.setInteger("delay", delay);
|
||||
}
|
||||
|
||||
|
||||
AxisAlignedBB bb = null;
|
||||
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getRenderBoundingBox() {
|
||||
|
||||
|
||||
if(bb == null) {
|
||||
bb = AxisAlignedBB.getBoundingBox(
|
||||
xCoord - 2,
|
||||
@ -110,10 +118,10 @@ public class TileEntityLaunchPad extends TileEntityLaunchPadBase {
|
||||
zCoord + 3
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
return bb;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public double getMaxRenderDistanceSquared() {
|
||||
|
||||
@ -37,10 +37,10 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
private int sync;
|
||||
/** Delay between erector movements */
|
||||
public int delay = 20;
|
||||
|
||||
|
||||
private AudioWrapper audioLift;
|
||||
private AudioWrapper audioErector;
|
||||
|
||||
|
||||
protected boolean liftMoving = false;
|
||||
protected boolean erectorMoving = false;
|
||||
|
||||
@ -49,26 +49,26 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
this.prevLift = this.lift;
|
||||
this.prevErector = this.erector;
|
||||
|
||||
|
||||
float erectorSpeed = 1.5F;
|
||||
float liftSpeed = 0.025F;
|
||||
|
||||
|
||||
if(this.isMissileValid()) {
|
||||
if(slots[0].getItem() instanceof ItemMissile) {
|
||||
ItemMissile missile = (ItemMissile) slots[0].getItem();
|
||||
this.formFactor = missile.formFactor.ordinal();
|
||||
|
||||
|
||||
if(missile.formFactor == MissileFormFactor.ATLAS || missile.formFactor == MissileFormFactor.HUGE) {
|
||||
erectorSpeed /= 2F;
|
||||
liftSpeed /= 2F;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(this.erector == 90F && this.lift == 1F) {
|
||||
this.readyToLoad = true;
|
||||
}
|
||||
@ -77,16 +77,16 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
erected = false;
|
||||
delay = 20;
|
||||
}
|
||||
|
||||
|
||||
if(this.power >= 75_000) {
|
||||
if(delay > 0) {
|
||||
delay--;
|
||||
|
||||
|
||||
if(delay < 10 && scheduleErect) {
|
||||
this.erected = true;
|
||||
this.scheduleErect = false;
|
||||
}
|
||||
|
||||
|
||||
// if there is no missile or the missile isn't ready (i.e. the erector hasn't returned to zero position yet), retract
|
||||
if(slots[0] == null || !readyToLoad) {
|
||||
//fold back erector
|
||||
@ -103,13 +103,13 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
//only extend if the erector isn't up yet and the missile can be loaded
|
||||
if(!erected && readyToLoad) {
|
||||
this.state = this.STATE_LOADING;
|
||||
|
||||
|
||||
//first, rotate the erector
|
||||
if(erector != 0F) {
|
||||
erector = Math.max(erector - erectorSpeed, 0F);
|
||||
@ -140,7 +140,7 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!this.hasFuel() || !this.isMissileValid()) this.state = this.STATE_MISSING;
|
||||
if(this.erected && this.canLaunch()) this.state = this.STATE_READY;
|
||||
|
||||
@ -153,11 +153,11 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
|
||||
if(prevLiftMoving && !this.liftMoving) worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:door.wgh_stop", 2F, 1F);
|
||||
if(prevErectorMoving && !this.erectorMoving) worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:door.garage_stop", 2F, 1F);
|
||||
|
||||
|
||||
} else {
|
||||
this.prevLift = this.lift;
|
||||
this.prevErector = this.erector;
|
||||
|
||||
|
||||
if(this.sync > 0) {
|
||||
this.lift = this.lift + ((this.syncLift - this.lift) / (float) this.sync);
|
||||
this.erector = this.erector + ((this.syncErector - this.erector) / (float) this.sync);
|
||||
@ -166,7 +166,7 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
this.lift = this.syncLift;
|
||||
this.erector = this.syncErector;
|
||||
}
|
||||
|
||||
|
||||
if(this.liftMoving) {
|
||||
if(this.audioLift == null || !this.audioLift.isPlaying()) {
|
||||
this.audioLift = MainRegistry.proxy.getLoopedSound("hbm:door.wgh_start", xCoord, yCoord, zCoord, 0.75F, 25F, 1.0F, 5);
|
||||
@ -179,7 +179,7 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
this.audioLift = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(this.erectorMoving) {
|
||||
if(this.audioErector == null || !this.audioErector.isPlaying()) {
|
||||
this.audioErector = MainRegistry.proxy.getLoopedSound("hbm:door.garage_move", xCoord, yCoord, zCoord, 1.5F, 25F, 1.0F, 5);
|
||||
@ -192,7 +192,7 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
this.audioErector = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(this.erected && (this.formFactor == MissileFormFactor.HUGE.ordinal() || this.formFactor == MissileFormFactor.ATLAS.ordinal()) && this.tanks[1].getFill() > 0) {
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setString("type", "tower");
|
||||
@ -208,9 +208,9 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
data.setFloat("strafe", 0.05F);
|
||||
for(int i = 0; i < 3; i++) MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
|
||||
|
||||
List<EntityMissileBaseNT> entities = worldObj.getEntitiesWithinAABB(EntityMissileBaseNT.class, AxisAlignedBB.getBoundingBox(xCoord - 0.5, yCoord, zCoord - 0.5, xCoord + 1.5, yCoord + 10, zCoord + 1.5));
|
||||
|
||||
|
||||
if(!entities.isEmpty()) {
|
||||
for(int i = 0; i < 15; i++) {
|
||||
|
||||
@ -218,19 +218,27 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
if(worldObj.rand.nextBoolean()) dir = dir.getOpposite();
|
||||
float moX = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetX;
|
||||
float moZ = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetZ;
|
||||
|
||||
MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "launchsmoke", new float[] {moX, 0, moZ});
|
||||
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setDouble("posX", xCoord + 0.5);
|
||||
data.setDouble("posY", yCoord + 0.25);
|
||||
data.setDouble("posZ", zCoord + 0.5);
|
||||
data.setString("type", "launchSmoke");
|
||||
data.setDouble("moX", moX);
|
||||
data.setDouble("moY", 0);
|
||||
data.setDouble("moZ", moZ);
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
super.updateEntity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serialize(ByteBuf buf) {
|
||||
super.serialize(buf);
|
||||
|
||||
|
||||
buf.writeBoolean(this.liftMoving);
|
||||
buf.writeBoolean(this.erectorMoving);
|
||||
buf.writeBoolean(this.erected);
|
||||
@ -239,7 +247,7 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
buf.writeFloat(this.lift);
|
||||
buf.writeFloat(this.erector);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void deserialize(ByteBuf buf) {
|
||||
super.deserialize(buf);
|
||||
@ -251,12 +259,12 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
this.formFactor = buf.readByte();
|
||||
this.syncLift = buf.readFloat();
|
||||
this.syncErector = buf.readFloat();
|
||||
|
||||
|
||||
if(this.lift != this.syncLift || this.erector != this.syncErector) {
|
||||
this.sync = 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
@ -267,7 +275,7 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
this.erector = nbt.getFloat("erector");
|
||||
this.formFactor = nbt.getInteger("formFactor");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
@ -284,7 +292,7 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
super.finalizeLaunch(missile);
|
||||
this.erected = false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public DirPos[] getConPos() {
|
||||
return new DirPos[] {
|
||||
@ -298,12 +306,12 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
new DirPos(xCoord + 2, yCoord, zCoord - 5, Library.NEG_Z)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
AxisAlignedBB bb = null;
|
||||
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getRenderBoundingBox() {
|
||||
|
||||
|
||||
if(bb == null) {
|
||||
bb = AxisAlignedBB.getBoundingBox(
|
||||
xCoord - 10,
|
||||
@ -314,10 +322,10 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase {
|
||||
zCoord + 11
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
return bb;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public double getMaxRenderDistanceSquared() {
|
||||
|
||||
@ -35,9 +35,9 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
|
||||
public int prevRedstonePower;
|
||||
public int redstonePower;
|
||||
public Set<BlockPos> activatedBlocks = new HashSet<>(4);
|
||||
|
||||
|
||||
public boolean missileLoaded;
|
||||
|
||||
|
||||
public TileEntityLaunchPadRusted() {
|
||||
super(4);
|
||||
}
|
||||
@ -49,19 +49,19 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
|
||||
if(this.redstonePower > 0 && this.prevRedstonePower <= 0) {
|
||||
this.launch();
|
||||
}
|
||||
|
||||
|
||||
this.prevRedstonePower = this.redstonePower;
|
||||
this.networkPackNT(250);
|
||||
} else {
|
||||
|
||||
|
||||
List<EntityMissileBaseNT> entities = worldObj.getEntitiesWithinAABB(EntityMissileBaseNT.class, AxisAlignedBB.getBoundingBox(xCoord - 0.5, yCoord, zCoord - 0.5, xCoord + 1.5, yCoord + 10, zCoord + 1.5));
|
||||
|
||||
|
||||
if(!entities.isEmpty()) {
|
||||
for(int i = 0; i < 15; i++) {
|
||||
|
||||
@ -70,8 +70,17 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
|
||||
if(worldObj.rand.nextBoolean()) dir = dir.getRotation(ForgeDirection.UP);
|
||||
float moX = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetX;
|
||||
float moZ = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetZ;
|
||||
|
||||
MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "launchsmoke", new float[] {moX, 0, moZ});
|
||||
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setDouble("posX", xCoord + 0.5);
|
||||
data.setDouble("posY", yCoord + 0.25);
|
||||
data.setDouble("posZ", zCoord + 0.5);
|
||||
data.setString("type", "launchSmoke");
|
||||
data.setDouble("moX", moX);
|
||||
data.setDouble("moY", 0);
|
||||
data.setDouble("moZ", moZ);
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -82,7 +91,7 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
|
||||
super.serialize(buf);
|
||||
buf.writeBoolean(this.missileLoaded);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void deserialize(ByteBuf buf) {
|
||||
super.deserialize(buf);
|
||||
@ -90,18 +99,18 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
|
||||
}
|
||||
|
||||
public BombReturnCode launch() {
|
||||
|
||||
|
||||
if(slots[1] != null && slots[2] != null && slots[3] != null && this.missileLoaded) {
|
||||
if(slots[1].getItem() == ModItems.launch_code && slots[2].getItem() == ModItems.launch_key) {
|
||||
if(slots[3] != null && slots[3].getItem() instanceof IDesignatorItem) {
|
||||
IDesignatorItem designator = (IDesignatorItem) slots[3].getItem();
|
||||
|
||||
|
||||
if(!designator.isReady(worldObj, slots[3], xCoord, yCoord, zCoord)) return BombReturnCode.ERROR_MISSING_COMPONENT;
|
||||
|
||||
|
||||
Vec3 coords = designator.getCoords(worldObj, slots[3], xCoord, yCoord, zCoord);
|
||||
int targetX = (int) Math.floor(coords.xCoord);
|
||||
int targetZ = (int) Math.floor(coords.zCoord);
|
||||
|
||||
|
||||
EntityMissileDoomsdayRusted missile = new EntityMissileDoomsdayRusted(worldObj, xCoord + 0.5F, yCoord + 1F, zCoord + 0.5F, targetX, targetZ);
|
||||
worldObj.spawnEntityInWorld(missile);
|
||||
TrackerUtil.setTrackingRange(worldObj, missile, 500);
|
||||
@ -109,19 +118,19 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
|
||||
this.missileLoaded = false;
|
||||
this.decrStackSize(1, 1);
|
||||
this.markDirty();
|
||||
|
||||
|
||||
return BombReturnCode.LAUNCHED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return BombReturnCode.ERROR_MISSING_COMPONENT;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
|
||||
this.missileLoaded = nbt.getBoolean("missileLoaded");
|
||||
|
||||
this.redstonePower = nbt.getInteger("redstonePower");
|
||||
@ -132,11 +141,11 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
|
||||
this.activatedBlocks.add(new BlockPos(activatedBlocks.getInteger("x" + i), activatedBlocks.getInteger("y" + i), activatedBlocks.getInteger("z" + i)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
|
||||
|
||||
nbt.setBoolean("missileLoaded", missileLoaded);
|
||||
|
||||
nbt.setInteger("redstonePower", redstonePower);
|
||||
@ -172,10 +181,10 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
|
||||
}
|
||||
|
||||
AxisAlignedBB bb = null;
|
||||
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getRenderBoundingBox() {
|
||||
|
||||
|
||||
if(bb == null) {
|
||||
bb = AxisAlignedBB.getBoundingBox(
|
||||
xCoord - 2,
|
||||
@ -186,10 +195,10 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements
|
||||
zCoord + 3
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
return bb;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public double getMaxRenderDistanceSquared() {
|
||||
|
||||
@ -226,7 +226,15 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide
|
||||
float moX = (float) (dir ? 0 : worldObj.rand.nextGaussian() * 0.65F);
|
||||
float moZ = (float) (!dir ? 0 : worldObj.rand.nextGaussian() * 0.65F);
|
||||
|
||||
MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "launchsmoke", new float[] {moX, 0, moZ});
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setDouble("posX", xCoord + 0.5);
|
||||
data.setDouble("posY", yCoord + 0.25);
|
||||
data.setDouble("posZ", zCoord + 0.5);
|
||||
data.setString("type", "launchSmoke");
|
||||
data.setDouble("moX", moX);
|
||||
data.setDouble("moY", 0);
|
||||
data.setDouble("moZ", moZ);
|
||||
MainRegistry.proxy.effectNT(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,19 +14,19 @@ import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
|
||||
public class TileEntityBlastDoor extends TileEntityLockableBase {
|
||||
|
||||
|
||||
public boolean isOpening = false;
|
||||
//0: closed, 1: opening/closing, 2:open
|
||||
public int state = 0;
|
||||
public long sysTime;
|
||||
private int timer = 0;
|
||||
public boolean redstoned = false;
|
||||
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getRenderBoundingBox() {
|
||||
return TileEntity.INFINITE_EXTENT_AABB;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public double getMaxRenderDistanceSquared()
|
||||
@ -36,25 +36,25 @@ public class TileEntityBlastDoor extends TileEntityLockableBase {
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
|
||||
if(!isLocked() && worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord) || worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord + 6, zCoord)) {
|
||||
|
||||
|
||||
if(!redstoned) {
|
||||
this.tryToggle();
|
||||
}
|
||||
redstoned = true;
|
||||
|
||||
|
||||
} else {
|
||||
redstoned = false;
|
||||
}
|
||||
|
||||
|
||||
if(state != 1) {
|
||||
timer = 0;
|
||||
} else {
|
||||
timer++;
|
||||
|
||||
|
||||
if(isOpening) {
|
||||
if(timer >= 0) {
|
||||
removeDummy(xCoord, yCoord + 1, zCoord);
|
||||
@ -88,20 +88,20 @@ public class TileEntityBlastDoor extends TileEntityLockableBase {
|
||||
placeDummy(xCoord, yCoord + 1, zCoord);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(timer >= 100) {
|
||||
|
||||
|
||||
if(isOpening)
|
||||
finishOpen();
|
||||
else
|
||||
finishClose();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
PacketDispatcher.wrapper.sendToAllAround(new TEVaultPacket(xCoord, yCoord, zCoord, isOpening, state, 0, 0), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 250));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void open() {
|
||||
if(state == 0) {
|
||||
PacketDispatcher.wrapper.sendToAllAround(new TEVaultPacket(xCoord, yCoord, zCoord, isOpening, state, 1, 0), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 250));
|
||||
@ -112,17 +112,17 @@ public class TileEntityBlastDoor extends TileEntityLockableBase {
|
||||
0.75F);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void finishOpen() {
|
||||
state = 2;
|
||||
|
||||
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.reactorStop", 0.5F,
|
||||
1.0F);
|
||||
}
|
||||
|
||||
|
||||
public void close() {
|
||||
if(state == 2) {
|
||||
PacketDispatcher.wrapper.sendToAll(new TEVaultPacket(xCoord, yCoord, zCoord, isOpening, state, 1, 0));
|
||||
PacketDispatcher.wrapper.sendToAllAround(new TEVaultPacket(xCoord, yCoord, zCoord, isOpening, state, 1, 0), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 250));
|
||||
isOpening = false;
|
||||
state = 1;
|
||||
|
||||
@ -130,116 +130,116 @@ public class TileEntityBlastDoor extends TileEntityLockableBase {
|
||||
0.75F);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void finishClose() {
|
||||
state = 0;
|
||||
|
||||
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "hbm:block.reactorStop", 0.5F,
|
||||
1.0F);
|
||||
}
|
||||
|
||||
|
||||
public void openNeigh() {
|
||||
|
||||
TileEntity te0 = worldObj.getTileEntity(xCoord + 1, yCoord, zCoord);
|
||||
TileEntity te1 = worldObj.getTileEntity(xCoord - 1, yCoord, zCoord);
|
||||
TileEntity te2 = worldObj.getTileEntity(xCoord, yCoord, zCoord + 1);
|
||||
TileEntity te3 = worldObj.getTileEntity(xCoord, yCoord, zCoord - 1);
|
||||
|
||||
|
||||
if(te0 instanceof TileEntityBlastDoor) {
|
||||
|
||||
|
||||
if(((TileEntityBlastDoor)te0).canOpen() && (!((TileEntityBlastDoor)te0).isLocked() || ((TileEntityBlastDoor)te0).lock == lock)) {
|
||||
((TileEntityBlastDoor)te0).open();
|
||||
((TileEntityBlastDoor)te0).openNeigh();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(te1 instanceof TileEntityBlastDoor) {
|
||||
|
||||
|
||||
if(((TileEntityBlastDoor)te1).canOpen() && (!((TileEntityBlastDoor)te1).isLocked() || ((TileEntityBlastDoor)te1).lock == lock)) {
|
||||
((TileEntityBlastDoor)te1).open();
|
||||
((TileEntityBlastDoor)te1).openNeigh();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(te2 instanceof TileEntityBlastDoor) {
|
||||
|
||||
|
||||
if(((TileEntityBlastDoor)te2).canOpen() && (!((TileEntityBlastDoor)te2).isLocked() || ((TileEntityBlastDoor)te2).lock == lock)) {
|
||||
((TileEntityBlastDoor)te2).open();
|
||||
((TileEntityBlastDoor)te2).openNeigh();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(te3 instanceof TileEntityBlastDoor) {
|
||||
|
||||
|
||||
if(((TileEntityBlastDoor)te3).canOpen() && (!((TileEntityBlastDoor)te3).isLocked() || ((TileEntityBlastDoor)te3).lock == lock)) {
|
||||
((TileEntityBlastDoor)te3).open();
|
||||
((TileEntityBlastDoor)te3).openNeigh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void lock() {
|
||||
super.lock();
|
||||
lockNeigh();
|
||||
}
|
||||
|
||||
|
||||
public void closeNeigh() {
|
||||
|
||||
TileEntity te0 = worldObj.getTileEntity(xCoord + 1, yCoord, zCoord);
|
||||
TileEntity te1 = worldObj.getTileEntity(xCoord - 1, yCoord, zCoord);
|
||||
TileEntity te2 = worldObj.getTileEntity(xCoord, yCoord, zCoord + 1);
|
||||
TileEntity te3 = worldObj.getTileEntity(xCoord, yCoord, zCoord - 1);
|
||||
|
||||
|
||||
if(te0 instanceof TileEntityBlastDoor) {
|
||||
|
||||
|
||||
if(((TileEntityBlastDoor)te0).canClose() && (!((TileEntityBlastDoor)te0).isLocked() || ((TileEntityBlastDoor)te0).lock == lock)) {
|
||||
((TileEntityBlastDoor)te0).close();
|
||||
((TileEntityBlastDoor)te0).closeNeigh();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(te1 instanceof TileEntityBlastDoor) {
|
||||
|
||||
|
||||
if(((TileEntityBlastDoor)te1).canClose() && (!((TileEntityBlastDoor)te1).isLocked() || ((TileEntityBlastDoor)te1).lock == lock)) {
|
||||
((TileEntityBlastDoor)te1).close();
|
||||
((TileEntityBlastDoor)te1).closeNeigh();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(te2 instanceof TileEntityBlastDoor) {
|
||||
|
||||
|
||||
if(((TileEntityBlastDoor)te2).canClose() && (!((TileEntityBlastDoor)te2).isLocked() || ((TileEntityBlastDoor)te2).lock == lock)) {
|
||||
((TileEntityBlastDoor)te2).close();
|
||||
((TileEntityBlastDoor)te2).closeNeigh();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(te3 instanceof TileEntityBlastDoor) {
|
||||
|
||||
|
||||
if(((TileEntityBlastDoor)te3).canClose() && (!((TileEntityBlastDoor)te3).isLocked() || ((TileEntityBlastDoor)te3).lock == lock)) {
|
||||
((TileEntityBlastDoor)te3).close();
|
||||
((TileEntityBlastDoor)te3).closeNeigh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void lockNeigh() {
|
||||
|
||||
TileEntity te0 = worldObj.getTileEntity(xCoord + 1, yCoord, zCoord);
|
||||
TileEntity te1 = worldObj.getTileEntity(xCoord - 1, yCoord, zCoord);
|
||||
TileEntity te2 = worldObj.getTileEntity(xCoord, yCoord, zCoord + 1);
|
||||
TileEntity te3 = worldObj.getTileEntity(xCoord, yCoord, zCoord - 1);
|
||||
|
||||
|
||||
if(te0 instanceof TileEntityBlastDoor) {
|
||||
|
||||
|
||||
if(!((TileEntityBlastDoor)te0).isLocked()) {
|
||||
((TileEntityBlastDoor)te0).setPins(this.lock);
|
||||
((TileEntityBlastDoor)te0).lock();
|
||||
((TileEntityBlastDoor)te0).setMod(lockMod);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(te1 instanceof TileEntityBlastDoor) {
|
||||
|
||||
if(!((TileEntityBlastDoor)te1).isLocked()) {
|
||||
@ -248,7 +248,7 @@ public class TileEntityBlastDoor extends TileEntityLockableBase {
|
||||
((TileEntityBlastDoor)te1).setMod(lockMod);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(te2 instanceof TileEntityBlastDoor) {
|
||||
|
||||
if(!((TileEntityBlastDoor)te2).isLocked()) {
|
||||
@ -257,7 +257,7 @@ public class TileEntityBlastDoor extends TileEntityLockableBase {
|
||||
((TileEntityBlastDoor)te2).setMod(lockMod);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(te3 instanceof TileEntityBlastDoor) {
|
||||
|
||||
if(!((TileEntityBlastDoor)te3).isLocked()) {
|
||||
@ -267,15 +267,15 @@ public class TileEntityBlastDoor extends TileEntityLockableBase {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean canOpen() {
|
||||
return state == 0;
|
||||
}
|
||||
|
||||
|
||||
public boolean canClose() {
|
||||
return state == 2;
|
||||
}
|
||||
|
||||
|
||||
public void tryToggle() {
|
||||
|
||||
if(canOpen()) {
|
||||
@ -286,28 +286,28 @@ public class TileEntityBlastDoor extends TileEntityLockableBase {
|
||||
closeNeigh();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean placeDummy(int x, int y, int z) {
|
||||
|
||||
|
||||
if(!worldObj.getBlock(x, y, z).isReplaceable(worldObj, x, y, z))
|
||||
return false;
|
||||
|
||||
|
||||
worldObj.setBlock(x, y, z, ModBlocks.dummy_block_blast);
|
||||
|
||||
|
||||
TileEntity te = worldObj.getTileEntity(x, y, z);
|
||||
|
||||
|
||||
if(te instanceof TileEntityDummy) {
|
||||
TileEntityDummy dummy = (TileEntityDummy)te;
|
||||
dummy.targetX = xCoord;
|
||||
dummy.targetY = yCoord;
|
||||
dummy.targetZ = zCoord;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public void removeDummy(int x, int y, int z) {
|
||||
|
||||
|
||||
if(worldObj.getBlock(x, y, z) == ModBlocks.dummy_block_blast) {
|
||||
DummyBlockBlast.safeBreak = true;
|
||||
worldObj.setBlock(x, y, z, Blocks.air);
|
||||
@ -317,7 +317,7 @@ public class TileEntityBlastDoor extends TileEntityLockableBase {
|
||||
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
|
||||
isOpening = nbt.getBoolean("isOpening");
|
||||
state = nbt.getInteger("state");
|
||||
sysTime = nbt.getLong("sysTime");
|
||||
|
||||
@ -1,14 +1,17 @@
|
||||
package com.hbm.tileentity.machine;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import com.hbm.lib.ModDamageSource;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.packet.toclient.LoopedSoundPacket;
|
||||
import com.hbm.main.MainRegistry;
|
||||
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import com.hbm.sound.AudioWrapper;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityClientPlayerMP;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.potion.Potion;
|
||||
@ -16,23 +19,25 @@ import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
|
||||
public class TileEntityBroadcaster extends TileEntity {
|
||||
|
||||
public class TileEntityBroadcaster extends TileEntityLoadedBase {
|
||||
|
||||
private AudioWrapper audio;
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
|
||||
|
||||
List<Entity> list = worldObj.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(xCoord + 0.5 - 25, yCoord + 0.5 - 25, zCoord + 0.5 - 25, xCoord + 0.5 + 25, yCoord + 0.5 + 25, zCoord + 0.5 + 25));
|
||||
|
||||
|
||||
for(int i = 0; i < list.size(); i++) {
|
||||
if(list.get(i) instanceof EntityLivingBase) {
|
||||
EntityLivingBase e = (EntityLivingBase)list.get(i);
|
||||
double d = Math.sqrt(Math.pow(e.posX - (xCoord + 0.5), 2) + Math.pow(e.posY - (yCoord + 0.5), 2) + Math.pow(e.posZ - (zCoord + 0.5), 2));
|
||||
|
||||
|
||||
if(d <= 25) {
|
||||
if(e.getActivePotionEffect(Potion.confusion) == null || e.getActivePotionEffect(Potion.confusion).getDuration() < 100)
|
||||
e.addPotionEffect(new PotionEffect(Potion.confusion.id, 300, 0));
|
||||
}
|
||||
|
||||
|
||||
if(d <= 15) {
|
||||
double t = (15 - d) / 15 * 10;
|
||||
e.attackEntityFrom(ModDamageSource.broadcast, (float) t);
|
||||
@ -40,16 +45,59 @@ public class TileEntityBroadcaster extends TileEntity {
|
||||
}
|
||||
}
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
PacketDispatcher.wrapper.sendToAllAround(new LoopedSoundPacket(xCoord, yCoord, zCoord), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 150));
|
||||
if (worldObj.isRemote) {
|
||||
if(audio == null) {
|
||||
audio = createAudioLoop();
|
||||
audio.startSound();
|
||||
} else if(!audio.isPlaying()) {
|
||||
audio = rebootAudio(audio);
|
||||
}
|
||||
|
||||
int intendedVolume = 25;
|
||||
|
||||
EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
|
||||
float volume;
|
||||
if(player != null) {
|
||||
float f = (float)Math.sqrt(Math.pow(xCoord - player.posX, 2) + Math.pow(yCoord - player.posY, 2) + Math.pow(zCoord - player.posZ, 2));
|
||||
volume = (f / intendedVolume) * -2 + 2;
|
||||
} else {
|
||||
volume = intendedVolume;
|
||||
}
|
||||
|
||||
audio.updateVolume(getVolume(volume));
|
||||
audio.keepAlive();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onChunkUnload() {
|
||||
super.onChunkUnload();
|
||||
if(audio != null) {
|
||||
audio.stopSound();
|
||||
audio = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidate() {
|
||||
super.invalidate();
|
||||
if(audio != null) {
|
||||
audio.stopSound();
|
||||
audio = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AudioWrapper createAudioLoop() {
|
||||
Random rand = new Random(xCoord + yCoord + zCoord);
|
||||
return MainRegistry.proxy.getLoopedSound("hbm:block.broadcast" + (rand.nextInt(3) + 1), xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getRenderBoundingBox() {
|
||||
return TileEntity.INFINITE_EXTENT_AABB;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public double getMaxRenderDistanceSquared()
|
||||
|
||||
@ -6,18 +6,15 @@ import com.hbm.inventory.container.ContainerMachineArcFurnace;
|
||||
import com.hbm.inventory.gui.GUIMachineArcFurnace;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.packet.toclient.AuxElectricityPacket;
|
||||
import com.hbm.packet.toclient.AuxGaugePacket;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
import com.hbm.util.CompatEnergyControl;
|
||||
|
||||
import api.hbm.energymk2.IEnergyReceiverMK2;
|
||||
import api.hbm.tile.IInfoProviderEC;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
@ -31,12 +28,12 @@ import net.minecraftforge.common.util.ForgeDirection;
|
||||
public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements ISidedInventory, IEnergyReceiverMK2, IGUIProvider, IInfoProviderEC {
|
||||
|
||||
private ItemStack slots[];
|
||||
|
||||
|
||||
public int dualCookTime;
|
||||
public long power;
|
||||
public static final long maxPower = 50000;
|
||||
public static final int processingSpeed = 20;
|
||||
|
||||
|
||||
//0: i
|
||||
//1: o
|
||||
//2: 1
|
||||
@ -44,9 +41,9 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements
|
||||
//4: 3
|
||||
//5: b
|
||||
private static final int[] slots_io = new int[] {0, 1, 2, 3, 4, 5};
|
||||
|
||||
|
||||
private String customName;
|
||||
|
||||
|
||||
public TileEntityMachineArcFurnace() {
|
||||
slots = new ItemStack[6];
|
||||
}
|
||||
@ -91,7 +88,7 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements
|
||||
public boolean hasCustomInventoryName() {
|
||||
return this.customName != null && this.customName.length() > 0;
|
||||
}
|
||||
|
||||
|
||||
public void setCustomName(String name) {
|
||||
this.customName = name;
|
||||
}
|
||||
@ -110,7 +107,7 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements
|
||||
return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//You scrubs aren't needed for anything (right now)
|
||||
@Override
|
||||
public void openInventory() {}
|
||||
@ -119,16 +116,16 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements
|
||||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int i, ItemStack itemStack) {
|
||||
|
||||
|
||||
if(i == 2 || i == 3 || i == 4)
|
||||
return itemStack.getItem() == ModItems.arc_electrode;
|
||||
|
||||
|
||||
if(i == 0)
|
||||
return FurnaceRecipes.smelting().getSmeltingResult(itemStack) != null;
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int i, int j) {
|
||||
if(slots[i] != null)
|
||||
@ -144,22 +141,22 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements
|
||||
{
|
||||
slots[i] = null;
|
||||
}
|
||||
|
||||
|
||||
return itemStack1;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
NBTTagList list = nbt.getTagList("items", 10);
|
||||
|
||||
|
||||
this.power = nbt.getLong("powerTime");
|
||||
this.dualCookTime = nbt.getInteger("cookTime");
|
||||
slots = new ItemStack[getSizeInventory()];
|
||||
|
||||
|
||||
for(int i = 0; i < list.tagCount(); i++)
|
||||
{
|
||||
NBTTagCompound nbt1 = list.getCompoundTagAt(i);
|
||||
@ -170,14 +167,14 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
nbt.setLong("powerTime", power);
|
||||
nbt.setInteger("cookTime", dualCookTime);
|
||||
NBTTagList list = new NBTTagList();
|
||||
|
||||
|
||||
for(int i = 0; i < slots.length; i++)
|
||||
{
|
||||
if(slots[i] != null)
|
||||
@ -190,7 +187,7 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements
|
||||
}
|
||||
nbt.setTag("items", list);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int[] getAccessibleSlotsFromSide(int side) {
|
||||
return slots_io;
|
||||
@ -203,87 +200,87 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements
|
||||
|
||||
@Override
|
||||
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
|
||||
|
||||
|
||||
if(i == 1)
|
||||
return true;
|
||||
|
||||
|
||||
if(i == 2 || i == 3 || i == 4)
|
||||
return itemStack.getItem() == ModItems.arc_electrode_burnt;
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public int getDiFurnaceProgressScaled(int i) {
|
||||
return (dualCookTime * i) / processingSpeed;
|
||||
}
|
||||
|
||||
|
||||
public long getPowerRemainingScaled(long i) {
|
||||
return (power * i) / maxPower;
|
||||
}
|
||||
|
||||
|
||||
public boolean hasPower() {
|
||||
return power >= 250;
|
||||
}
|
||||
|
||||
|
||||
public boolean isProcessing() {
|
||||
return this.dualCookTime > 0;
|
||||
}
|
||||
|
||||
|
||||
private boolean hasElectrodes() {
|
||||
|
||||
|
||||
if(slots[2] != null && slots[3] != null && slots[4] != null) {
|
||||
if((slots[2].getItem() == ModItems.arc_electrode) &&
|
||||
(slots[3].getItem() == ModItems.arc_electrode) &&
|
||||
(slots[4].getItem() == ModItems.arc_electrode))
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public boolean canProcess() {
|
||||
|
||||
|
||||
if(!hasElectrodes())
|
||||
return false;
|
||||
|
||||
|
||||
if(slots[0] == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]);
|
||||
|
||||
|
||||
if(itemStack == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if(slots[1] == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
if(!slots[1].isItemEqual(itemStack)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if(slots[1].stackSize < getInventoryStackLimit() && slots[1].stackSize < slots[1].getMaxStackSize()) {
|
||||
return true;
|
||||
}else{
|
||||
return slots[1].stackSize < itemStack.getMaxStackSize();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void processItem() {
|
||||
if(canProcess()) {
|
||||
ItemStack itemStack = FurnaceRecipes.smelting().getSmeltingResult(this.slots[0]);
|
||||
|
||||
|
||||
if(slots[1] == null)
|
||||
{
|
||||
slots[1] = itemStack.copy();
|
||||
}else if(slots[1].isItemEqual(itemStack)) {
|
||||
slots[1].stackSize += itemStack.stackSize;
|
||||
}
|
||||
|
||||
|
||||
for(int i = 0; i < 1; i++)
|
||||
{
|
||||
if(slots[i].stackSize <= 0)
|
||||
@ -299,26 +296,26 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//TODO: fix this punjabi trash
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
boolean flag1 = false;
|
||||
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
||||
this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir);
|
||||
|
||||
|
||||
if(hasPower() && canProcess())
|
||||
{
|
||||
dualCookTime++;
|
||||
|
||||
|
||||
power -= 250;
|
||||
|
||||
|
||||
if(power < 0)
|
||||
power = 0;
|
||||
|
||||
|
||||
if(this.dualCookTime == processingSpeed)
|
||||
{
|
||||
this.dualCookTime = 0;
|
||||
@ -328,22 +325,22 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements
|
||||
}else{
|
||||
dualCookTime = 0;
|
||||
}
|
||||
|
||||
|
||||
boolean trigger = true;
|
||||
|
||||
|
||||
if(hasPower() && canProcess() && this.dualCookTime == 0)
|
||||
{
|
||||
trigger = false;
|
||||
}
|
||||
|
||||
|
||||
if(trigger)
|
||||
{
|
||||
flag1 = true;
|
||||
MachineArcFurnace.updateBlockState(this.dualCookTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
|
||||
}
|
||||
|
||||
|
||||
if(worldObj.getBlock(xCoord, yCoord, zCoord) == ModBlocks.machine_arc_furnace_off) {
|
||||
|
||||
|
||||
int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord);
|
||||
|
||||
if(hasElectrodes() && meta <= 5) {
|
||||
@ -353,30 +350,42 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements
|
||||
worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, meta - 4, 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
power = Library.chargeTEFromItems(slots, 5, power, maxPower);
|
||||
|
||||
PacketDispatcher.wrapper.sendToAllAround(new AuxElectricityPacket(xCoord, yCoord, zCoord, power), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
||||
PacketDispatcher.wrapper.sendToAllAround(new AuxGaugePacket(xCoord, yCoord, zCoord, dualCookTime, 0), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
||||
networkPackNT(50); // it makes no sense to refactor this to some, but I want to delete the AuxElectricityPacket already
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(flag1)
|
||||
{
|
||||
this.markDirty();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serialize(ByteBuf buf) {
|
||||
super.serialize(buf);
|
||||
buf.writeLong(power);
|
||||
buf.writeInt(dualCookTime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(ByteBuf buf) {
|
||||
super.deserialize(buf);
|
||||
power = buf.readLong();
|
||||
dualCookTime = buf.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPower(long i) {
|
||||
power = i;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getPower() {
|
||||
return power;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -11,8 +11,8 @@ import com.hbm.inventory.recipes.GasCentrifugeRecipes.PseudoFluidType;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.machine.IItemFluidIdentifier;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.packet.toclient.LoopedSoundPacket;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.sound.AudioWrapper;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
import com.hbm.tileentity.TileEntityMachineBase;
|
||||
import com.hbm.util.BufferUtil;
|
||||
@ -23,7 +23,6 @@ import com.hbm.util.fauxpointtwelve.DirPos;
|
||||
import api.hbm.energymk2.IEnergyReceiverMK2;
|
||||
import api.hbm.fluid.IFluidStandardReceiver;
|
||||
import api.hbm.tile.IInfoProviderEC;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
@ -33,57 +32,61 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
//epic!
|
||||
public class TileEntityMachineGasCent extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IInfoProviderEC {
|
||||
|
||||
|
||||
public long power;
|
||||
public int progress;
|
||||
public boolean isProgressing;
|
||||
public static final int maxPower = 100000;
|
||||
public static final int processingSpeed = 150;
|
||||
|
||||
|
||||
public FluidTank tank;
|
||||
public PseudoFluidTank inputTank;
|
||||
public PseudoFluidTank outputTank;
|
||||
|
||||
|
||||
private int audioDuration = 0;
|
||||
private AudioWrapper audio;
|
||||
|
||||
private static final int[] slots_io = new int[] { 0, 1, 2, 3 };
|
||||
|
||||
|
||||
public TileEntityMachineGasCent() {
|
||||
super(7);
|
||||
super(7);
|
||||
tank = new FluidTank(Fluids.UF6, 2000);
|
||||
inputTank = new PseudoFluidTank(PseudoFluidType.NUF6, 8000);
|
||||
outputTank = new PseudoFluidTank(PseudoFluidType.LEUF6, 8000);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "container.gasCentrifuge";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
|
||||
return i < 4;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int[] getAccessibleSlotsFromSide(int side) {
|
||||
return slots_io;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
|
||||
power = nbt.getLong("power");
|
||||
progress = nbt.getShort("progress");
|
||||
tank.readFromNBT(nbt, "tank");
|
||||
inputTank.readFromNBT(nbt, "inputTank");
|
||||
outputTank.readFromNBT(nbt, "outputTank");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
@ -93,127 +96,127 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I
|
||||
inputTank.writeToNBT(nbt, "inputTank");
|
||||
outputTank.writeToNBT(nbt, "outputTank");
|
||||
}
|
||||
|
||||
|
||||
public int getCentrifugeProgressScaled(int i) {
|
||||
return (progress * i) / getProcessingSpeed();
|
||||
}
|
||||
|
||||
|
||||
public long getPowerRemainingScaled(int i) {
|
||||
return (power * i) / maxPower;
|
||||
}
|
||||
|
||||
|
||||
private boolean canEnrich() {
|
||||
if(power > 0 && this.inputTank.getFill() >= inputTank.getTankType().getFluidConsumed() && this.outputTank.getFill() + this.inputTank.getTankType().getFluidProduced() <= outputTank.getMaxFill()) {
|
||||
|
||||
|
||||
ItemStack[] list = inputTank.getTankType().getOutput();
|
||||
|
||||
|
||||
if(this.inputTank.getTankType().getIfHighSpeed())
|
||||
if(!(slots[6] != null && slots[6].getItem() == ModItems.upgrade_gc_speed))
|
||||
return false;
|
||||
|
||||
|
||||
if(list == null)
|
||||
return false;
|
||||
|
||||
|
||||
if(list.length < 1)
|
||||
return false;
|
||||
|
||||
|
||||
if(InventoryUtil.doesArrayHaveSpace(slots, 0, 3, list))
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private void enrich() {
|
||||
ItemStack[] output = inputTank.getTankType().getOutput();
|
||||
|
||||
|
||||
this.progress = 0;
|
||||
inputTank.setFill(inputTank.getFill() - inputTank.getTankType().getFluidConsumed());
|
||||
outputTank.setFill(outputTank.getFill() + inputTank.getTankType().getFluidProduced());
|
||||
|
||||
inputTank.setFill(inputTank.getFill() - inputTank.getTankType().getFluidConsumed());
|
||||
outputTank.setFill(outputTank.getFill() + inputTank.getTankType().getFluidProduced());
|
||||
|
||||
for(byte i = 0; i < output.length; i++)
|
||||
InventoryUtil.tryAddItemToInventory(slots, 0, 3, output[i].copy()); //reference types almost got me again
|
||||
}
|
||||
|
||||
|
||||
private void attemptConversion() {
|
||||
if(inputTank.getFill() < inputTank.getMaxFill() && tank.getFill() > 0) {
|
||||
int fill = Math.min(inputTank.getMaxFill() - inputTank.getFill(), tank.getFill());
|
||||
|
||||
|
||||
tank.setFill(tank.getFill() - fill);
|
||||
inputTank.setFill(inputTank.getFill() + fill);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private boolean attemptTransfer(TileEntity te) {
|
||||
if(te instanceof TileEntityMachineGasCent) {
|
||||
TileEntityMachineGasCent cent = (TileEntityMachineGasCent) te;
|
||||
|
||||
|
||||
if(cent.tank.getFill() == 0 && cent.tank.getTankType() == tank.getTankType()) {
|
||||
if(cent.inputTank.getTankType() != outputTank.getTankType() && outputTank.getTankType() != PseudoFluidType.NONE) {
|
||||
cent.inputTank.setTankType(outputTank.getTankType());
|
||||
cent.outputTank.setTankType(outputTank.getTankType().getOutputType());
|
||||
}
|
||||
|
||||
|
||||
//God, why did I forget about the entirety of the fucking math library?
|
||||
if(cent.inputTank.getFill() < cent.inputTank.getMaxFill() && outputTank.getFill() > 0) {
|
||||
int fill = Math.min(cent.inputTank.getMaxFill() - cent.inputTank.getFill(), outputTank.getFill());
|
||||
|
||||
|
||||
outputTank.setFill(outputTank.getFill() - fill);
|
||||
cent.inputTank.setFill(cent.inputTank.getFill() + fill);
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
|
||||
updateConnections();
|
||||
|
||||
power = Library.chargeTEFromItems(slots, 4, power, maxPower);
|
||||
setTankType(5);
|
||||
|
||||
|
||||
if(GasCentrifugeRecipes.fluidConversions.containsValue(inputTank.getTankType())) {
|
||||
attemptConversion();
|
||||
}
|
||||
|
||||
|
||||
if(canEnrich()) {
|
||||
|
||||
|
||||
isProgressing = true;
|
||||
this.progress++;
|
||||
|
||||
|
||||
if(slots[6] != null && slots[6].getItem() == ModItems.upgrade_gc_speed)
|
||||
this.power -= 300;
|
||||
else
|
||||
this.power -= 200;
|
||||
|
||||
|
||||
if(this.power < 0) {
|
||||
power = 0;
|
||||
this.progress = 0;
|
||||
}
|
||||
|
||||
|
||||
if(progress >= getProcessingSpeed())
|
||||
enrich();
|
||||
|
||||
|
||||
} else {
|
||||
isProgressing = false;
|
||||
this.progress = 0;
|
||||
}
|
||||
|
||||
|
||||
if(worldObj.getTotalWorldTime() % 10 == 0) {
|
||||
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset);
|
||||
TileEntity te = worldObj.getTileEntity(this.xCoord - dir.offsetX, this.yCoord, this.zCoord - dir.offsetZ);
|
||||
|
||||
|
||||
//*AT THE MOMENT*, there's not really any need for a dedicated method for this. Yet.
|
||||
if(!attemptTransfer(te) && this.inputTank.getTankType() == PseudoFluidType.LEUF6) {
|
||||
ItemStack[] converted = new ItemStack[] { new ItemStack(ModItems.nugget_uranium_fuel, 6), new ItemStack(ModItems.fluorite) };
|
||||
|
||||
|
||||
if(this.outputTank.getFill() >= 600 && InventoryUtil.doesArrayHaveSpace(slots, 0, 3, converted)) {
|
||||
this.outputTank.setFill(this.outputTank.getFill() - 600);
|
||||
for(ItemStack stack : converted)
|
||||
@ -221,13 +224,46 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.networkPackNT(50);
|
||||
|
||||
PacketDispatcher.wrapper.sendToAllAround(new LoopedSoundPacket(xCoord, yCoord, zCoord), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
||||
} else {
|
||||
|
||||
if(isProgressing) {
|
||||
audioDuration += 2;
|
||||
} else {
|
||||
audioDuration -= 3;
|
||||
}
|
||||
|
||||
audioDuration = MathHelper.clamp_int(audioDuration, 0, 60);
|
||||
|
||||
if(audioDuration > 10) {
|
||||
|
||||
if(audio == null) {
|
||||
audio = createAudioLoop();
|
||||
audio.startSound();
|
||||
} else if(!audio.isPlaying()) {
|
||||
audio = rebootAudio(audio);
|
||||
}
|
||||
|
||||
audio.updateVolume(getVolume(1F));
|
||||
audio.updatePitch((audioDuration - 10) / 100F + 0.5F);
|
||||
|
||||
} else {
|
||||
|
||||
if(audio != null) {
|
||||
audio.stopSound();
|
||||
audio = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public AudioWrapper createAudioLoop() {
|
||||
return MainRegistry.proxy.getLoopedSound("hbm:block.centrifugeOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serialize(ByteBuf buf) {
|
||||
super.serialize(buf);
|
||||
@ -239,35 +275,35 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I
|
||||
buf.writeInt(outputTank.getFill());
|
||||
BufferUtil.writeString(buf, inputTank.getTankType().name); //cough cough
|
||||
BufferUtil.writeString(buf, outputTank.getTankType().name);
|
||||
|
||||
|
||||
tank.serialize(buf);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void deserialize(ByteBuf buf) {
|
||||
super.deserialize(buf);
|
||||
power = buf.readLong();
|
||||
progress = buf.readInt();
|
||||
isProgressing = buf.readBoolean();
|
||||
|
||||
|
||||
inputTank.setFill(buf.readInt());
|
||||
outputTank.setFill(buf.readInt());
|
||||
inputTank.setTankType(PseudoFluidType.types.get(BufferUtil.readString(buf)));
|
||||
outputTank.setTankType(PseudoFluidType.types.get(BufferUtil.readString(buf)));
|
||||
|
||||
|
||||
tank.deserialize(buf);
|
||||
}
|
||||
|
||||
|
||||
private void updateConnections() {
|
||||
for(DirPos pos : getConPos()) {
|
||||
this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
|
||||
|
||||
|
||||
if(GasCentrifugeRecipes.fluidConversions.containsValue(inputTank.getTankType())) {
|
||||
this.trySubscribe(tank.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private DirPos[] getConPos() {
|
||||
return new DirPos[] {
|
||||
new DirPos(xCoord, yCoord - 1, zCoord, Library.NEG_Y),
|
||||
@ -286,40 +322,40 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I
|
||||
@Override
|
||||
public long getPower() {
|
||||
return power;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getMaxPower() {
|
||||
return maxPower;
|
||||
}
|
||||
|
||||
|
||||
public int getProcessingSpeed() {
|
||||
if(slots[6] != null && slots[6].getItem() == ModItems.upgrade_gc_speed) {
|
||||
return processingSpeed - 70;
|
||||
}
|
||||
return processingSpeed;
|
||||
}
|
||||
|
||||
|
||||
public void setTankType(int in) {
|
||||
|
||||
|
||||
if(slots[in] != null && slots[in].getItem() instanceof IItemFluidIdentifier) {
|
||||
IItemFluidIdentifier id = (IItemFluidIdentifier) slots[in].getItem();
|
||||
FluidType newType = id.getType(worldObj, xCoord, yCoord, zCoord, slots[in]);
|
||||
|
||||
|
||||
if(tank.getTankType() != newType) {
|
||||
PseudoFluidType pseudo = GasCentrifugeRecipes.fluidConversions.get(newType);
|
||||
|
||||
|
||||
if(pseudo != null) {
|
||||
inputTank.setTankType(pseudo);
|
||||
outputTank.setTankType(pseudo.getOutputType());
|
||||
tank.setTankType(newType);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public FluidTank[] getReceivingTanks() {
|
||||
return new FluidTank[] { tank };
|
||||
@ -329,71 +365,71 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I
|
||||
public FluidTank[] getAllTanks() {
|
||||
return new FluidTank[] { tank };
|
||||
}
|
||||
|
||||
|
||||
AxisAlignedBB bb = null;
|
||||
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getRenderBoundingBox() {
|
||||
|
||||
|
||||
if(bb == null) {
|
||||
bb = AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 5, zCoord + 1);
|
||||
}
|
||||
|
||||
|
||||
return bb;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public double getMaxRenderDistanceSquared() {
|
||||
return 65536.0D;
|
||||
}
|
||||
|
||||
|
||||
public class PseudoFluidTank {
|
||||
PseudoFluidType type;
|
||||
int fluid;
|
||||
int maxFluid;
|
||||
|
||||
|
||||
public PseudoFluidTank(PseudoFluidType type, int maxFluid) {
|
||||
this.type = type;
|
||||
this.maxFluid = maxFluid;
|
||||
}
|
||||
|
||||
|
||||
public void setFill(int i) {
|
||||
fluid = i;
|
||||
}
|
||||
|
||||
|
||||
public void setTankType(PseudoFluidType type) {
|
||||
|
||||
|
||||
if(this.type.equals(type))
|
||||
return;
|
||||
|
||||
|
||||
if(type == null)
|
||||
this.type = PseudoFluidType.NONE;
|
||||
else
|
||||
this.type = type;
|
||||
|
||||
|
||||
this.setFill(0);
|
||||
}
|
||||
|
||||
|
||||
public PseudoFluidType getTankType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
public int getFill() {
|
||||
return fluid;
|
||||
}
|
||||
|
||||
|
||||
public int getMaxFill() {
|
||||
return maxFluid;
|
||||
}
|
||||
|
||||
|
||||
//Called by TE to save fillstate
|
||||
public void writeToNBT(NBTTagCompound nbt, String s) {
|
||||
nbt.setInteger(s, fluid);
|
||||
nbt.setInteger(s + "_max", maxFluid);
|
||||
nbt.setString(s + "_type", type.name);
|
||||
}
|
||||
|
||||
|
||||
//Called by TE to load fillstate
|
||||
public void readFromNBT(NBTTagCompound nbt, String s) {
|
||||
fluid = nbt.getInteger(s);
|
||||
@ -402,7 +438,7 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I
|
||||
type = PseudoFluidType.types.get(nbt.getString(s + "_type"));
|
||||
if(type == null) type = PseudoFluidType.NONE;
|
||||
}
|
||||
|
||||
|
||||
/* ______ ______
|
||||
* _I____I_ _I____I_
|
||||
* / \\\ / \\\
|
||||
|
||||
@ -4,8 +4,6 @@ import com.hbm.config.VersatileConfig;
|
||||
import com.hbm.inventory.container.ContainerMachineRTG;
|
||||
import com.hbm.inventory.gui.GUIMachineRTG;
|
||||
import com.hbm.items.machine.ItemRTGPellet;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.packet.toclient.AuxElectricityPacket;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
import com.hbm.util.CompatEnergyControl;
|
||||
@ -13,9 +11,9 @@ import com.hbm.util.RTGUtil;
|
||||
|
||||
import api.hbm.energymk2.IEnergyProviderMK2;
|
||||
import api.hbm.tile.IInfoProviderEC;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
@ -28,16 +26,16 @@ import net.minecraftforge.common.util.ForgeDirection;
|
||||
public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISidedInventory, IEnergyProviderMK2, IGUIProvider, IInfoProviderEC {
|
||||
|
||||
private ItemStack slots[];
|
||||
|
||||
|
||||
public int heat;
|
||||
public final int heatMax = VersatileConfig.rtgDecay() ? 600 : 200;
|
||||
public long power;
|
||||
public final long powerMax = 100000;
|
||||
|
||||
|
||||
public static final int[] slot_io = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
|
||||
|
||||
|
||||
private String customName;
|
||||
|
||||
|
||||
public TileEntityMachineRTG() {
|
||||
slots = new ItemStack[15];
|
||||
}
|
||||
@ -82,7 +80,7 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided
|
||||
public boolean hasCustomInventoryName() {
|
||||
return this.customName != null && this.customName.length() > 0;
|
||||
}
|
||||
|
||||
|
||||
public void setCustomName(String name) {
|
||||
this.customName = name;
|
||||
}
|
||||
@ -101,7 +99,7 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided
|
||||
return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//You scrubs aren't needed for anything (right now)
|
||||
@Override
|
||||
public void openInventory() {}
|
||||
@ -112,7 +110,7 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided
|
||||
public boolean isItemValidForSlot(int i, ItemStack itemStack) {
|
||||
return itemStack.getItem() instanceof ItemRTGPellet;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int i, int j) {
|
||||
if(slots[i] != null)
|
||||
@ -128,13 +126,13 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided
|
||||
{
|
||||
slots[i] = null;
|
||||
}
|
||||
|
||||
|
||||
return itemStack1;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
@ -143,7 +141,7 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided
|
||||
power = nbt.getLong("power");
|
||||
heat = nbt.getInteger("heat");
|
||||
slots = new ItemStack[getSizeInventory()];
|
||||
|
||||
|
||||
for(int i = 0; i < list.tagCount(); i++)
|
||||
{
|
||||
NBTTagCompound nbt1 = list.getCompoundTagAt(i);
|
||||
@ -154,14 +152,14 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
nbt.setLong("power", power);
|
||||
nbt.setInteger("heat", heat);
|
||||
NBTTagList list = new NBTTagList();
|
||||
|
||||
|
||||
for(int i = 0; i < slots.length; i++) {
|
||||
if(slots[i] != null) {
|
||||
NBTTagCompound nbt1 = new NBTTagCompound();
|
||||
@ -172,7 +170,7 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided
|
||||
}
|
||||
nbt.setTag("items", list);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int[] getAccessibleSlotsFromSide(int p_94128_1_) {
|
||||
return slot_io;
|
||||
@ -187,19 +185,19 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided
|
||||
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public long getPowerScaled(long i) {
|
||||
return (power * i) / powerMax;
|
||||
}
|
||||
|
||||
|
||||
public int getHeatScaled(int i) {
|
||||
return (heat * i) / heatMax;
|
||||
}
|
||||
|
||||
|
||||
public boolean hasPower() {
|
||||
return power > 0;
|
||||
}
|
||||
|
||||
|
||||
public boolean hasHeat() {
|
||||
return RTGUtil.hasHeat(slots, slot_io);
|
||||
}
|
||||
@ -208,23 +206,35 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided
|
||||
public void updateEntity() {
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
|
||||
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
||||
this.tryProvide(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir);
|
||||
|
||||
|
||||
heat = RTGUtil.updateRTGs(slots, slot_io);
|
||||
|
||||
|
||||
if(heat > heatMax)
|
||||
heat = heatMax;
|
||||
|
||||
|
||||
power += heat * 5;
|
||||
if(power > powerMax)
|
||||
power = powerMax;
|
||||
|
||||
PacketDispatcher.wrapper.sendToAllAround(new AuxElectricityPacket(xCoord, yCoord, zCoord, power), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
||||
|
||||
networkPackNT(50);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serialize(ByteBuf buf) {
|
||||
super.serialize(buf);
|
||||
buf.writeLong(power);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(ByteBuf buf) {
|
||||
super.deserialize(buf);
|
||||
power = buf.readLong();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getPower() {
|
||||
return power;
|
||||
|
||||
@ -5,16 +5,14 @@ import com.hbm.inventory.gui.GUIMachineShredder;
|
||||
import com.hbm.inventory.recipes.ShredderRecipes;
|
||||
import com.hbm.items.machine.ItemBlades;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.packet.toclient.AuxElectricityPacket;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
|
||||
import api.hbm.energymk2.IBatteryItem;
|
||||
import api.hbm.energymk2.IEnergyReceiverMK2;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
@ -33,11 +31,11 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
public int soundCycle = 0;
|
||||
public static final long maxPower = 10000;
|
||||
public static final int processingSpeed = 60;
|
||||
|
||||
|
||||
private static final int[] slots_io = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29};
|
||||
|
||||
|
||||
private String customName;
|
||||
|
||||
|
||||
public TileEntityMachineShredder() {
|
||||
slots = new ItemStack[30];
|
||||
}
|
||||
@ -82,7 +80,7 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
public boolean hasCustomInventoryName() {
|
||||
return this.customName != null && this.customName.length() > 0;
|
||||
}
|
||||
|
||||
|
||||
public void setCustomName(String name) {
|
||||
this.customName = name;
|
||||
}
|
||||
@ -101,7 +99,7 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//You scrubs aren't needed for anything (right now)
|
||||
@Override
|
||||
public void openInventory() {}
|
||||
@ -113,10 +111,10 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
if(i < 9) return ShredderRecipes.getShredderResult(stack) != null && !(stack.getItem() instanceof ItemBlades);
|
||||
if(i == 29) return stack.getItem() instanceof IBatteryItem;
|
||||
if(i == 27 || i == 28) return stack.getItem() instanceof ItemBlades;
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int i, int j) {
|
||||
if(slots[i] != null)
|
||||
@ -132,21 +130,21 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
{
|
||||
slots[i] = null;
|
||||
}
|
||||
|
||||
|
||||
return itemStack1;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
NBTTagList list = nbt.getTagList("items", 10);
|
||||
|
||||
|
||||
this.power = nbt.getLong("powerTime");
|
||||
slots = new ItemStack[getSizeInventory()];
|
||||
|
||||
|
||||
for(int i = 0; i < list.tagCount(); i++)
|
||||
{
|
||||
NBTTagCompound nbt1 = list.getCompoundTagAt(i);
|
||||
@ -157,13 +155,13 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
nbt.setLong("powerTime", power);
|
||||
NBTTagList list = new NBTTagList();
|
||||
|
||||
|
||||
for(int i = 0; i < slots.length; i++)
|
||||
{
|
||||
if(slots[i] != null)
|
||||
@ -176,7 +174,7 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
}
|
||||
nbt.setTag("items", list);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int[] getAccessibleSlotsFromSide(int side) {
|
||||
return slots_io;
|
||||
@ -186,20 +184,20 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
public boolean canInsertItem(int slot, ItemStack itemStack, int side) {
|
||||
if((slot >= 9 && slot != 27 && slot != 28) || !this.isItemValidForSlot(slot, itemStack))
|
||||
return false;
|
||||
|
||||
|
||||
if(slots[slot] == null)
|
||||
return true;
|
||||
|
||||
|
||||
int size = slots[slot].stackSize;
|
||||
|
||||
|
||||
for(int k = 0; k < 9; k++) {
|
||||
if(slots[k] == null)
|
||||
return false;
|
||||
|
||||
|
||||
if(slots[k].getItem() == itemStack.getItem() && slots[k].getItemDamage() == itemStack.getItemDamage() && slots[k].stackSize < size)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -207,42 +205,42 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
|
||||
if(i >= 9 && i <= 26) return true;
|
||||
if(i >= 27 && i <= 28) if(itemStack.getItemDamage() == itemStack.getMaxDamage() && itemStack.getMaxDamage() > 0) return true;
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public int getDiFurnaceProgressScaled(int i) {
|
||||
return (progress * i) / processingSpeed;
|
||||
}
|
||||
|
||||
|
||||
public boolean hasPower() {
|
||||
return power > 0;
|
||||
}
|
||||
|
||||
|
||||
public boolean isProcessing() {
|
||||
return this.progress > 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
boolean flag1 = false;
|
||||
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
|
||||
this.updateConnections();
|
||||
|
||||
|
||||
if(hasPower() && canProcess())
|
||||
{
|
||||
progress++;
|
||||
|
||||
|
||||
power -= 5;
|
||||
|
||||
|
||||
if(this.progress == TileEntityMachineShredder.processingSpeed)
|
||||
{
|
||||
for(int i = 27; i <= 28; i++)
|
||||
if(slots[i].getMaxDamage() > 0)
|
||||
this.slots[i].setItemDamage(this.slots[i].getItemDamage() + 1);
|
||||
|
||||
|
||||
this.progress = 0;
|
||||
this.processItem();
|
||||
flag1 = true;
|
||||
@ -250,66 +248,78 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
if(soundCycle == 0)
|
||||
this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, "minecart.base", getVolume(1.0F), 0.75F);
|
||||
soundCycle++;
|
||||
|
||||
|
||||
if(soundCycle >= 50)
|
||||
soundCycle = 0;
|
||||
}else{
|
||||
progress = 0;
|
||||
}
|
||||
|
||||
|
||||
boolean trigger = true;
|
||||
|
||||
|
||||
if(hasPower() && canProcess() && this.progress == 0)
|
||||
{
|
||||
trigger = false;
|
||||
}
|
||||
|
||||
|
||||
if(trigger)
|
||||
{
|
||||
flag1 = true;
|
||||
}
|
||||
|
||||
|
||||
power = Library.chargeTEFromItems(slots, 29, power, maxPower);
|
||||
|
||||
PacketDispatcher.wrapper.sendToAllAround(new AuxElectricityPacket(xCoord, yCoord, zCoord, power), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
||||
|
||||
networkPackNT(50);
|
||||
}
|
||||
|
||||
|
||||
if(flag1)
|
||||
{
|
||||
this.markDirty();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void serialize(ByteBuf buf) {
|
||||
super.serialize(buf);
|
||||
buf.writeLong(power);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(ByteBuf buf) {
|
||||
super.deserialize(buf);
|
||||
power = buf.readLong();
|
||||
}
|
||||
|
||||
private void updateConnections() {
|
||||
|
||||
|
||||
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
||||
this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir);
|
||||
}
|
||||
|
||||
|
||||
public void processItem() {
|
||||
|
||||
|
||||
for(int inpSlot = 0; inpSlot < 9; inpSlot++)
|
||||
{
|
||||
if(slots[inpSlot] != null && hasSpace(slots[inpSlot]))
|
||||
{
|
||||
ItemStack inp = slots[inpSlot];
|
||||
ItemStack outp = ShredderRecipes.getShredderResult(inp);
|
||||
|
||||
|
||||
boolean flag = false;
|
||||
|
||||
|
||||
for (int outSlot = 9; outSlot < 27; outSlot++)
|
||||
{
|
||||
if (slots[outSlot] != null && slots[outSlot].getItem() == outp.getItem() &&
|
||||
if (slots[outSlot] != null && slots[outSlot].getItem() == outp.getItem() &&
|
||||
slots[outSlot].getItemDamage() == outp.getItemDamage() &&
|
||||
slots[outSlot].stackSize + outp.stackSize <= outp.getMaxStackSize()) {
|
||||
|
||||
|
||||
slots[outSlot].stackSize += outp.stackSize;
|
||||
slots[inpSlot].stackSize -= 1;
|
||||
flag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(!flag)
|
||||
for (int outSlot = 9; outSlot < 27; outSlot++)
|
||||
{
|
||||
@ -319,18 +329,18 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(slots[inpSlot].stackSize <= 0)
|
||||
slots[inpSlot] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean canProcess() {
|
||||
if(slots[27] != null && slots[28] != null &&
|
||||
this.getGearLeft() > 0 && this.getGearLeft() < 3 &&
|
||||
if(slots[27] != null && slots[28] != null &&
|
||||
this.getGearLeft() > 0 && this.getGearLeft() < 3 &&
|
||||
this.getGearRight() > 0 && this.getGearRight() < 3) {
|
||||
|
||||
|
||||
for(int i = 0; i < 9; i++)
|
||||
{
|
||||
if(slots[i] != null && slots[i].stackSize > 0 && hasSpace(slots[i]))
|
||||
@ -339,14 +349,14 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public boolean hasSpace(ItemStack stack) {
|
||||
|
||||
|
||||
ItemStack result = ShredderRecipes.getShredderResult(stack);
|
||||
|
||||
|
||||
if (result != null)
|
||||
for (int i = 9; i < 27; i++) {
|
||||
if (slots[i] == null) {
|
||||
@ -358,16 +368,16 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPower(long i) {
|
||||
this.power = i;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public long getPowerScaled(long i) {
|
||||
return (power * i) / maxPower;
|
||||
}
|
||||
@ -381,14 +391,14 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
public long getMaxPower() {
|
||||
return TileEntityMachineShredder.maxPower;
|
||||
}
|
||||
|
||||
|
||||
public int getGearLeft() {
|
||||
|
||||
|
||||
if(slots[27] != null && slots[27].getItem() instanceof ItemBlades)
|
||||
{
|
||||
if(slots[27].getMaxDamage() == 0)
|
||||
return 1;
|
||||
|
||||
|
||||
if(slots[27].getItemDamage() < slots[27].getItem().getMaxDamage()/2)
|
||||
{
|
||||
return 1;
|
||||
@ -398,17 +408,17 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
public int getGearRight() {
|
||||
|
||||
|
||||
if(slots[28] != null && slots[28].getItem() instanceof ItemBlades)
|
||||
{
|
||||
if(slots[28].getMaxDamage() == 0)
|
||||
return 1;
|
||||
|
||||
|
||||
if(slots[28].getItemDamage() < slots[28].getItem().getMaxDamage()/2)
|
||||
{
|
||||
return 1;
|
||||
@ -418,7 +428,7 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user