the foxes have taken over, torex tweaks

This commit is contained in:
Bob 2024-01-21 20:16:10 +01:00
parent aa8e492610
commit 52825d9d9e
26 changed files with 223 additions and 115 deletions

View File

@ -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

View File

@ -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,\

View File

@ -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;

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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;
}
}
}

View File

@ -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));

View File

@ -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);

View File

@ -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);

View File

@ -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());

View 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);
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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;
}
}
}

View File

@ -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");

View File

@ -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;
}
}

View File

@ -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

View File

@ -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();

View File

@ -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);
}

View File

@ -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;

View File

@ -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 &&

View File

@ -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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B