mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
the foxes have taken over, torex tweaks
This commit is contained in:
parent
aa8e492610
commit
52825d9d9e
11
changelog
11
changelog
@ -3,6 +3,7 @@
|
||||
* The final missing door from 1.12, remade from scratch
|
||||
* Comes with a brand-new model that fits perfectly over 3x3 missile launch tubes
|
||||
* Has a 5x5 frame
|
||||
* Can be opened and closed with a detonator
|
||||
* Molysite
|
||||
* Found in basalt from volcanos
|
||||
* Can be combination-smelted into iron and chlorine
|
||||
@ -21,6 +22,15 @@
|
||||
* Removed the "nerve agent" hazard class because no gas used it
|
||||
* Fissures now continuously spawn volcanic lava, making basalt renewable without having an entire volcano
|
||||
* Volcanic lava now turns diamond ore into gem-rich basalt
|
||||
* Mushroom clouds have been tweaked
|
||||
* Their scale no longer scales linearly, but rather with a square root function, this prevents tsar clouds from being so huge that the top fails to render due to clipping through the skybox
|
||||
* Their default scale is now somewhat larger
|
||||
* The flash scale has been increased
|
||||
* Their general scaling is now consistent, larger clouds will no longer be chubby with a comically small ring
|
||||
* Shockwave particles now have momentum, making them sweep over the landscape, as well as being 1.5x denser and slightly larger
|
||||
* Effect shamelessly stolen from NTM-EE
|
||||
* Outer condensation rings' spawning is no longer fixed, the time now scales with the size
|
||||
* The inner condensation ring's spawn time is also now based on scale, which means larger clouds will no longer end up with comically thin rings due to not spawning enough cloudlets
|
||||
|
||||
## Fixed
|
||||
* Fixed sellafite emerald ore being oredicted as emerald dust
|
||||
@ -38,3 +48,4 @@
|
||||
* Fixed fallout layers being able to generate below roofs
|
||||
* Fixed exposure chamber not saving anything to NBT besides slots
|
||||
* Fixed crash caused by wearing the full PaA set and then putting on an HEV helmet (why would anyone ever do this??)
|
||||
* Fixed large doors only being lockable by clicking on the core block
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
mod_version=1.0.27
|
||||
# Empty build number makes a release type
|
||||
mod_build_number=4845
|
||||
mod_build_number=4851
|
||||
|
||||
credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\
|
||||
\ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\
|
||||
|
||||
@ -1235,10 +1235,8 @@ public class ModBlocks {
|
||||
|
||||
public static Block volcanic_lava_block;
|
||||
public static Fluid volcanic_lava_fluid;
|
||||
public static final Material fluidvolcanic = (new MaterialLiquid(MapColor.redColor));
|
||||
public static Block rad_lava_block;
|
||||
public static Fluid rad_lava_fluid;
|
||||
public static final Material fluidradlava = (new MaterialLiquid(MapColor.redColor));
|
||||
|
||||
public static Block sulfuric_acid_block;
|
||||
public static Fluid sulfuric_acid_fluid;
|
||||
|
||||
@ -4,12 +4,17 @@ import java.util.Random;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.util.ContaminationUtil;
|
||||
import com.hbm.util.ContaminationUtil.ContaminationType;
|
||||
import com.hbm.util.ContaminationUtil.HazardType;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
@ -37,6 +42,11 @@ public class RadBlock extends VolcanicBlock {
|
||||
return (side == 0 || side == 1) ? stillIconRad : flowingIconRad;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) {
|
||||
if(entity instanceof EntityLivingBase) ContaminationUtil.contaminate((EntityLivingBase) entity, HazardType.RADIATION, ContaminationType.CREATIVE, 5F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSolidify(World world, int x, int y, int z, int lavaCount, int basaltCount, Random rand) {
|
||||
int r = rand.nextInt(400);
|
||||
|
||||
@ -3,7 +3,9 @@ package com.hbm.blocks.generic;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.blocks.BlockDummyable;
|
||||
import com.hbm.interfaces.IBomb;
|
||||
import com.hbm.items.special.ItemDoorSkin;
|
||||
import com.hbm.items.tool.ItemLock;
|
||||
import com.hbm.tileentity.DoorDecl;
|
||||
import com.hbm.tileentity.TileEntityDoorGeneric;
|
||||
import com.hbm.util.fauxpointtwelve.BlockPos;
|
||||
@ -20,7 +22,7 @@ import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class BlockDoorGeneric extends BlockDummyable {
|
||||
public class BlockDoorGeneric extends BlockDummyable implements IBomb {
|
||||
|
||||
public DoorDecl type;
|
||||
|
||||
@ -45,6 +47,22 @@ public class BlockDoorGeneric extends BlockDummyable {
|
||||
public int getOffset(){
|
||||
return type.getBlockOffset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BombReturnCode explode(World world, int x, int y, int z) {
|
||||
int[] pos1 = findCore(world, x, y, z);
|
||||
if(pos1 == null) return BombReturnCode.ERROR_INCOMPATIBLE;
|
||||
TileEntityDoorGeneric door = (TileEntityDoorGeneric) world.getTileEntity(pos1[0], pos1[1], pos1[2]);
|
||||
if(door != null) {
|
||||
DoorDecl decl = door.getDoorType();
|
||||
if(!decl.remoteControllable()) return BombReturnCode.ERROR_INCOMPATIBLE;
|
||||
if(door.tryToggle(null)) {
|
||||
return BombReturnCode.TRIGGERED;
|
||||
}
|
||||
}
|
||||
|
||||
return BombReturnCode.ERROR_INCOMPATIBLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer playerIn, int side, float hitX, float hitY, float hitZ){
|
||||
@ -148,5 +166,4 @@ public class BlockDoorGeneric extends BlockDummyable {
|
||||
}
|
||||
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1);
|
||||
}
|
||||
|
||||
}
|
||||
@ -100,7 +100,8 @@ public class BlockGlyphidSpawner extends BlockContainer implements IBlockMulti {
|
||||
if(!worldObj.isRemote && this.worldObj.difficultySetting != EnumDifficulty.PEACEFUL) {
|
||||
|
||||
if(initialSpawn || worldObj.getTotalWorldTime() % MobConfig.swarmCooldown == 0) {
|
||||
|
||||
|
||||
initialSpawn = false;
|
||||
int count = 0;
|
||||
|
||||
for(Object e : worldObj.loadedEntityList) {
|
||||
@ -126,8 +127,6 @@ public class BlockGlyphidSpawner extends BlockContainer implements IBlockMulti {
|
||||
if(this.getBlockMetadata() == 1) scout.getDataWatcher().updateObject(EntityGlyphid.DW_SUBTYPE, (byte) EntityGlyphid.TYPE_INFECTED);
|
||||
trySpawnEntity(scout);
|
||||
}
|
||||
|
||||
initialSpawn = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -232,6 +232,8 @@ public class BlockKeyhole extends BlockStone {
|
||||
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.wd40), 10));
|
||||
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.scrumpy), 10));
|
||||
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.wild_p), 5));
|
||||
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.card_aos), 5));
|
||||
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.card_qos), 5));
|
||||
|
||||
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.starmetal_sword), 5));
|
||||
pedestalItems.add(new WeightedRandomObject(new ItemStack(ModItems.radaway_flush), 5));
|
||||
|
||||
@ -2,6 +2,7 @@ package com.hbm.entity.effect;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.hbm.util.BobMathUtil;
|
||||
import com.hbm.util.TrackerUtil;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@ -53,7 +54,7 @@ public class EntityNukeTorex extends Entity {
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
|
||||
double s = this.getScale();
|
||||
double s = 1.5; //this.getScale();
|
||||
double cs = 1.5;
|
||||
int maxAge = this.getMaxAge();
|
||||
|
||||
@ -84,61 +85,61 @@ public class EntityNukeTorex extends Entity {
|
||||
double x = posX + rand.nextGaussian() * range;
|
||||
double z = posZ + rand.nextGaussian() * range;
|
||||
Cloudlet cloud = new Cloudlet(x, lastSpawnY, z, (float)(rand.nextDouble() * 2D * Math.PI), 0, lifetime);
|
||||
cloud.setScale(1F + this.ticksExisted * 0.005F * (float) s, 5F * (float) cs);
|
||||
cloud.setScale(1F + this.ticksExisted * 0.005F * (float) cs, 5F * (float) cs);
|
||||
cloudlets.add(cloud);
|
||||
}
|
||||
|
||||
// spawn shock clouds
|
||||
if(ticksExisted < 100) {
|
||||
if(ticksExisted < 150) {
|
||||
|
||||
int cloudCount = ticksExisted * 5;
|
||||
int shockLife = Math.max(300 - ticksExisted * 20, 50);
|
||||
|
||||
for(int i = 0; i < cloudCount; i++) {
|
||||
Vec3 vec = Vec3.createVectorHelper((ticksExisted * 2 + rand.nextDouble()) * 2, 0, 0);
|
||||
Vec3 vec = Vec3.createVectorHelper((ticksExisted * 1.5 + rand.nextDouble()) * 1.5, 0, 0);
|
||||
float rot = (float) (Math.PI * 2 * rand.nextDouble());
|
||||
vec.rotateAroundY(rot);
|
||||
this.cloudlets.add(new Cloudlet(vec.xCoord + posX, worldObj.getHeightValue((int) (vec.xCoord + posX) + 1, (int) (vec.zCoord + posZ)), vec.zCoord + posZ, rot, 0, shockLife)
|
||||
.setScale(5F, 2F)
|
||||
.setMotion(0));
|
||||
this.cloudlets.add(new Cloudlet(vec.xCoord + posX, worldObj.getHeightValue((int) (vec.xCoord + posX) + 1, (int) (vec.zCoord + posZ)), vec.zCoord + posZ, rot, 0, shockLife, TorexType.SHOCK)
|
||||
.setScale(7F, 2F)
|
||||
.setMotion(ticksExisted > 15 ? 0.75 : 0));
|
||||
}
|
||||
}
|
||||
|
||||
// spawn ring clouds
|
||||
if(ticksExisted < 200) {
|
||||
if(ticksExisted < 130 * s) {
|
||||
lifetime *= s;
|
||||
for(int i = 0; i < 2; i++) {
|
||||
Cloudlet cloud = new Cloudlet(posX, posY + coreHeight, posZ, (float)(rand.nextDouble() * 2D * Math.PI), 0, lifetime, TorexType.RING);
|
||||
cloud.setScale(1F + this.ticksExisted * 0.0025F * (float) (cs * s), 3F * (float) (cs * s));
|
||||
cloud.setScale(1F + this.ticksExisted * 0.0025F * (float) (cs * cs), 3F * (float) (cs * cs));
|
||||
cloudlets.add(cloud);
|
||||
}
|
||||
}
|
||||
|
||||
// spawn condensation clouds
|
||||
if(ticksExisted > 200 && ticksExisted < 600) {
|
||||
if(ticksExisted > 130 * s && ticksExisted < 600 * s) {
|
||||
|
||||
for(int i = 0; i < 20; i++) {
|
||||
for(int j = 0; j < 4; j++) {
|
||||
float angle = (float) (Math.PI * 2 * rand.nextDouble());
|
||||
Vec3 vec = Vec3.createVectorHelper(torusWidth + rollerSize * 3, 0, 0);
|
||||
Vec3 vec = Vec3.createVectorHelper(torusWidth + rollerSize * (3 + rand.nextDouble()), 0, 0);
|
||||
vec.rotateAroundZ((float) (Math.PI / 45 * j));
|
||||
vec.rotateAroundY(angle);
|
||||
Cloudlet cloud = new Cloudlet(posX + vec.xCoord, posY + coreHeight - 5 + j * s, posZ + vec.zCoord, angle, 0, (int) ((20 + ticksExisted / 10) * (1 + rand.nextDouble() * 0.1)), TorexType.CONDENSATION);
|
||||
cloud.setScale(0.125F * (float) (cs * s), 3F * (float) (cs * s));
|
||||
cloud.setScale(0.125F * (float) (cs), 3F * (float) (cs));
|
||||
cloudlets.add(cloud);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(ticksExisted > 300 && ticksExisted < 600) {
|
||||
if(ticksExisted > 200 * s && ticksExisted < 600 * s) {
|
||||
|
||||
for(int i = 0; i < 20; i++) {
|
||||
for(int j = 0; j < 4; j++) {
|
||||
float angle = (float) (Math.PI * 2 * rand.nextDouble());
|
||||
Vec3 vec = Vec3.createVectorHelper(torusWidth + rollerSize * 2, 0, 0);
|
||||
Vec3 vec = Vec3.createVectorHelper(torusWidth + rollerSize * (3 + rand.nextDouble() * 0.5), 0, 0);
|
||||
vec.rotateAroundZ((float) (Math.PI / 45 * j));
|
||||
vec.rotateAroundY(angle);
|
||||
Cloudlet cloud = new Cloudlet(posX + vec.xCoord, posY + coreHeight + 25 + j * s, posZ + vec.zCoord, angle, 0, (int) ((20 + ticksExisted / 10) * (1 + rand.nextDouble() * 0.1)), TorexType.CONDENSATION);
|
||||
cloud.setScale(0.125F * (float) (cs * s), 3F * (float) (cs * s));
|
||||
Cloudlet cloud = new Cloudlet(posX + vec.xCoord, posY + coreHeight + 25 + j * cs, posZ + vec.zCoord, angle, 0, (int) ((20 + ticksExisted / 10) * (1 + rand.nextDouble() * 0.1)), TorexType.CONDENSATION);
|
||||
cloud.setScale(0.125F * (float) (cs), 3F * (float) (cs));
|
||||
cloudlets.add(cloud);
|
||||
}
|
||||
}
|
||||
@ -147,12 +148,12 @@ public class EntityNukeTorex extends Entity {
|
||||
for(Cloudlet cloud : cloudlets) {
|
||||
cloud.update();
|
||||
}
|
||||
coreHeight += 0.15/* * s*/;
|
||||
torusWidth += 0.05/* * s*/;
|
||||
coreHeight += 0.15 / s;
|
||||
torusWidth += 0.05 / s;
|
||||
rollerSize = torusWidth * 0.35;
|
||||
convectionHeight = coreHeight + rollerSize;
|
||||
|
||||
int maxHeat = (int) (50 * s);
|
||||
int maxHeat = (int) (50 * cs);
|
||||
heat = maxHeat - Math.pow((maxHeat * this.ticksExisted) / maxAge, 1);
|
||||
|
||||
cloudlets.removeIf(x -> x.isDead);
|
||||
@ -298,6 +299,14 @@ public class EntityNukeTorex extends Entity {
|
||||
this.motionX = convection.xCoord * factor + lift.xCoord * (1D - factor);
|
||||
this.motionY = convection.yCoord * factor + lift.yCoord * (1D - factor);
|
||||
this.motionZ = convection.zCoord * factor + lift.zCoord * (1D - factor);
|
||||
} else if(this.type == TorexType.SHOCK) {
|
||||
|
||||
double factor = MathHelper.clamp_double((this.posY - EntityNukeTorex.this.posY) / EntityNukeTorex.this.coreHeight, 0, 1);
|
||||
Vec3 motion = Vec3.createVectorHelper(1, 0, 0);
|
||||
motion.rotateAroundY(this.angle);
|
||||
this.motionX = motion.xCoord * factor;
|
||||
this.motionY = motion.yCoord * factor;
|
||||
this.motionZ = motion.zCoord * factor;
|
||||
} else if(this.type == TorexType.RING) {
|
||||
Vec3 motion = getRingMotion(simPosX, simPosZ);
|
||||
this.motionX = motion.xCoord;
|
||||
@ -321,30 +330,14 @@ public class EntityNukeTorex extends Entity {
|
||||
|
||||
private Vec3 getCondensationMotion() {
|
||||
Vec3 delta = Vec3.createVectorHelper(posX - EntityNukeTorex.this.posX, 0, posZ - EntityNukeTorex.this.posZ);
|
||||
double speed = 0.00002 * EntityNukeTorex.this.getScale() * EntityNukeTorex.this.ticksExisted;
|
||||
double speed = 0.00002 * EntityNukeTorex.this.ticksExisted;
|
||||
delta.xCoord *= speed;
|
||||
//delta.yCoord *= speed * 0.75 * EntityNukeTorex.this.getScale();
|
||||
delta.zCoord *= speed;
|
||||
return delta;
|
||||
}
|
||||
|
||||
private Vec3 getRingMotion(double simPosX, double simPosZ) {
|
||||
|
||||
/*Vec3 targetPos = Vec3.createVectorHelper(
|
||||
(EntityNukeTorex.this.posX + torusWidth * 1),
|
||||
(EntityNukeTorex.this.posY + coreHeight * 0.5),
|
||||
EntityNukeTorex.this.posZ);
|
||||
|
||||
Vec3 delta = Vec3.createVectorHelper(targetPos.xCoord - simPosX, targetPos.yCoord - this.posY, targetPos.zCoord - simPosZ);
|
||||
|
||||
double speed = 0.125D;
|
||||
delta.xCoord *= speed;
|
||||
delta.yCoord *= speed;
|
||||
delta.zCoord *= speed;
|
||||
|
||||
delta.rotateAroundY(this.angle);
|
||||
return delta;*/
|
||||
|
||||
if(simPosX > EntityNukeTorex.this.posX + torusWidth * 2)
|
||||
return Vec3.createVectorHelper(0, 0, 0);
|
||||
|
||||
@ -392,9 +385,6 @@ public class EntityNukeTorex extends Entity {
|
||||
/* simulated on a 2D-plane along the X/Y axis */
|
||||
private Vec3 getConvectionMotion(double simPosX, double simPosZ) {
|
||||
|
||||
if(simPosX > EntityNukeTorex.this.posX + torusWidth * 2)
|
||||
return Vec3.createVectorHelper(0, 0, 0);
|
||||
|
||||
/* the position of the torus' outer ring center */
|
||||
Vec3 torusPos = Vec3.createVectorHelper(
|
||||
(EntityNukeTorex.this.posX + torusWidth),
|
||||
@ -480,10 +470,19 @@ public class EntityNukeTorex extends Entity {
|
||||
}
|
||||
|
||||
public Vec3 getInterpPos(float interp) {
|
||||
return Vec3.createVectorHelper(
|
||||
float scale = (float) EntityNukeTorex.this.getScale();
|
||||
Vec3 base = Vec3.createVectorHelper(
|
||||
prevPosX + (posX - prevPosX) * interp,
|
||||
prevPosY + (posY - prevPosY) * interp,
|
||||
prevPosZ + (posZ - prevPosZ) * interp);
|
||||
|
||||
if(this.type != TorexType.SHOCK) { //no rescale for the shockwave as this messes with the positions
|
||||
base.xCoord = ((base.xCoord) - EntityNukeTorex.this.posX) * scale + EntityNukeTorex.this.posX;
|
||||
base.yCoord = ((base.yCoord) - EntityNukeTorex.this.posY) * scale + EntityNukeTorex.this.posY;
|
||||
base.zCoord = ((base.zCoord) - EntityNukeTorex.this.posZ) * scale + EntityNukeTorex.this.posZ;
|
||||
}
|
||||
|
||||
return base;
|
||||
}
|
||||
|
||||
public Vec3 getInterpColor(float interp) {
|
||||
@ -514,7 +513,9 @@ public class EntityNukeTorex extends Entity {
|
||||
private float growingScale = 5F;
|
||||
|
||||
public float getScale() {
|
||||
return startingScale + ((float)age / (float)cloudletLife) * growingScale;
|
||||
float base = startingScale + ((float)age / (float)cloudletLife) * growingScale;
|
||||
if(this.type != TorexType.SHOCK) base *= (float) EntityNukeTorex.this.getScale();
|
||||
return base;
|
||||
}
|
||||
|
||||
public Cloudlet setScale(float start, float grow) {
|
||||
@ -533,6 +534,7 @@ public class EntityNukeTorex extends Entity {
|
||||
|
||||
public static enum TorexType {
|
||||
STANDARD,
|
||||
SHOCK,
|
||||
RING,
|
||||
CONDENSATION
|
||||
}
|
||||
@ -548,14 +550,14 @@ public class EntityNukeTorex extends Entity {
|
||||
}
|
||||
|
||||
public static void statFac(World world, double x, double y, double z, float scale) {
|
||||
EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float(scale * 0.01F, 0.5F, 5F));
|
||||
EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float((float) BobMathUtil.squirt(scale * 0.01) * 1.5F, 0.5F, 5F));
|
||||
torex.setPosition(x, y, z);
|
||||
world.spawnEntityInWorld(torex);
|
||||
TrackerUtil.setTrackingRange(world, torex, 1000);
|
||||
}
|
||||
|
||||
public static void statFacBale(World world, double x, double y, double z, float scale) {
|
||||
EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float(scale * 0.01F, 0.5F, 5F)).setType(1);
|
||||
EntityNukeTorex torex = new EntityNukeTorex(world).setScale(MathHelper.clamp_float((float) BobMathUtil.squirt(scale * 0.01) * 1.5F, 0.5F, 5F)).setType(1);
|
||||
torex.setPosition(x, y, z);
|
||||
world.spawnEntityInWorld(torex);
|
||||
TrackerUtil.setTrackingRange(world, torex, 1000);
|
||||
|
||||
@ -223,6 +223,9 @@ public class HazardRegistry {
|
||||
HazardSystem.register(new ItemStack(ModBlocks.sellafield, 1, 3), makeData(RADIATION, 4F));
|
||||
HazardSystem.register(new ItemStack(ModBlocks.sellafield, 1, 4), makeData(RADIATION, 5F));
|
||||
HazardSystem.register(new ItemStack(ModBlocks.sellafield, 1, 5), makeData(RADIATION, 10F));
|
||||
|
||||
HazardSystem.register(new ItemStack(ModBlocks.ore_sellafield_radgem), makeData(RADIATION, 25F));
|
||||
HazardSystem.register(new ItemStack(ModItems.gem_rad), makeData(RADIATION, 25F));
|
||||
|
||||
registerOtherFuel(rod_zirnox, EnumZirnoxType.NATURAL_URANIUM_FUEL.ordinal(), u * rod_dual, wst * rod_dual * 11.5F, false);
|
||||
registerOtherFuel(rod_zirnox, EnumZirnoxType.URANIUM_FUEL.ordinal(), uf * rod_dual, wst * rod_dual * 10F, false);
|
||||
|
||||
@ -2207,6 +2207,8 @@ public class ModItems {
|
||||
public static Item defuser_gold;
|
||||
public static Item ballistic_gauntlet;
|
||||
public static Item night_vision;
|
||||
public static Item card_aos;
|
||||
public static Item card_qos;
|
||||
|
||||
public static Item hazmat_helmet;
|
||||
public static Item hazmat_plate;
|
||||
@ -3452,6 +3454,8 @@ public class ModItems {
|
||||
defuser_gold = new ItemModDefuser().setUnlocalizedName("defuser_gold").setTextureName(RefStrings.MODID + ":defuser_gold");
|
||||
ballistic_gauntlet = new ItemModTwoKick().setUnlocalizedName("ballistic_gauntlet").setTextureName(RefStrings.MODID + ":ballistic_gauntlet");
|
||||
night_vision = new ItemModNightVision().setUnlocalizedName("night_vision").setTextureName(RefStrings.MODID + ":night_vision");
|
||||
card_aos = new ItemModCard().setUnlocalizedName(null).setTextureName(RefStrings.MODID + ":card_aos");
|
||||
card_qos = new ItemModCard().setUnlocalizedName(null).setTextureName(RefStrings.MODID + ":card_qos");
|
||||
|
||||
cap_nuka = new Item().setUnlocalizedName("cap_nuka").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_nuka");
|
||||
cap_quantum = new Item().setUnlocalizedName("cap_quantum").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":cap_quantum");
|
||||
@ -7726,6 +7730,8 @@ public class ModItems {
|
||||
GameRegistry.registerItem(defuser_gold, defuser_gold.getUnlocalizedName());
|
||||
GameRegistry.registerItem(ballistic_gauntlet, ballistic_gauntlet.getUnlocalizedName());
|
||||
GameRegistry.registerItem(night_vision, night_vision.getUnlocalizedName());
|
||||
GameRegistry.registerItem(card_aos, card_aos.getUnlocalizedName());
|
||||
GameRegistry.registerItem(card_qos, card_qos.getUnlocalizedName());
|
||||
|
||||
//Chaos
|
||||
GameRegistry.registerItem(chocolate_milk, chocolate_milk.getUnlocalizedName());
|
||||
|
||||
48
src/main/java/com/hbm/items/armor/ItemModCard.java
Normal file
48
src/main/java/com/hbm/items/armor/ItemModCard.java
Normal file
@ -0,0 +1,48 @@
|
||||
package com.hbm.items.armor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.extprop.HbmPlayerProps;
|
||||
import com.hbm.handler.ArmorModHandler;
|
||||
import com.hbm.items.ModItems;
|
||||
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
import net.minecraftforge.event.entity.living.LivingHurtEvent;
|
||||
|
||||
public class ItemModCard extends ItemArmorMod {
|
||||
|
||||
public ItemModCard() {
|
||||
super(ArmorModHandler.helmet_only, true, false, false, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
|
||||
if(this == ModItems.card_aos) {
|
||||
list.add(EnumChatFormatting.RED + "Top of the line!");
|
||||
list.add(EnumChatFormatting.RED + "Guns now have a 33% chance to not consume ammo.");
|
||||
}
|
||||
if(this == ModItems.card_qos) {
|
||||
list.add(EnumChatFormatting.RED + "Power!");
|
||||
list.add(EnumChatFormatting.RED + "Adds a 33% chance to tank damage with no cap.");
|
||||
}
|
||||
list.add("");
|
||||
super.addInformation(itemstack, player, list, bool);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDesc(List list, ItemStack stack, ItemStack armor) {
|
||||
list.add(EnumChatFormatting.YELLOW + I18n.format("item.night_vision.description.in_armor", stack.getDisplayName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modDamage(LivingHurtEvent event, ItemStack armor) {
|
||||
if(this == ModItems.card_qos && event.entityLiving.getRNG().nextInt(3) == 0 && event.entityLiving instanceof EntityPlayer) {
|
||||
HbmPlayerProps.plink((EntityPlayer) event.entityLiving, "random.break", 0.5F, 1.0F + event.entityLiving.getRNG().nextFloat() * 0.5F);
|
||||
event.ammount = 0;
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -12,30 +12,30 @@ import net.minecraft.util.EnumChatFormatting;
|
||||
import java.util.List;
|
||||
|
||||
public class ItemModNightVision extends ItemArmorMod {
|
||||
public ItemModNightVision() {
|
||||
super(ArmorModHandler.helmet_only, true, false, false, false);
|
||||
}
|
||||
public ItemModNightVision() {
|
||||
super(ArmorModHandler.helmet_only, true, false, false, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
|
||||
list.add(EnumChatFormatting.AQUA + I18n.format("item.night_vision.description.item"));
|
||||
list.add("");
|
||||
super.addInformation(itemstack, player, list, bool);
|
||||
}
|
||||
@Override
|
||||
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) {
|
||||
list.add(EnumChatFormatting.AQUA + I18n.format("item.night_vision.description.item"));
|
||||
list.add("");
|
||||
super.addInformation(itemstack, player, list, bool);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDesc(List list, ItemStack stack, ItemStack armor) {
|
||||
list.add(EnumChatFormatting.YELLOW + I18n.format("item.night_vision.description.in_armor", stack.getDisplayName()));
|
||||
}
|
||||
@Override
|
||||
public void addDesc(List list, ItemStack stack, ItemStack armor) {
|
||||
list.add(EnumChatFormatting.YELLOW + I18n.format("item.night_vision.description.in_armor", stack.getDisplayName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modUpdate(EntityLivingBase entity, ItemStack armor) {
|
||||
if(!entity.worldObj.isRemote && entity instanceof EntityPlayer && armor.getItem() instanceof ArmorFSBPowered && ArmorFSBPowered.hasFSBArmor((EntityPlayer)entity)) {
|
||||
entity.addPotionEffect(new PotionEffect(Potion.nightVision.id, 15 * 20, 0));
|
||||
@Override
|
||||
public void modUpdate(EntityLivingBase entity, ItemStack armor) {
|
||||
if(!entity.worldObj.isRemote && entity instanceof EntityPlayer && armor.getItem() instanceof ArmorFSBPowered && ArmorFSBPowered.hasFSBArmor((EntityPlayer) entity)) {
|
||||
entity.addPotionEffect(new PotionEffect(Potion.nightVision.id, 15 * 20, 0));
|
||||
|
||||
if(entity.getRNG().nextInt(50) == 0) {
|
||||
armor.damageItem(1, entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(entity.getRNG().nextInt(50) == 0) {
|
||||
armor.damageItem(1, entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package com.hbm.items.tool;
|
||||
|
||||
import com.hbm.tileentity.machine.TileEntityDummy;
|
||||
import com.hbm.tileentity.machine.TileEntityLockableBase;
|
||||
import com.hbm.util.CompatExternal;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@ -17,51 +17,29 @@ public class ItemLock extends ItemKeyPin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int i, float f0, float f1, float f2)
|
||||
{
|
||||
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int i, float f0, float f1, float f2) {
|
||||
|
||||
if(this.getPins(stack) != 0) {
|
||||
TileEntity te = world.getTileEntity(x, y, z);
|
||||
|
||||
TileEntity te = CompatExternal.getCoreFromPos(world, x, y, z);
|
||||
|
||||
if(te != null && te instanceof TileEntityLockableBase) {
|
||||
TileEntityLockableBase tile = (TileEntityLockableBase)te;
|
||||
|
||||
TileEntityLockableBase tile = (TileEntityLockableBase) te;
|
||||
|
||||
if(tile.isLocked())
|
||||
return false;
|
||||
|
||||
|
||||
tile.setPins(this.getPins(stack));
|
||||
tile.lock();
|
||||
tile.setMod(lockMod);
|
||||
|
||||
world.playSoundAtEntity(player, "hbm:block.lockHang", 1.0F, 1.0F);
|
||||
world.playSoundAtEntity(player, "hbm:block.lockHang", 1.0F, 1.0F);
|
||||
stack.stackSize--;
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if(te != null && te instanceof TileEntityDummy) {
|
||||
|
||||
TileEntityDummy dummy = (TileEntityDummy)te;
|
||||
TileEntity target = world.getTileEntity(dummy.targetX, dummy.targetY, dummy.targetZ);
|
||||
|
||||
if(target != null && target instanceof TileEntityLockableBase) {
|
||||
TileEntityLockableBase tile = (TileEntityLockableBase)target;
|
||||
|
||||
if(tile.isLocked())
|
||||
return false;
|
||||
|
||||
tile.setPins(this.getPins(stack));
|
||||
tile.lock();
|
||||
tile.setMod(lockMod);
|
||||
|
||||
world.playSoundAtEntity(player, "hbm:block.lockHang", 1.0F, 1.0F);
|
||||
stack.stackSize--;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import java.util.List;
|
||||
|
||||
import com.hbm.entity.effect.EntityNukeTorex;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.util.BobMathUtil;
|
||||
import com.hbm.util.TrackerUtil;
|
||||
import com.hbm.world.WorldUtil;
|
||||
import com.hbm.world.biome.BiomeGenCraterBase;
|
||||
@ -11,6 +12,7 @@ import com.hbm.world.biome.BiomeGenCraterBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
@ -64,11 +66,17 @@ public class ItemWandD extends Item {
|
||||
tom.destructionRange = 600;
|
||||
world.spawnEntityInWorld(tom);*/
|
||||
|
||||
EntityNukeTorex torex = new EntityNukeTorex(world);
|
||||
torex.setPositionAndRotation(pos.blockX, pos.blockY + 1, pos.blockZ, 0, 0);
|
||||
torex.setScale(1.5F);
|
||||
world.spawnEntityInWorld(torex);
|
||||
TrackerUtil.setTrackingRange(world, torex, 1000);
|
||||
List<EntityNukeTorex> del = world.getEntitiesWithinAABB(EntityNukeTorex.class, AxisAlignedBB.getBoundingBox(pos.blockX, pos.blockY + 1, pos.blockZ, pos.blockX, pos.blockY + 1, pos.blockZ).expand(50, 50, 50));
|
||||
|
||||
if(!del.isEmpty()) {
|
||||
for(EntityNukeTorex torex : del) torex.setDead();
|
||||
} else {
|
||||
EntityNukeTorex torex = new EntityNukeTorex(world);
|
||||
torex.setPositionAndRotation(pos.blockX, pos.blockY + 1, pos.blockZ, 0, 0);
|
||||
torex.setScale((float) BobMathUtil.squirt( 1.5 ) * 1.5F);
|
||||
world.spawnEntityInWorld(torex);
|
||||
TrackerUtil.setTrackingRange(world, torex, 1000);
|
||||
}
|
||||
|
||||
/*EntityTracker entitytracker = ((WorldServer) world).getEntityTracker();
|
||||
IntHashMap map = ReflectionHelper.getPrivateValue(EntityTracker.class, entitytracker, "trackedEntityIDs", "field_72794_c");
|
||||
|
||||
@ -6,6 +6,7 @@ import org.lwjgl.input.Mouse;
|
||||
|
||||
import com.hbm.config.GeneralConfig;
|
||||
import com.hbm.entity.projectile.EntityBulletBaseNT;
|
||||
import com.hbm.handler.ArmorModHandler;
|
||||
import com.hbm.handler.BulletConfigSyncingUtil;
|
||||
import com.hbm.handler.BulletConfiguration;
|
||||
import com.hbm.handler.CasingEjector;
|
||||
@ -580,6 +581,7 @@ public class ItemGunBase extends Item implements IHoldableWeapon, IItemHUD, IEqu
|
||||
|
||||
if(hasInfinity(stack, config)) return;
|
||||
if(isTrenchMaster(player) && player.getRNG().nextInt(3) == 0) return;
|
||||
if(hasAoS(player) && player.getRNG().nextInt(3) == 0) return;
|
||||
|
||||
if(config.reloadType != GunConfiguration.RELOAD_NONE) {
|
||||
setMag(stack, getMag(stack) - 1);
|
||||
@ -831,4 +833,13 @@ public class ItemGunBase extends Item implements IHoldableWeapon, IItemHUD, IEqu
|
||||
public static boolean isTrenchMaster(EntityPlayer player) {
|
||||
return player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() == ModItems.trenchmaster_plate && ArmorFSB.hasFSBArmor(player);
|
||||
}
|
||||
|
||||
public static boolean hasAoS(EntityPlayer player) {
|
||||
if(player.inventory.armorInventory[3] != null) {
|
||||
ItemStack[] mods = ArmorModHandler.pryMods(player.inventory.armorInventory[3]);
|
||||
ItemStack helmet = mods[ArmorModHandler.helmet_only];
|
||||
return helmet != null && helmet.getItem() == ModItems.card_aos;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 (4845)";
|
||||
public static final String VERSION = "1.0.27 BETA (4851)";
|
||||
//HBM's Beta Naming Convention:
|
||||
//V T (X)
|
||||
//V -> next release version
|
||||
|
||||
@ -77,7 +77,10 @@ public class RenderTorex extends Render {
|
||||
|
||||
for(Cloudlet cloudlet : cloudlets) {
|
||||
Vec3 vec = cloudlet.getInterpPos(interp);
|
||||
tessellateCloudlet(tess, vec.xCoord - cloud.posX, vec.yCoord - cloud.posY, vec.zCoord - cloud.posZ, cloudlet, interp);
|
||||
double x = vec.xCoord - cloud.posX;
|
||||
double y = vec.yCoord - cloud.posY;
|
||||
double z = vec.zCoord - cloud.posZ;
|
||||
tessellateCloudlet(tess, x, y, z, cloudlet, interp);
|
||||
}
|
||||
|
||||
tess.draw();
|
||||
@ -114,7 +117,7 @@ public class RenderTorex extends Render {
|
||||
float x = (float) (rand.nextGaussian() * 0.5F * cloud.rollerSize);
|
||||
float y = (float) (rand.nextGaussian() * 0.5F * cloud.rollerSize);
|
||||
float z = (float) (rand.nextGaussian() * 0.5F * cloud.rollerSize);
|
||||
tessellateFlash(tess, x, y + cloud.coreHeight, z, (float) (10 * cloud.rollerSize), alpha, interp);
|
||||
tessellateFlash(tess, x, y + cloud.coreHeight, z, (float) (25 * cloud.rollerSize), alpha, interp);
|
||||
}
|
||||
|
||||
tess.draw();
|
||||
|
||||
@ -870,6 +870,7 @@ public abstract class DoorDecl {
|
||||
@Override public String getCloseSoundStart() { return null; };
|
||||
@Override public String getCloseSoundEnd() { return "hbm:door.wgh_big_stop"; };
|
||||
@Override public float getSoundVolume() { return 2; }
|
||||
@Override public boolean remoteControllable() { return true; }
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
@ -1012,6 +1013,10 @@ public abstract class DoorDecl {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public boolean remoteControllable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public float getDoorRangeOpenTime(int ticks, int idx) {
|
||||
return getNormTime(ticks);
|
||||
}
|
||||
|
||||
@ -175,6 +175,8 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase implements IAn
|
||||
|
||||
public boolean tryToggle(EntityPlayer player){
|
||||
|
||||
if(this.isLocked() && player == null) return false;
|
||||
|
||||
if(state == 0 && redstonePower > 0){
|
||||
//Redstone "power locks" doors, just like minecraft iron doors
|
||||
return false;
|
||||
|
||||
@ -68,6 +68,7 @@ public abstract class TileEntityLockableBase extends TileEntity {
|
||||
if(!isLocked) {
|
||||
return true;
|
||||
} else {
|
||||
if(player == null) return false;
|
||||
ItemStack stack = player.getHeldItem();
|
||||
|
||||
if(stack != null && stack.getItem() instanceof ItemKey &&
|
||||
|
||||
@ -1413,6 +1413,8 @@ item.cape_nostalgia.name=DrNostalgias Cape
|
||||
item.cape_radiation.name=Cape (Radioaktiv)
|
||||
item.cape_schrabidium.name=Cape (Schrabidisch)
|
||||
item.cape_vertice.name=Lord Vertices Cape
|
||||
item.card_aos.name=Pik-Ass
|
||||
item.card_qos.name=Pik-Königin
|
||||
item.cart.crate.name=Stahlkistenlore
|
||||
item.cart.destroyer.name=Schuttzerstörende Lore
|
||||
item.cart.empty.name=Lore
|
||||
|
||||
@ -2109,6 +2109,8 @@ item.cape_nostalgia.name=DrNostalgia's Cape
|
||||
item.cape_radiation.name=Cape (Radiation)
|
||||
item.cape_schrabidium.name=Cape (Schrabidic)
|
||||
item.cape_vertice.name=Lord Vertice's Cape
|
||||
item.card_aos.name=Ace of Spades
|
||||
item.card_qos.name=Queen of Spades
|
||||
item.cart.crate.name=Crate Cart
|
||||
item.cart.destroyer.name=Scrap Destroying Cart
|
||||
item.cart.empty.name=Minecart
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 8.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 8.5 KiB |
BIN
src/main/resources/assets/hbm/textures/items/card_aos.png
Normal file
BIN
src/main/resources/assets/hbm/textures/items/card_aos.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 157 B |
BIN
src/main/resources/assets/hbm/textures/items/card_qos.png
Normal file
BIN
src/main/resources/assets/hbm/textures/items/card_qos.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 178 B |
Loading…
x
Reference in New Issue
Block a user