mostly fixes, supply crate changes

This commit is contained in:
Bob 2024-01-07 20:58:31 +01:00
parent 4c3945c924
commit 53c6c1ab77
13 changed files with 144 additions and 131 deletions

View File

@ -27,7 +27,8 @@
* Now features proper animations for drawing the weapon, firing and reloading, as well as new sounds
* Comes with a new and improved 3D model as well as a cylinder gap flash when firing
* Is now part of the red room loot pool
* Durability has been drastically increased
* Durability has been drastically increased (31k instead of 4k)
* The boxcar now has new impact sounds and spawns fewer particles
* Powder box recipes now produce 8 boxes from the same amount of ingredients, making cyclotron recipes more affordable
* Buffed the radiation-powered engine, all valid fuels now produce 10x more energy per tick
* Removed tungsten and HSS bolts as dedicated items, they are now a single bolt item that uses the autogen system
@ -35,11 +36,20 @@
* Bolts Are now 1/8 of an ingot instead of 1/2 which makes some recipes marginally cheaper, as well as making them equal to GregTech bolts
* Bolts are oredicted and interchangeable, as well as recycleable in the crucible
* The N45 naval mine has been obliterated
* The solar boiler's ray rendering is no longer bound by particle settings, instead it will be disabled when fast graphics are enabaled
* The solar boiler's ray rendering is no longer bound by particle settings, instead it will be disabled when fast graphics are enabled
* The solar boiler's internal buffer has been reduced, its steam output is now capped at 10,000mB/t (which should be 20kHE/t or 0.8MHE/s)
* All crates except the jungle dungeon one now drop themselves when mined
* Supply and conserve crates do not need a tool because they are made of wood, the ammo crate requires a pickaxe
* All of those crates are now opened with the crowbar instead in order to be consistent with each other
* Standard gauge rails are now craftable and visible in the transportation tab
* You can now play around with the new rail types in creative mode, as none of the train cars are currently craftable
* Coupling should work, but coupling info is not saved to NBT so links will be lost when leaving the world
* Trains might randomly derail on 5m curves, idk why
## Fixed
* Fixed afterburn upgrades not being craftable with bakelite
* Fixed bismuth block not being properly oredicted
* Powder detectors that are used in the same network as diodes should now be somewhat less wrong
* Fixed horrifying gamebreaking issue that would frequently cause crashes, corrupt worlds and bluescreen PCs where the red copper block and the advanced alloy block had inconsistent colors
* Fixed file cabinets not dropping their contents
* Fixed some sides of the pedestal not rendering

View File

@ -1,6 +1,6 @@
mod_version=1.0.27
# Empty build number makes a release type
mod_build_number=4824
mod_build_number=4837
credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\
\ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\

View File

@ -12,6 +12,7 @@ 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.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
@ -38,11 +39,31 @@ public class BlockAmmoCrate extends Block {
public IIcon getIcon(int side, int metadata) {
return side == 0 ? this.iconBottom : (side == 1 ? this.iconTop : this.blockIcon);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_) {
if(player.getHeldItem() != null && player.getHeldItem().getItem().equals(ModItems.crowbar)) {
if(!world.isRemote) {
dropContents(world, x, y, z);
world.setBlockToAir(x, y, z);
world.playSoundEffect(x, y, z, "hbm:block.crateBreak", 0.5F, 1.0F);
}
return true;
}
return false;
}
Random rand = new Random();
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
public void dropContents(World world, int x, int y, int z) {
ArrayList<ItemStack> items = getContents(world, x, y, z);
for(ItemStack item : items) {
this.dropBlockAsItem(world, x, y, z, item);
}
}
public ArrayList<ItemStack> getContents(World world, int x, int y, int z) {
ArrayList<ItemStack> ret = new ArrayList<ItemStack>();

View File

@ -11,9 +11,7 @@ import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.World;
public class BlockCanCrate extends Block {
@ -21,79 +19,77 @@ public class BlockCanCrate extends Block {
public BlockCanCrate(Material p_i45394_1_) {
super(p_i45394_1_);
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override
public int getRenderType(){
public int getRenderType() {
return renderID;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_) {
if(world.isRemote)
{
player.addChatMessage(new ChatComponentText("The one crate you are allowed to smash!"));
if(player.getHeldItem() != null && player.getHeldItem().getItem().equals(ModItems.crowbar)) {
if(!world.isRemote) {
dropContents(world, x, y, z);
world.setBlockToAir(x, y, z);
world.playSoundEffect(x, y, z, "hbm:block.crateBreak", 0.5F, 1.0F);
}
return true;
}
return true;
}
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
int count = quantityDropped(metadata, fortune, world.rand);
for(int i = 0; i < count; i++) {
Item item = getItemDropped(metadata, world.rand, fortune);
if(item != null)
ret.add(new ItemStack(item, 1, damageDropped(metadata, world.rand, item)));
}
return ret;
}
//pain
public int damageDropped(int meta, Random rand, Item item) {
if(item != ModItems.canned_conserve)
return damageDropped(meta);
else
return Math.abs(rand.nextInt() % EnumFoodType.values().length);
}
@Override
public Item getItemDropped(int i, Random rand, int j) {
List<Item> items = new ArrayList();
for(int a = 0; a < EnumFoodType.values().length; a++)
items.add(ModItems.canned_conserve);
items.add(ModItems.can_smart);
items.add(ModItems.can_creature);
items.add(ModItems.can_redbomb);
items.add(ModItems.can_mrsugar);
items.add(ModItems.can_overcharge);
items.add(ModItems.can_luna);
items.add(ModItems.can_breen);
items.add(ModItems.can_bepis);
items.add(ModItems.pudding);
return items.get(rand.nextInt(items.size()));
}
@Override
public int quantityDropped(Random rand) {
return 5 + rand.nextInt(4);
}
return false;
}
Random rand = new Random();
public void dropContents(World world, int x, int y, int z) {
ArrayList<ItemStack> items = getContents(world, x, y, z);
for(ItemStack item : items) {
this.dropBlockAsItem(world, x, y, z, item);
}
}
public ArrayList<ItemStack> getContents(World world, int x, int y, int z) {
ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
int count = getContentAmount(world.rand);
for(int i = 0; i < count; i++) {
ret.add(getRandomItem(world.rand));
}
return ret;
}
public ItemStack getRandomItem(Random rand) {
List<ItemStack> items = new ArrayList();
for(int a = 0; a < EnumFoodType.values().length; a++)
items.add(new ItemStack(ModItems.canned_conserve, 1, a));
items.add(new ItemStack(ModItems.can_smart));
items.add(new ItemStack(ModItems.can_creature));
items.add(new ItemStack(ModItems.can_redbomb));
items.add(new ItemStack(ModItems.can_mrsugar));
items.add(new ItemStack(ModItems.can_overcharge));
items.add(new ItemStack(ModItems.can_luna));
items.add(new ItemStack(ModItems.can_breen));
items.add(new ItemStack(ModItems.can_bepis));
items.add(new ItemStack(ModItems.pudding));
return items.get(rand.nextInt(items.size()));
}
public int getContentAmount(Random rand) {
return 5 + rand.nextInt(4);
}
}

View File

@ -14,7 +14,6 @@ import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.World;
public class BlockCrate extends BlockFalling {
@ -29,25 +28,17 @@ public class BlockCrate extends BlockFalling {
super(p_i45394_1_);
}
@Override
public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) {
return null;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_) {
if(player.getHeldItem() != null && player.getHeldItem().getItem().equals(ModItems.crowbar)) {
dropItems(world, x, y, z);
world.setBlockToAir(x, y, z);
world.playSoundEffect(x, y, z, "hbm:block.crateBreak", 0.5F, 1.0F);
return true;
} else {
if(world.isRemote) {
player.addChatMessage(new ChatComponentText("I'll need a crate opening device to get the loot, smashing the whole thing won't work..."));
if(!world.isRemote) {
dropItems(world, x, y, z);
world.setBlockToAir(x, y, z);
world.playSoundEffect(x, y, z, "hbm:block.crateBreak", 0.5F, 1.0F);
}
return true;
}
return true;
return false;
}
public void setDrops() {

View File

@ -58,9 +58,9 @@ public class BlockDecoContainer extends BlockDecoModel implements ITileEntityPro
} else {
TileEntity entity = world.getTileEntity(x, y, z);
if(entity instanceof TileEntityLockableBase) { //annoying accommodations for the filing cabinet, but whatever, could potentially be useful
if(player.getHeldItem() != null && (player.getHeldItem().getItem() instanceof ItemLock || player.getHeldItem().getItem() == ModItems.key_kit))
if(player.getHeldItem() != null && (player.getHeldItem().getItem() instanceof ItemLock || player.getHeldItem().getItem() == ModItems.key_kit)) {
return false;
else if(!player.isSneaking() && ((TileEntityLockableBase) entity).canAccess(player)) {
} else if(!player.isSneaking() && ((TileEntityLockableBase) entity).canAccess(player)) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
return true;
}
@ -99,13 +99,13 @@ public class BlockDecoContainer extends BlockDecoModel implements ITileEntityPro
if(itemstack.hasTagCompound()) {
entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy());
float f3 = 0.05F;
entityitem.motionX = (float) rand.nextGaussian() * f3;
entityitem.motionY = (float) rand.nextGaussian() * f3 + 0.2F;
entityitem.motionZ = (float) rand.nextGaussian() * f3;
world.spawnEntityInWorld(entityitem);
}
float f3 = 0.05F;
entityitem.motionX = (float) rand.nextGaussian() * f3;
entityitem.motionY = (float) rand.nextGaussian() * f3 + 0.2F;
entityitem.motionZ = (float) rand.nextGaussian() * f3;
world.spawnEntityInWorld(entityitem);
}
}

View File

@ -18,6 +18,7 @@ import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockPedestal extends BlockContainer {
@ -62,6 +63,12 @@ public class BlockPedestal extends BlockContainer {
public boolean renderAsNormalBlock() {
return false;
}
@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) {
return true;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {

View File

@ -107,9 +107,9 @@ public class EntityGlyphid extends EntityMob {
@Override
protected void entityInit() {
super.entityInit();
this.dataWatcher.addObject(DW_WALL, new Byte((byte) 0)); //wall climbing
this.dataWatcher.addObject(DW_WALL, new Byte((byte) 0)); //wall climbing
this.dataWatcher.addObject(DW_ARMOR, new Byte((byte) 0b11111)); //armor
this.dataWatcher.addObject(DW_SUBTYPE, new Byte((byte) 0)); //subtype (i.e. normal, infected, etc)
this.dataWatcher.addObject(DW_SUBTYPE, new Byte((byte) 0)); //subtype (i.e. normal, infected, etc)
}
@Override

View File

@ -32,49 +32,36 @@ public class EntityBoxcar extends EntityThrowable {
this.lastTickPosZ = this.prevPosZ = posZ;
this.setPosition(posX + this.motionX, posY + this.motionY, posZ + this.motionZ);
/*this.prevPosX = this.posX;
this.prevPosY = this.posY;
this.prevPosZ = this.posZ;
this.posX += this.motionX;
this.posY += this.motionY;
this.posZ += this.motionZ;*/
this.motionY -= 0.03;
if(motionY < -1.5)
motionY = -1.5;
if(this.worldObj.getBlock((int)this.posX, (int)this.posY, (int)this.posZ) != Blocks.air)
{
this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "hbm:entity.oldExplosion", 10000.0F, 0.5F + this.rand.nextFloat() * 0.1F);
this.setDead();
ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 3);
ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 2.5);
ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 2);
ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 1.5);
ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 1);
List<Entity> list = (List<Entity>)worldObj.getEntitiesWithinAABBExcludingEntity(null,
AxisAlignedBB.getBoundingBox(posX - 2, posY - 2, posZ - 2, posX + 2, posY + 2, posZ + 2));
for(Entity e : list) {
e.attackEntityFrom(ModDamageSource.boxcar, 1000);
}
if(!worldObj.isRemote)
worldObj.setBlock((int)(this.posX - 0.5), (int)(this.posY + 0.5), (int)(this.posZ - 0.5), ModBlocks.boxcar);
}
}
if(this.worldObj.getBlock((int) this.posX, (int) this.posY, (int) this.posZ) != Blocks.air) {
this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "hbm:weapon.trainImpact", 100.0F, 1.0F);
this.setDead();
ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 3);
ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 2.5);
ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 2);
//ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 1.5);
//ExplosionLarge.spawnShock(worldObj, posX, posY + 1, posZ, 24, 1);
List<Entity> list = (List<Entity>) worldObj.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(posX - 2, posY - 2, posZ - 2, posX + 2, posY + 2, posZ + 2));
for(Entity e : list) {
e.attackEntityFrom(ModDamageSource.boxcar, 1000);
}
if(!worldObj.isRemote)
worldObj.setBlock((int) (this.posX - 0.5), (int) (this.posY + 0.5), (int) (this.posZ - 0.5), ModBlocks.boxcar);
}
}
@Override
protected void onImpact(MovingObjectPosition p_70184_1_) {
}
protected void onImpact(MovingObjectPosition p_70184_1_) { }
@Override
@Override
@SideOnly(Side.CLIENT)
public boolean isInRangeToRenderDist(double distance)
{
return distance < 25000;
}
public boolean isInRangeToRenderDist(double distance) {
return distance < 25000;
}
}

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 (4824)";
public static final String VERSION = "1.0.27 BETA (4837)";
//HBM's Beta Naming Convention:
//V T (X)
//V -> next release version

View File

@ -202,6 +202,7 @@
"weapon.glReload": {"category": "player", "sounds": [{"name": "weapon/glReload", "stream": false}]},
"weapon.glShoot": {"category": "player", "sounds": [{"name": "weapon/glShoot", "stream": false}]},
"weapon.44Shoot": {"category": "player", "sounds": [{"name": "weapon/44Shoot", "stream": false}]},
"weapon.trainImpact": {"category": "player", "sounds": [{"name": "weapon/trainImpact", "stream": false}]},
"weapon.dFlash": {"category": "player", "sounds": [{"name": "weapon/dFlash", "stream": false}]},

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB