mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
the death of RNG
This commit is contained in:
parent
eaaa78c384
commit
7896c0443a
20
changelog
20
changelog
@ -1,3 +1,10 @@
|
||||
## Added
|
||||
* Powered Floodlight
|
||||
* Uses 100HE/t to create light
|
||||
* Casts 15 rays in a wide beam with a maximum length of 64 blocks, each beam creates a spot with light level 15
|
||||
* Floodlight can be mounted on any side and angled in any direction, angles snap to 5° increments
|
||||
* Angles can be adjusted after placing with a screwdriver
|
||||
|
||||
## Changed
|
||||
* Changed bedrock ore processing time in the electrolyzer to 60 ticks
|
||||
* RF converters have been reworked
|
||||
@ -7,9 +14,20 @@
|
||||
* The loss only takes effect once the input buffer can no longer empty into the output buffer, i.e. when energy demand is too low for the input
|
||||
* The buffer also fixes a bug where the HE to RF converter often behaves weirdly with certain mods, either outright destroying energy ot creating infinite energy
|
||||
* HE to RF converters now by default have the connection priority of LOW, only feeding into RF networks when all other energy consumers are sufficiently supplied. This can still be changed by using diodes
|
||||
* Converters now have configurable conversion rates as well as input decay per tick
|
||||
* The SILEX is now fully deterministic
|
||||
* Output is no longer random, instead there is now a "recipe index" which is incremented after each operation, choosing a new next output
|
||||
* This means that the order of outputs for any given input is fixed, and outputs are guaranteed to happen based on the recipe's total weight (most recipes have a total output weight of 100 for simplicity's sake, meaning after 100 operations the output pattern repeats, and all outputs are guaranteed to be picked)
|
||||
* Simplified the assembler recipes for the SILEX, FEL and all energy storage blocks (no more random wires and single ingots, fewer duplicate materials)
|
||||
* Turrets will now only lock onto missiles if they are descending (i.e. negative Y speed), which means that launching a missile close to a turret will not cause the turret to immediately shoot it
|
||||
* The fusion reactor's byproducts are now created by delay and not by chance, making the output predictable
|
||||
* Tritium-based fusion fuels now have a higher byproduct output rate (900 ticks instead of 1200)
|
||||
|
||||
## Fixed
|
||||
* Fixed issue where the NEI universal handler can not correctly display more than 4 outputs (now supports up to 8, which should cover all possible electrolyzer cases too)
|
||||
* Fixed the metal electrolysis duration variable not being part of the config
|
||||
* Removed the global energy transfer cap (only per-machine caps apply now), fixing issues where FENSUs in buffer mode would not charge past 10THE, and constantly void energy if above that threshold
|
||||
* Fixed a bug where the power transfer would sometimes have leftovers due to rounding errors which are send but not used up, effectively creating small amounts of energy out of nothing
|
||||
* Fixed a bug where the power transfer would sometimes have leftovers due to rounding errors which are send but not used up, effectively creating small amounts of energy out of nothing
|
||||
* Fixed ZIRNOX space checks omitting the top portion
|
||||
* Fixed RBMK flames and mini nuke flashes being affected by fog, turning them into glowing squares when viewed at a distance
|
||||
* Fixed crash caused by brimstone mines being launched from dispensers
|
||||
@ -1,6 +1,6 @@
|
||||
mod_version=1.0.27
|
||||
# Empty build number makes a release type
|
||||
mod_build_number=5020
|
||||
mod_build_number=5026
|
||||
|
||||
credits=HbMinecraft,\
|
||||
\ rodolphito (explosion algorithms),\
|
||||
|
||||
@ -7,6 +7,8 @@ import com.hbm.util.fauxpointtwelve.BlockPos;
|
||||
|
||||
import api.hbm.block.IToolable;
|
||||
import api.hbm.energymk2.IEnergyReceiverMK2;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockContainer;
|
||||
import net.minecraft.block.material.Material;
|
||||
@ -19,6 +21,7 @@ import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
@ -265,5 +268,30 @@ public class Floodlight extends BlockContainer implements IToolable {
|
||||
private boolean isLoaded = true;
|
||||
@Override public boolean isLoaded() { return isLoaded; }
|
||||
@Override public void onChunkUnload() { this.isLoaded = false; }
|
||||
|
||||
AxisAlignedBB bb = null;
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getRenderBoundingBox() {
|
||||
|
||||
if(bb == null) {
|
||||
bb = AxisAlignedBB.getBoundingBox(
|
||||
xCoord - 1,
|
||||
yCoord - 1,
|
||||
zCoord - 1,
|
||||
xCoord + 2,
|
||||
yCoord + 2,
|
||||
zCoord + 2
|
||||
);
|
||||
}
|
||||
|
||||
return bb;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public double getMaxRenderDistanceSquared() {
|
||||
return 65536.0D;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,6 +62,14 @@ public class ReactorZirnox extends BlockDummyable {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
|
||||
return super.checkRequirement(world, x, y, z, dir, o) &&
|
||||
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, -2, 1, 1, 1, 1}, x, y, z, dir) &&
|
||||
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, -2, 0, 0, 2, -2}, x, y, z, dir) &&
|
||||
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, -2, 0, 0, -2, 2}, x, y, z, dir);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
|
||||
super.fillSpace(world, x, y, z, dir, o);
|
||||
|
||||
@ -175,8 +175,7 @@ public class EntityBullet extends Entity implements IProjectile {
|
||||
}
|
||||
|
||||
this.setSize(0.5F, 0.5F);
|
||||
this.setLocationAndAngles(p_i1756_2_.posX, p_i1756_2_.posY + p_i1756_2_.getEyeHeight(), p_i1756_2_.posZ,
|
||||
p_i1756_2_.rotationYaw, p_i1756_2_.rotationPitch);
|
||||
if(p_i1756_2_ != null) this.setLocationAndAngles(p_i1756_2_.posX, p_i1756_2_.posY + p_i1756_2_.getEyeHeight(), p_i1756_2_.posZ, p_i1756_2_.rotationYaw, p_i1756_2_.rotationPitch);
|
||||
this.posX -= MathHelper.cos(this.rotationYaw / 180.0F * (float) Math.PI) * 0.16F;
|
||||
this.posY -= 0.10000000149011612D;
|
||||
this.posZ -= MathHelper.sin(this.rotationYaw / 180.0F * (float) Math.PI) * 0.16F;
|
||||
|
||||
@ -126,10 +126,10 @@ public class AssemblerRecipes extends SerializableRecipe {
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_rtg_furnace_off, 1), new AStack[] {new ComparableStack(Blocks.furnace, 1), new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(PB.plate528(), 6), new OreDictStack(OreDictManager.getReflector(), 4), new OreDictStack(CU.plate(), 2), },150);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_diesel, 1), new AStack[] {new OreDictStack(STEEL.shell(), 1), new ComparableStack(ModItems.piston_selenium, 1), new OreDictStack(STEEL.plateCast(), 1), new ComparableStack(ModItems.coil_copper, 4), }, 60);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_rtg_grey, 1), new AStack[] {new ComparableStack(ModItems.rtg_unit, 3), new OreDictStack(STEEL.plate528(), 4), new OreDictStack(MINGRADE.wireFine(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 3), },200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_battery, 1), new AStack[] {new OreDictStack(STEEL.plateWelded(), 1), new OreDictStack(S.dust(), 12), new OreDictStack(PB.dust(), 12), new OreDictStack(MINGRADE.ingot(), 2), new OreDictStack(MINGRADE.wireFine(), 4), },200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new AStack[] {new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(CO.dust(), 12), new OreDictStack(LI.dust(), 12), new OreDictStack(ALLOY.ingot(), 2), new OreDictStack(MINGRADE.wireFine(), 4), },400);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_schrabidium_battery, 1), new AStack[] {new OreDictStack(DESH.ingot(), 4), new OreDictStack(NP237.dust(), 12), new OreDictStack(SA326.dust(), 12), new OreDictStack(SA326.ingot(), 2), new OreDictStack(SA326.wireFine(), 4), },800);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_dineutronium_battery, 1), new AStack[] {new OreDictStack(DNT.ingot(), 24), new ComparableStack(ModItems.powder_spark_mix, 12), new ComparableStack(ModItems.battery_spark_cell_1000, 1), new OreDictStack(CMB.ingot(), 32), new ComparableStack(ModItems.coil_magnetized_tungsten, 8), },1600);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_battery, 1), new AStack[] {new OreDictStack(STEEL.plateWelded(), 1), new OreDictStack(S.dust(), 12), new OreDictStack(PB.dust(), 12) },100);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_lithium_battery, 1), new AStack[] {new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(CO.dust(), 12), new OreDictStack(LI.dust(), 12) },100);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_schrabidium_battery, 1), new AStack[] {new OreDictStack(DESH.ingot(), 16), new OreDictStack(NP237.dust(), 12), new OreDictStack(SA326.dust(), 12) },200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_dineutronium_battery, 1), new AStack[] {new OreDictStack(DNT.ingot(), 24), new ComparableStack(ModItems.powder_spark_mix, 12), new ComparableStack(ModItems.battery_spark_cell_1000, 1), new OreDictStack(CMB.ingot(), 32) }, 300);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_shredder, 1), new AStack[] {new OreDictStack(STEEL.plate528(), 8), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModBlocks.steel_beam, 2), new ComparableStack(Blocks.iron_bars, 2) },200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_well, 1), new AStack[] {new ComparableStack(ModBlocks.steel_scaffold, 20), new ComparableStack(ModItems.tank_steel, 2), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.pipes_steel, 1), new ComparableStack(ModItems.drill_titanium, 1) }, 200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_pumpjack, 1), new AStack[] {new ComparableStack(ModBlocks.steel_scaffold, 8), new OreDictStack(STEEL.plateWelded(), 8), new ComparableStack(ModItems.pipes_steel, 4), new ComparableStack(ModItems.tank_steel, 4), new OreDictStack(STEEL.plate(), 32), new ComparableStack(ModItems.drill_titanium, 1), new ComparableStack(ModItems.motor_desh) }, 400);
|
||||
@ -860,21 +860,17 @@ public class AssemblerRecipes extends SerializableRecipe {
|
||||
}, 100);
|
||||
|
||||
makeRecipe(new ComparableStack(ModBlocks.machine_silex, 1), new AStack[] {
|
||||
new ComparableStack(Blocks.glass, 12),
|
||||
new ComparableStack(ModItems.motor, 2),
|
||||
new OreDictStack(DURA.ingot(), 4),
|
||||
!exp ? new OreDictStack(STEEL.plate528(), 8) : new OreDictStack(STEEL.heavyComp(), 1),
|
||||
new OreDictStack(DESH.ingot(), 2),
|
||||
new ComparableStack(ModItems.tank_steel, 1),
|
||||
new OreDictStack(STEEL.pipe(), 12),
|
||||
new ComparableStack(ModItems.crystal_diamond, 1)
|
||||
new ComparableStack(ModBlocks.glass_quartz, 16),
|
||||
!exp ? new OreDictStack(STEEL.plateCast(), 8) : new OreDictStack(STEEL.heavyComp(), 1),
|
||||
new OreDictStack(DESH.ingot(), 4),
|
||||
new OreDictStack(RUBBER.ingot(), 8),
|
||||
new OreDictStack(STEEL.pipe(), 8),
|
||||
}, 400);
|
||||
makeRecipe(new ComparableStack(Item.getItemFromBlock(ModBlocks.machine_fel), 1), new AStack[] {
|
||||
new ComparableStack(ModBlocks.machine_lithium_battery, 2),
|
||||
new ComparableStack(ModBlocks.machine_lithium_battery, 1),
|
||||
new OreDictStack(ALLOY.wireDense(), 64),
|
||||
!exp ? new OreDictStack(STEEL.plate528(), 24) : new OreDictStack(STEEL.heavyComp(), 1),
|
||||
!exp ? new OreDictStack(STEEL.plateCast(), 12) : new OreDictStack(STEEL.heavyComp(), 1),
|
||||
new OreDictStack(ANY_PLASTIC.ingot(), 16),
|
||||
new ComparableStack(ModItems.coil_advanced_torus, 16),
|
||||
new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR),
|
||||
new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BASIC)
|
||||
}, 400);
|
||||
|
||||
@ -11,19 +11,19 @@ import net.minecraft.item.ItemStack;
|
||||
|
||||
public class FusionRecipes {
|
||||
|
||||
public static HashMap<FluidType, Integer> chances = new HashMap();
|
||||
public static HashMap<FluidType, Integer> delays = new HashMap();
|
||||
static {
|
||||
chances.put(Fluids.PLASMA_DT, 1200);
|
||||
chances.put(Fluids.PLASMA_DH3, 600);
|
||||
chances.put(Fluids.PLASMA_HD, 1200);
|
||||
chances.put(Fluids.PLASMA_HT, 1200);
|
||||
chances.put(Fluids.PLASMA_XM, 1200);
|
||||
chances.put(Fluids.PLASMA_BF, 150);
|
||||
delays.put(Fluids.PLASMA_DT, 900);
|
||||
delays.put(Fluids.PLASMA_DH3, 600);
|
||||
delays.put(Fluids.PLASMA_HD, 1200);
|
||||
delays.put(Fluids.PLASMA_HT, 900);
|
||||
delays.put(Fluids.PLASMA_XM, 1200);
|
||||
delays.put(Fluids.PLASMA_BF, 150);
|
||||
}
|
||||
|
||||
public static int getByproductChance(FluidType plasma) {
|
||||
Integer chance = chances.get(plasma);
|
||||
return chance != null ? chance : 0;
|
||||
public static int getByproductDelay(FluidType plasma) {
|
||||
Integer delay = delays.get(plasma);
|
||||
return delay != null ? delay : 0;
|
||||
}
|
||||
|
||||
public static HashMap<FluidType, Integer> levels = new HashMap();
|
||||
|
||||
@ -3,7 +3,7 @@ package com.hbm.lib;
|
||||
public class RefStrings {
|
||||
public static final String MODID = "hbm";
|
||||
public static final String NAME = "Hbm's Nuclear Tech Mod";
|
||||
public static final String VERSION = "1.0.27 BETA (5020)";
|
||||
public static final String VERSION = "1.0.27 BETA (5026)";
|
||||
//HBM's Beta Naming Convention:
|
||||
//V T (X)
|
||||
//V -> next release version
|
||||
|
||||
@ -21,9 +21,9 @@ public class ParticleMukeFlash extends EntityFX {
|
||||
|
||||
private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/particle/flare.png");
|
||||
private TextureManager theRenderEngine;
|
||||
|
||||
|
||||
boolean bf;
|
||||
|
||||
|
||||
public ParticleMukeFlash(TextureManager texman, World world, double x, double y, double z, boolean bf) {
|
||||
super(world, x, y, z);
|
||||
this.theRenderEngine = texman;
|
||||
@ -34,55 +34,57 @@ public class ParticleMukeFlash extends EntityFX {
|
||||
public int getFXLayer() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
public void onUpdate() {
|
||||
super.onUpdate();
|
||||
|
||||
if(this.particleAge == 15) {
|
||||
|
||||
//Stem
|
||||
for(double d = 0.0D; d <= 1.8D; d += 0.1) {
|
||||
ParticleMukeCloud cloud = getCloud(theRenderEngine, worldObj, posX, posY, posZ, rand.nextGaussian() * 0.05, d + rand.nextGaussian() * 0.02, rand.nextGaussian() * 0.05);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(cloud);
|
||||
}
|
||||
|
||||
//Ground
|
||||
for(int i = 0; i < 100; i++) {
|
||||
ParticleMukeCloud cloud = getCloud(theRenderEngine, worldObj, posX, posY + 0.5, posZ, rand.nextGaussian() * 0.5, rand.nextInt(5) == 0 ? 0.02 : 0, rand.nextGaussian() * 0.5);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(cloud);
|
||||
}
|
||||
|
||||
//Mush
|
||||
for(int i = 0; i < 75; i++) {
|
||||
double x = rand.nextGaussian() * 0.5;
|
||||
double z = rand.nextGaussian() * 0.5;
|
||||
|
||||
if(x * x + z * z > 1.5) {
|
||||
x *= 0.5;
|
||||
z *= 0.5;
|
||||
}
|
||||
|
||||
double y = 1.8 + (rand.nextDouble() * 3 - 1.5) * (0.75 - (x * x + z * z)) * 0.5;
|
||||
|
||||
ParticleMukeCloud cloud = getCloud(theRenderEngine, worldObj, posX, posY, posZ, x, y + rand.nextGaussian() * 0.02, z);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(cloud);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ParticleMukeCloud getCloud(TextureManager texman, World world, double x, double y, double z, double mx, double my, double mz) {
|
||||
|
||||
if(this.bf) {
|
||||
return new ParticleMukeCloudBF(theRenderEngine, world, x, y, z, mx, my, mz);
|
||||
} else {
|
||||
return new ParticleMukeCloud(theRenderEngine, world, x, y, z, mx, my, mz);
|
||||
}
|
||||
}
|
||||
|
||||
public void onUpdate() {
|
||||
super.onUpdate();
|
||||
|
||||
if(this.particleAge == 15) {
|
||||
|
||||
// Stem
|
||||
for(double d = 0.0D; d <= 1.8D; d += 0.1) {
|
||||
ParticleMukeCloud cloud = getCloud(theRenderEngine, worldObj, posX, posY, posZ, rand.nextGaussian() * 0.05, d + rand.nextGaussian() * 0.02, rand.nextGaussian() * 0.05);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(cloud);
|
||||
}
|
||||
|
||||
// Ground
|
||||
for(int i = 0; i < 100; i++) {
|
||||
ParticleMukeCloud cloud = getCloud(theRenderEngine, worldObj, posX, posY + 0.5, posZ, rand.nextGaussian() * 0.5, rand.nextInt(5) == 0 ? 0.02 : 0, rand.nextGaussian() * 0.5);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(cloud);
|
||||
}
|
||||
|
||||
// Mush
|
||||
for(int i = 0; i < 75; i++) {
|
||||
double x = rand.nextGaussian() * 0.5;
|
||||
double z = rand.nextGaussian() * 0.5;
|
||||
|
||||
if(x * x + z * z > 1.5) {
|
||||
x *= 0.5;
|
||||
z *= 0.5;
|
||||
}
|
||||
|
||||
double y = 1.8 + (rand.nextDouble() * 3 - 1.5) * (0.75 - (x * x + z * z)) * 0.5;
|
||||
|
||||
ParticleMukeCloud cloud = getCloud(theRenderEngine, worldObj, posX, posY, posZ, x, y + rand.nextGaussian() * 0.02, z);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(cloud);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ParticleMukeCloud getCloud(TextureManager texman, World world, double x, double y, double z, double mx, double my, double mz) {
|
||||
|
||||
if(this.bf) {
|
||||
return new ParticleMukeCloudBF(theRenderEngine, world, x, y, z, mx, my, mz);
|
||||
} else {
|
||||
return new ParticleMukeCloud(theRenderEngine, world, x, y, z, mx, my, mz);
|
||||
}
|
||||
}
|
||||
|
||||
public void renderParticle(Tessellator tess, float interp, float x, float y, float z, float tx, float tz) {
|
||||
|
||||
|
||||
this.theRenderEngine.bindTexture(texture);
|
||||
|
||||
boolean fog = GL11.glIsEnabled(GL11.GL_FOG);
|
||||
if(fog) GL11.glDisable(GL11.GL_FOG);
|
||||
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
@ -90,40 +92,41 @@ public class ParticleMukeFlash extends EntityFX {
|
||||
GL11.glAlphaFunc(GL11.GL_GREATER, 0);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
|
||||
|
||||
tess.startDrawingQuads();
|
||||
|
||||
|
||||
tess.setNormal(0.0F, 1.0F, 0.0F);
|
||||
tess.setBrightness(240);
|
||||
|
||||
this.particleAlpha = 1 - (((float)this.particleAge + interp) / (float)this.particleMaxAge);
|
||||
|
||||
this.particleAlpha = 1 - (((float) this.particleAge + interp) / (float) this.particleMaxAge);
|
||||
float scale = (this.particleAge + interp) * 3F + 1F;
|
||||
|
||||
|
||||
tess.setColorRGBA_F(1.0F, 0.9F, 0.75F, this.particleAlpha * 0.5F);
|
||||
|
||||
float dX = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) interp - interpPosX);
|
||||
float dY = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) interp - interpPosY);
|
||||
float dZ = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) interp - interpPosZ);
|
||||
|
||||
|
||||
Random rand = new Random();
|
||||
|
||||
for(int i = 0; i < 24; i++) {
|
||||
|
||||
|
||||
rand.setSeed(i * 31 + 1);
|
||||
|
||||
float pX = (float) (dX + rand.nextDouble() * 15 - 7.5);
|
||||
float pY = (float) (dY + rand.nextDouble() * 7.5 - 3.75);
|
||||
float pZ = (float) (dZ + rand.nextDouble() * 15 - 7.5);
|
||||
|
||||
|
||||
tess.addVertexWithUV((double) (pX - x * scale - tx * scale), (double) (pY - y * scale), (double) (pZ - z * scale - tz * scale), 1, 1);
|
||||
tess.addVertexWithUV((double) (pX - x * scale + tx * scale), (double) (pY + y * scale), (double) (pZ - z * scale + tz * scale), 1, 0);
|
||||
tess.addVertexWithUV((double) (pX + x * scale + tx * scale), (double) (pY + y * scale), (double) (pZ + z * scale + tz * scale), 0, 0);
|
||||
tess.addVertexWithUV((double) (pX + x * scale - tx * scale), (double) (pY - y * scale), (double) (pZ + z * scale - tz * scale), 0, 1);
|
||||
}
|
||||
tess.draw();
|
||||
|
||||
|
||||
GL11.glPolygonOffset(0.0F, 0.0F);
|
||||
GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
if(fog) GL11.glEnable(GL11.GL_FOG);
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,6 +34,8 @@ public class ParticleRBMKFlame extends EntityFX {
|
||||
public void renderParticle(Tessellator tess, float interp, float x, float y, float z, float tx, float tz) {
|
||||
|
||||
this.theRenderEngine.bindTexture(getTexture());
|
||||
boolean fog = GL11.glIsEnabled(GL11.GL_FOG);
|
||||
if(fog) GL11.glDisable(GL11.GL_FOG);
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
@ -93,6 +95,7 @@ public class ParticleRBMKFlame extends EntityFX {
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glDisable(GL11.GL_BLEND);
|
||||
GL11.glPopMatrix();
|
||||
if(fog) GL11.glEnable(GL11.GL_FOG);
|
||||
}
|
||||
|
||||
protected ResourceLocation getTexture() {
|
||||
|
||||
@ -2,16 +2,20 @@ package com.hbm.render.tileentity;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.blocks.machine.Floodlight.TileEntityFloodlight;
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.render.item.ItemRenderBase;
|
||||
import com.hbm.render.loader.HFRWavefrontObject;
|
||||
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.IItemRenderer;
|
||||
import net.minecraftforge.client.model.IModelCustom;
|
||||
|
||||
public class RenderFloodlight extends TileEntitySpecialRenderer {
|
||||
public class RenderFloodlight extends TileEntitySpecialRenderer implements IItemRendererProvider {
|
||||
|
||||
public static final IModelCustom floodlight = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/blocks/floodlight.obj"));
|
||||
public static final ResourceLocation tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/floodlight.png");
|
||||
@ -62,4 +66,26 @@ public class RenderFloodlight extends TileEntitySpecialRenderer {
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItemForRenderer() {
|
||||
return Item.getItemFromBlock(ModBlocks.floodlight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemRenderer getRenderer() {
|
||||
return new ItemRenderBase( ) {
|
||||
public void renderInventory() {
|
||||
GL11.glTranslated(0, -1.5, 0);
|
||||
GL11.glScaled(6.5, 6.5, 6.5);
|
||||
}
|
||||
public void renderCommon() {
|
||||
bindTexture(tex);
|
||||
floodlight.renderPart("Base");
|
||||
GL11.glTranslated(0, 0.5, 0);
|
||||
GL11.glRotatef(-30, 0, 0, 1);
|
||||
GL11.glTranslated(0, -0.5, 0);
|
||||
floodlight.renderPart("Lights");
|
||||
floodlight.renderPart("Lamps");
|
||||
}};
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,6 +65,7 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece
|
||||
|
||||
public int progress;
|
||||
public static final int duration = 100;
|
||||
public long totalRuntime;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int blanket;
|
||||
@ -121,11 +122,9 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece
|
||||
power -= powerReq;
|
||||
|
||||
if(plasma.getFill() > 0) {
|
||||
|
||||
int chance = FusionRecipes.getByproductChance(plasma.getTankType());
|
||||
|
||||
if(chance > 0 && worldObj.rand.nextInt(chance) == 0)
|
||||
produceByproduct();
|
||||
this.totalRuntime++;
|
||||
int delay = FusionRecipes.getByproductDelay(plasma.getTankType());
|
||||
if(delay > 0 && totalRuntime % delay == 0) produceByproduct();
|
||||
}
|
||||
|
||||
if(plasma.getFill() > 0 && this.getShield() != 0) {
|
||||
@ -402,34 +401,14 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece
|
||||
|
||||
@Override
|
||||
public void handleButtonPacket(int value, int meta) {
|
||||
|
||||
if(meta == 0) {
|
||||
this.isOn = !this.isOn;
|
||||
}
|
||||
if(meta == 0) this.isOn = !this.isOn;
|
||||
}
|
||||
|
||||
public long getPowerScaled(long i) {
|
||||
return (power * i) / maxPower;
|
||||
}
|
||||
|
||||
public long getProgressScaled(long i) {
|
||||
return (progress * i) / duration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPower(long i) {
|
||||
this.power = i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getPower() {
|
||||
return power;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getMaxPower() {
|
||||
return maxPower;
|
||||
}
|
||||
public long getPowerScaled(long i) { return (power * i) / maxPower; }
|
||||
public long getProgressScaled(long i) { return (progress * i) / duration; }
|
||||
@Override public void setPower(long i) { this.power = i; }
|
||||
@Override public long getPower() { return power; }
|
||||
@Override public long getMaxPower() { return maxPower; }
|
||||
|
||||
@Override
|
||||
public void setFillForSync(int fill, int index) {
|
||||
@ -539,6 +518,7 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece
|
||||
|
||||
this.power = nbt.getLong("power");
|
||||
this.isOn = nbt.getBoolean("isOn");
|
||||
this.totalRuntime = nbt.getLong("totalRuntime");
|
||||
|
||||
tanks[0].readFromNBT(nbt, "water");
|
||||
tanks[1].readFromNBT(nbt, "steam");
|
||||
@ -551,6 +531,7 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece
|
||||
|
||||
nbt.setLong("power", this.power);
|
||||
nbt.setBoolean("isOn", isOn);
|
||||
nbt.setLong("totalRuntime", this.totalRuntime);
|
||||
|
||||
tanks[0].writeToNBT(nbt, "water");
|
||||
tanks[1].writeToNBT(nbt, "steam");
|
||||
|
||||
@ -32,7 +32,6 @@ import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.WeightedRandom;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
@ -237,15 +236,33 @@ public class TileEntitySILEX extends TileEntityMachineBase implements IFluidAcce
|
||||
if(progress >= processTime) {
|
||||
|
||||
currentFill -= recipe.fluidConsumed;
|
||||
|
||||
int totalWeight = 0;
|
||||
for(WeightedRandomObject weighted : recipe.outputs) totalWeight += weighted.itemWeight;
|
||||
this.recipeIndex %= Math.max(totalWeight, 1);
|
||||
|
||||
int weight = 0;
|
||||
|
||||
for(WeightedRandomObject weighted : recipe.outputs) {
|
||||
weight += weighted.itemWeight;
|
||||
|
||||
if(this.recipeIndex < weight) {
|
||||
slots[4] = weighted.asStack().copy();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ItemStack out = ((WeightedRandomObject) WeightedRandom.getRandomItem(worldObj.rand, recipe.outputs)).asStack();
|
||||
slots[4] = out.copy();
|
||||
progress = 0;
|
||||
this.markDirty();
|
||||
|
||||
this.recipeIndex += PRIME;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static final int PRIME = 137;
|
||||
public int recipeIndex = 0;
|
||||
|
||||
private void dequeue() {
|
||||
|
||||
@ -295,6 +312,7 @@ public class TileEntitySILEX extends TileEntityMachineBase implements IFluidAcce
|
||||
super.readFromNBT(nbt);
|
||||
this.tank.readFromNBT(nbt, "tank");
|
||||
this.currentFill = nbt.getInteger("fill");
|
||||
this.recipeIndex = nbt.getInteger("recipeIndex");
|
||||
this.mode = EnumWavelengths.valueOf(nbt.getString("mode"));
|
||||
|
||||
if(this.currentFill > 0) {
|
||||
@ -307,6 +325,7 @@ public class TileEntitySILEX extends TileEntityMachineBase implements IFluidAcce
|
||||
super.writeToNBT(nbt);
|
||||
this.tank.writeToNBT(nbt, "tank");
|
||||
nbt.setInteger("fill", this.currentFill);
|
||||
nbt.setInteger("recipeIndex", this.recipeIndex);
|
||||
nbt.setString("mode", mode.toString());
|
||||
|
||||
if(this.current != null) {
|
||||
|
||||
@ -128,7 +128,7 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements
|
||||
double availableWater = this.water;
|
||||
double availableSpace = this.maxSteam - this.steam;
|
||||
|
||||
int processedWater = (int)Math.floor(Math.min(availableHeat, Math.min(availableWater, availableSpace)) * RBMKDials.getReaSimBoilerSpeed(worldObj));
|
||||
int processedWater = (int) Math.floor(Math.min(availableHeat, Math.min(availableWater, availableSpace)) * RBMKDials.getReaSimBoilerSpeed(worldObj));
|
||||
|
||||
this.water -= processedWater;
|
||||
this.steam += processedWater;
|
||||
|
||||
@ -22,7 +22,9 @@ public class TileEntityConverterHeRf extends TileEntityLoadedBase implements IEn
|
||||
|
||||
public long power;
|
||||
public final long maxPower = 5_000_000;
|
||||
public static long ratio = 5;
|
||||
public static long heInput = 1;
|
||||
public static long rfOutput = 5;
|
||||
public static double inputDecay = 0.05;
|
||||
public EnergyStorage storage = new EnergyStorage(1_000_000, 1_000_000, 1_000_000);
|
||||
|
||||
@Override
|
||||
@ -30,10 +32,10 @@ public class TileEntityConverterHeRf extends TileEntityLoadedBase implements IEn
|
||||
|
||||
if (!worldObj.isRemote) {
|
||||
|
||||
long rfCreated = Math.min(storage.getMaxEnergyStored() - storage.getEnergyStored(), power / ratio);
|
||||
this.power -= rfCreated * ratio;
|
||||
long rfCreated = Math.min(storage.getMaxEnergyStored() - storage.getEnergyStored(), power / rfOutput * heInput);
|
||||
this.power -= rfCreated * rfOutput / heInput;
|
||||
this.storage.setEnergyStored((int) (storage.getEnergyStored() + rfCreated));
|
||||
if(power > 0) this.power *= 0.95;
|
||||
if(power > 0) this.power *= (1D - inputDecay);
|
||||
if(rfCreated > 0) this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this);
|
||||
|
||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||
@ -84,16 +86,20 @@ public class TileEntityConverterHeRf extends TileEntityLoadedBase implements IEn
|
||||
|
||||
@Override
|
||||
public String getConfigName() {
|
||||
return "He->RfConverter";
|
||||
return "HEToRFConverter";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readIfPresent(JsonObject obj) {
|
||||
ratio = IConfigurableMachine.grab(obj, "L:Rf/He ratio", ratio);
|
||||
heInput = IConfigurableMachine.grab(obj, "L:HEUsed", heInput);
|
||||
rfOutput = IConfigurableMachine.grab(obj, "L:RFCreated", rfOutput);
|
||||
inputDecay = IConfigurableMachine.grab(obj, "D:inputDecay", inputDecay);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeConfig(JsonWriter writer) throws IOException {
|
||||
writer.name("L:Rf/He ratio").value(ratio);
|
||||
writer.name("L:HEUsed").value(heInput);
|
||||
writer.name("L:RFCreated").value(rfOutput);
|
||||
writer.name("D:inputDecay").value(inputDecay);
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,7 +17,9 @@ public class TileEntityConverterRfHe extends TileEntityLoadedBase implements IEn
|
||||
|
||||
public long power;
|
||||
public final long maxPower = 5_000_000;
|
||||
public static long ratio = 5;
|
||||
public static long rfInput = 5;
|
||||
public static long heOutput = 1;
|
||||
public static double inputDecay = 0.05;
|
||||
|
||||
public EnergyStorage storage = new EnergyStorage(1_000_000, 1_000_000, 1_000_000);
|
||||
|
||||
@ -26,10 +28,10 @@ public class TileEntityConverterRfHe extends TileEntityLoadedBase implements IEn
|
||||
|
||||
if (!worldObj.isRemote) {
|
||||
|
||||
long rfCreated = Math.min(storage.getEnergyStored(), (maxPower - power) / ratio);
|
||||
long rfCreated = Math.min(storage.getEnergyStored(), (maxPower - power) * heOutput / rfInput);
|
||||
storage.setEnergyStored((int) (storage.getEnergyStored() - rfCreated));
|
||||
power += rfCreated * ratio;
|
||||
if(storage.getEnergyStored() > 0) storage.extractEnergy((int) Math.ceil(storage.getEnergyStored() * 0.05), false);
|
||||
power += rfCreated * rfInput / heOutput;
|
||||
if(storage.getEnergyStored() > 0) storage.extractEnergy((int) Math.ceil(storage.getEnergyStored() * inputDecay), false);
|
||||
if(rfCreated > 0) this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this);
|
||||
|
||||
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||
@ -66,16 +68,20 @@ public class TileEntityConverterRfHe extends TileEntityLoadedBase implements IEn
|
||||
|
||||
@Override
|
||||
public String getConfigName() {
|
||||
return "Rf->HeConverter";
|
||||
return "RFToHEConverter";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readIfPresent(JsonObject obj) {
|
||||
ratio = IConfigurableMachine.grab(obj, "L:Rf/He ratio", ratio);
|
||||
rfInput = IConfigurableMachine.grab(obj, "L:RFUsed", rfInput);
|
||||
heOutput = IConfigurableMachine.grab(obj, "L:HECreated", heOutput);
|
||||
inputDecay = IConfigurableMachine.grab(obj, "D:inputDecay", inputDecay);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeConfig(JsonWriter writer) throws IOException {
|
||||
writer.name("L:Rf/He ratio").value(ratio);
|
||||
writer.name("L:RFUsed").value(rfInput);
|
||||
writer.name("L:HECreated").value(heOutput);
|
||||
writer.name("D:inputDecay").value(inputDecay);
|
||||
}
|
||||
}
|
||||
|
||||
@ -651,8 +651,8 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple
|
||||
if(targetMachines) {
|
||||
|
||||
if(e instanceof IRadarDetectableNT && !((IRadarDetectableNT)e).canBeSeenBy(this)) return false;
|
||||
if(e instanceof EntityMissileBaseNT) return true;
|
||||
if(e instanceof EntityMissileCustom) return true;
|
||||
if(e instanceof EntityMissileBaseNT) return e.motionY < 0;
|
||||
if(e instanceof EntityMissileCustom) return e.motionY < 0;
|
||||
if(e instanceof EntityMinecart) return true;
|
||||
if(e instanceof EntityRailCarBase) return true;
|
||||
if(e instanceof EntityBomber) return true;
|
||||
|
||||
@ -4080,6 +4080,7 @@ tile.fireworks.color=Farbe: %s
|
||||
tile.fissure_bomb.name=Geofissur-Bombe
|
||||
tile.flame_war.name=Flamewar aus der Box
|
||||
tile.float_bomb.name=Schwebebombe
|
||||
tile.floodlight.name=Elektrischer Scheinwerfer
|
||||
tile.fluid_duct.name=Universelles Flüssigkeitsrohr (Veraltet)
|
||||
tile.fluid_duct_box.name=Universelles Flüssigkeitsrohr (Boxrohr)
|
||||
tile.fluid_duct_exhaust.name=Abgasrohr
|
||||
|
||||
@ -5151,6 +5151,7 @@ tile.fireworks.color=Color: %s
|
||||
tile.fissure_bomb.name=Fissure Bomb
|
||||
tile.flame_war.name=Flame War in a Box
|
||||
tile.float_bomb.name=Levitation Bomb
|
||||
tile.floodlight.name=Powered Floodlight
|
||||
tile.fluid_duct.name=Universal Fluid Duct (Deprecated)
|
||||
tile.fluid_duct_box.name=Universal Fluid Duct (Boxduct)
|
||||
tile.fluid_duct_exhaust.name=Exhaust Pipe
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user