This commit is contained in:
Bob 2025-05-12 23:29:59 +02:00
parent 763b6ec020
commit 74992ede71
17 changed files with 250 additions and 27 deletions

View File

@ -13,6 +13,11 @@
* Halved base spread of the .22 SMG
* Certain secret guns now have a proper way of being obtained
* Demolition mini nukes now create fire again
* New server configs
* `CRATE_OPEN_HELD` can toggle whether crates can be opened when held
* `CRATE_KEEP_CONTENTS` can toggle whether crates keep their contents when broken
## Fixed
* Fixed RoR controller having the wrong recipe
* Fixed RoR controller having the wrong recipe
* Either fixed the crate dupe/voiding issues or made them even worse
* Fixed skeletons and pedestals allowing blocks to be placed inside the player

View File

@ -281,6 +281,7 @@ public class ModBlocks {
public static Block sandbags;
public static Block wood_barrier;
public static Block wood_structure;
public static Block reinforced_brick;
public static Block reinforced_ducrete;
@ -1481,7 +1482,8 @@ public class ModBlocks {
asphalt_light = new BlockSpeedy(Material.rock, 1.5).setBlockName("asphalt_light").setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(15.0F).setResistance(120.0F).setBlockTextureName(RefStrings.MODID + ":asphalt_light");
sandbags = new BlockSandbags(Material.ground).setBlockName("sandbags").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(30.0F).setBlockTextureName(RefStrings.MODID + ":sandbags");
wood_barrier = new BlockBarrier(Material.wood).setStepSound(Block.soundTypeWood).setBlockName("wood_barrier").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(30.0F).setBlockTextureName(RefStrings.MODID + ":wood_barrier");
wood_barrier = new BlockBarrier(Material.wood).setStepSound(Block.soundTypeWood).setBlockName("wood_barrier").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":wood_barrier");
wood_structure = new BlockWoodStructure(Material.wood).setStepSound(Block.soundTypeWood).setBlockName("wood_structure").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":wood_barrier");
reinforced_brick = new BlockGeneric(Material.rock).setBlockName("reinforced_brick").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(300.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_brick");
reinforced_glass = new BlockNTMGlassCT(0, RefStrings.MODID + ":reinforced_glass", Material.rock).setBlockName("reinforced_glass").setCreativeTab(MainRegistry.blockTab).setLightOpacity(0).setHardness(2.0F).setResistance(25.0F);
@ -2662,6 +2664,7 @@ public class ModBlocks {
//Reinforced Blocks
register(sandbags);
register(wood_barrier);
register(wood_structure);
GameRegistry.registerBlock(asphalt, ItemBlockBlastInfo.class, asphalt.getUnlocalizedName());
GameRegistry.registerBlock(asphalt_light, ItemBlockBlastInfo.class, asphalt_light.getUnlocalizedName());
GameRegistry.registerBlock(reinforced_brick, ItemBlockBlastInfo.class, reinforced_brick.getUnlocalizedName());

View File

@ -121,11 +121,13 @@ public class BlockBarrier extends Block implements ISBRHUniversal {
Block px = world.getBlock(x + 1, y, z);
Block nz = world.getBlock(x, y, z - 1);
Block pz = world.getBlock(x, y, z + 1);
Block py = world.getBlock(x, y + 1, z);
boolean negX = nx.isOpaqueCube() || nx.isNormalCube() || meta == Library.POS_X.ordinal();
boolean negZ = nz.isOpaqueCube() || nz.isNormalCube() || meta == Library.POS_Z.ordinal();
boolean posX = px.isOpaqueCube() || px.isNormalCube() || meta == Library.NEG_X.ordinal();
boolean posZ = pz.isOpaqueCube() || pz.isNormalCube() || meta == Library.NEG_Z.ordinal();
boolean posY = py.isOpaqueCube() || py.isNormalCube();
if(negX) {
renderer.setRenderBounds(0D, 0D, 0.4375D, 0.125D, 1D, 0.5625D); renderer.renderStandardBlock(block, x, y, z);
@ -147,6 +149,12 @@ public class BlockBarrier extends Block implements ISBRHUniversal {
renderer.setRenderBounds(negX ? 0.125D : 0D, 0.0625D, 0.9375D, posX ? 0.875D : 1D, 0.4375D, 1D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(negX ? 0.125D : 0D, 0.5625D, 0.9375D, posX ? 0.875D : 1D, 0.9375D, 1D); renderer.renderStandardBlock(block, x, y, z);
}
if(posY) {
renderer.setRenderBounds(0D, 0.875D, 0D, 0.125D, 0.9375D, 1D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(0.875D, 0.875D, 0D, 1D, 0.9375D, 1D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(0D, 0.9375D, 0.0625D, 1D, 1D, 0.4375D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(0D, 0.9375D, 0.5625D, 1D, 1D, 0.9375D); renderer.renderStandardBlock(block, x, y, z);
}
return true;
}

View File

@ -66,18 +66,19 @@ public class BlockPedestal extends BlockContainer {
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if(world.isRemote) return true;
if(player.isSneaking()) return false;
TileEntityPedestal pedestal = (TileEntityPedestal) world.getTileEntity(x, y, z);
if(pedestal.item == null && player.getHeldItem() != null) {
if(world.isRemote) return true;
pedestal.item = player.getHeldItem().copy();
player.inventory.mainInventory[player.inventory.currentItem] = null;
pedestal.markDirty();
world.markBlockForUpdate(x, y, z);
return true;
} else if(pedestal.item != null && player.getHeldItem() == null) {
if(world.isRemote) return true;
player.inventory.mainInventory[player.inventory.currentItem] = pedestal.item.copy();
pedestal.item = null;
pedestal.markDirty();

View File

@ -41,18 +41,19 @@ public class BlockSkeletonHolder extends BlockContainer {
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if(world.isRemote) return true;
if(player.isSneaking()) return false;
TileEntitySkeletonHolder pedestal = (TileEntitySkeletonHolder) world.getTileEntity(x, y, z);
if(pedestal.item == null && player.getHeldItem() != null) {
if(world.isRemote) return true;
pedestal.item = player.getHeldItem().copy();
player.inventory.mainInventory[player.inventory.currentItem] = null;
pedestal.markDirty();
world.markBlockForUpdate(x, y, z);
return true;
} else if(pedestal.item != null && player.getHeldItem() == null) {
if(world.isRemote) return true;
player.inventory.mainInventory[player.inventory.currentItem] = pedestal.item.copy();
pedestal.item = null;
pedestal.markDirty();

View File

@ -8,6 +8,7 @@ import java.util.Random;
import com.hbm.blocks.IBlockMulti;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.ServerConfig;
import com.hbm.items.ModItems;
import com.hbm.items.tool.ItemLock;
import com.hbm.lib.RefStrings;
@ -105,6 +106,21 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT
@Override
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) {
if(!world.isRemote && !ServerConfig.CRATE_KEEP_CONTENTS.get()) {
dropInv = true;
if(!player.capabilities.isCreativeMode) {
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this)));
}
TileEntity inv = world.getTileEntity(x, y, z);
if(inv instanceof TileEntityLockableBase) {
TileEntityLockableBase lockable = (TileEntityLockableBase) inv;
if(lockable.isLocked()) dropInv = false;
}
boolean flag = world.setBlockToAir(x, y, z);
dropInv = true;
return flag;
}
if(!player.capabilities.isCreativeMode && !world.isRemote && willHarvest) {

View File

@ -0,0 +1,152 @@
package com.hbm.blocks.generic;
import java.util.List;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockEnumMulti;
import com.hbm.render.block.ISBRHUniversal;
import com.hbm.render.util.RenderBlocksNT;
import com.hbm.util.EnumUtil;
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.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.entity.Entity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockWoodStructure extends BlockEnumMulti implements ISBRHUniversal {
public BlockWoodStructure(Material mat) {
super(mat, EnumWoodStructure.class, true, false);
}
public enum EnumWoodStructure {
ROOF, SCAFFOLD, CEILING
}
@Override public int getRenderType() { return renderID; }
@Override public boolean isOpaqueCube() { return false; }
@Override 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 isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) {
EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class, world.getBlockMetadata(x, y, z));
if(type == type.SCAFFOLD && side == ForgeDirection.UP) return true;
return false;
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class, world.getBlockMetadata(x, y, z));
setBlockBounds(0, 0, 0, 1, 1, 1);
if(type == type.ROOF) setBlockBounds(0F, 0F, 0F, 1F, 0.1875F, 1F);
if(type == type.SCAFFOLD) setBlockBounds(0F, 0F, 0F, 1F, 1F, 1F);
if(type == type.CEILING) setBlockBounds(0F, 0.875F, 0F, 1F, 1F, 1F);
}
@Override
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB aabb, List list, Entity collider) {
setBlockBoundsBasedOnState(world, x, y, z);
super.addCollisionBoxesToList(world, x, y, z, aabb, list, collider);
}
@Override
public void renderInventoryBlock(Block block, int meta, int modelId, Object renderBlocks) {
GL11.glPushMatrix();
RenderBlocks renderer = (RenderBlocks) renderBlocks;
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class, meta);
if(type == type.ROOF) {
GL11.glTranslatef(0F, 0.125F, 0F);
renderer.setRenderBounds(0D, 0D, 0D, 0.125D, 0.125D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 0.125D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0D, 0.125D, 0.0625D, 1D, 0.1875D, 0.4375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0D, 0.125D, 0.5625D, 1D, 0.1875D, 0.9375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
}
if(type == type.SCAFFOLD) {
renderer.setRenderBounds(0.0625D, 0D, 0.0625D, 0.1875D, 0.875D, 0.1875D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0.8125D, 0D, 0.0625D, 0.9375D, 0.875D, 0.1875D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0.0625D, 0D, 0.8125D, 0.1875D, 0.875D, 0.9375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0.8125D, 0D, 0.8125D, 0.9375D, 0.875D, 0.9375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0D, 0.125D, 0D, 0.0625D, 0.375D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0.9375D, 0.125D, 0D, 1D, 0.375D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0D, 0.5D, 0D, 1D, 0.75D, 0.0625D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0D, 0.5D, 0.9375D, 1D, 0.75D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0D, 0.875D, 0D, 1D, 1D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
}
if(type == type.CEILING) {
GL11.glTranslatef(0F, 0.625F, 0F);
renderer.setRenderBounds(0D, 0.0625D, 0D, 0.125D, 0.125D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0.875D, 0.0625D, 0D, 1D, 0.125D, 1D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0D, 0.125D, 0.0625D, 1D, 0.1875D, 0.4375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
renderer.setRenderBounds(0D, 0.125D, 0.5625D, 1D, 0.1875D, 0.9375D); RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer);
}
GL11.glPopMatrix();
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, Object renderBlocks) {
RenderBlocksNT renderer = RenderBlocksNT.INSTANCE.setWorld(world);
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tessellator.setColorOpaque_F(1, 1, 1);
int meta = world.getBlockMetadata(x, y, z);
EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class,meta);
if(type == type.ROOF) {
boolean nx = world.getBlock(x - 1, y, z) == this && world.getBlockMetadata(x - 1, y, z) == meta;
boolean px = world.getBlock(x + 1, y, z) == this && world.getBlockMetadata(x + 1, y, z) == meta;
renderer.setRenderBounds(0D, 0D, 0D, 0.125D, 0.125D, 1D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 0.125D, 1D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(nx ? 0D : 0.0625D, 0.125D, 0.0625D, px ? 1D : 0.9375D, 0.1875D, 0.4375D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(nx ? 0D : 0.0625D, 0.125D, 0.5625D, px ? 1D : 0.9375D, 0.1875D, 0.9375D); renderer.renderStandardBlock(block, x, y, z);
}
if(type == type.SCAFFOLD) {
boolean py = world.getBlock(x, y + 1, z) == this && world.getBlockMetadata(x, y + 1, z) == meta;
boolean nx = world.getBlock(x - 1, y, z) == this && world.getBlockMetadata(x - 1, y, z) == meta;
boolean nz = world.getBlock(x, y, z - 1) == this && world.getBlockMetadata(x, y, z - 1) == meta;
boolean px = world.getBlock(x + 1, y, z) == this && world.getBlockMetadata(x + 1, y, z) == meta;
boolean pz = world.getBlock(x, y, z + 1) == this && world.getBlockMetadata(x, y, z + 1) == meta;
renderer.setRenderBounds(0.0625D, 0D, 0.0625D, 0.1875D, py ? 1D : 0.875D, 0.1875D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(0.8125D, 0D, 0.0625D, 0.9375D, py ? 1D : 0.875D, 0.1875D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(0.0625D, 0D, 0.8125D, 0.1875D, py ? 1D : 0.875D, 0.9375D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(0.8125D, 0D, 0.8125D, 0.9375D, py ? 1D : 0.875D, 0.9375D); renderer.renderStandardBlock(block, x, y, z);
if(!nx) renderer.setRenderBounds(0D, 0.125D, 0D, 0.0625D, 0.375D, 1D); renderer.renderStandardBlock(block, x, y, z);
if(!px) renderer.setRenderBounds(0.9375D, 0.125D, 0D, 1D, 0.375D, 1D); renderer.renderStandardBlock(block, x, y, z);
if(!nz) renderer.setRenderBounds(0D, 0.5D, 0D, 1D, 0.75D, 0.0625D); renderer.renderStandardBlock(block, x, y, z);
if(!pz) renderer.setRenderBounds(0D, 0.5D, 0.9375D, 1D, 0.75D, 1D); renderer.renderStandardBlock(block, x, y, z);
if(!py) renderer.setRenderBounds(0D, 0.875D, 0D, 1D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z);
}
if(type == type.CEILING) {
renderer.setRenderBounds(0D, 0.875D, 0D, 0.125D, 0.9375D, 1D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(0.875D, 0.875D, 0D, 1D, 0.9375D, 1D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(0D, 0.9375D, 0.0625D, 1D, 1D, 0.4375D); renderer.renderStandardBlock(block, x, y, z);
renderer.setRenderBounds(0D, 0.9375D, 0.5625D, 1D, 1D, 0.9375D); renderer.renderStandardBlock(block, x, y, z);
}
return true;
}
}

View File

@ -17,6 +17,8 @@ public class ServerConfig extends RunningConfig {
public static ConfigWrapper<Float> MINE_NUKE_DAMAGE = new ConfigWrapper(100F);
public static ConfigWrapper<Float> MINE_NAVAL_DAMAGE = new ConfigWrapper(60F);
public static ConfigWrapper<Boolean> TAINT_TRAILS = new ConfigWrapper(false);
public static ConfigWrapper<Boolean> CRATE_OPEN_HELD = new ConfigWrapper(true);
public static ConfigWrapper<Boolean> CRATE_KEEP_CONTENTS = new ConfigWrapper(true);
private static void initDefaults() {
configMap.put("DAMAGE_COMPATIBILITY_MODE", DAMAGE_COMPATIBILITY_MODE);
@ -26,6 +28,8 @@ public class ServerConfig extends RunningConfig {
configMap.put("MINE_NUKE_DAMAGE", MINE_NUKE_DAMAGE);
configMap.put("MINE_NAVAL_DAMAGE", MINE_NAVAL_DAMAGE);
configMap.put("TAINT_TRAILS", TAINT_TRAILS);
configMap.put("CRATE_OPEN_HELD", CRATE_OPEN_HELD);
configMap.put("CRATE_KEEP_CONTENTS", CRATE_KEEP_CONTENTS);
}
/** Initializes defaults, then reads the config file if it exists, then writes the config file. */

View File

@ -102,6 +102,7 @@ public class WeaponRecipes {
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_AP, 6), new Object[] { "C", "P", "G", 'C', Items.flint, 'P', Items.paper, 'G', Items.gunpowder });
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_SHOT, 6), new Object[] { "C", "P", "G", 'C', Blocks.gravel, 'P', Items.paper, 'G', Items.gunpowder });
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_IRON, 6), new Object[] { "C", "P", "G", 'C', IRON.ingot(), 'P', Items.paper, 'G', Items.gunpowder });
CraftingManager.addShapelessAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR_CHARGE, 1), new Object[] { DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR), ModItems.ducttape, ModItems.ducttape });
//SEDNA Mods
CraftingManager.addShapelessAuto(new ItemStack(ModItems.weapon_mod_generic, 1, EnumModGeneric.IRON_DAMAGE.ordinal()), new Object[] { GUNMETAL.ingot(), IRON.ingot(), IRON.ingot(), IRON.ingot(), ModItems.ducttape });

View File

@ -41,12 +41,13 @@ public class AmmoPressRecipes extends SerializableRecipe {
OreDictStack uranium = new OreDictStack(U238.ingot());
OreDictStack ferro = new OreDictStack(FERRO.ingot());
OreDictStack nb = new OreDictStack(NB.ingot());
ComparableStack smokeful = new ComparableStack(Items.gunpowder);
OreDictStack smokeless = new OreDictStack(ANY_SMOKELESS.dust());
ComparableStack rocket = new ComparableStack(ModItems.rocket_fuel);
OreDictStack he = new OreDictStack(ANY_HIGHEXPLOSIVE.ingot());
OreDictStack wp = new OreDictStack(P_WHITE.ingot());
OreDictStack rp = new OreDictStack(P_RED.dust());
OreDictStack pipe = new OreDictStack(STEEL.pipe());
ComparableStack smokeful = new ComparableStack(Items.gunpowder);
ComparableStack rocket = new ComparableStack(ModItems.rocket_fuel);
ComparableStack cSmall = new ComparableStack(ModItems.casing, 1, EnumCasingType.SMALL);
ComparableStack cBig = new ComparableStack(ModItems.casing, 1, EnumCasingType.LARGE);
ComparableStack sSmall = new ComparableStack(ModItems.casing, 1, EnumCasingType.SMALL_STEEL);
@ -430,6 +431,15 @@ public class AmmoPressRecipes extends SerializableRecipe {
null, he.copy(8), null,
null, sBig.copy(2), null,
null, sPlate.copy(4), null));
recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_HOOK, 16),
null, steel, null,
null, pipe, null,
null, smokeless, null));
recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.CT_MORTAR, 4),
null, he.copy(4), null,
null, pipe, null,
null, smokeless, null));
}
public static HashMap getRecipes() {

View File

@ -1,6 +1,7 @@
package com.hbm.items.block;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.ServerConfig;
import com.hbm.inventory.container.*;
import com.hbm.inventory.gui.*;
import com.hbm.items.ItemInventory;
@ -29,6 +30,8 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if(!ServerConfig.CRATE_OPEN_HELD.get()) return stack;
Block block = Block.getBlockFromItem(player.getHeldItem().getItem());
if(block == ModBlocks.mass_storage) return stack; // Genuinely can't figure out how to make this part work, so I'm just not gonna mess with it.
@ -81,10 +84,13 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider
public static class InventoryCrate extends ItemInventory {
public int heldIndex;
public InventoryCrate(EntityPlayer player, ItemStack crate) {
this.player = player;
this.target = crate;
this.heldIndex = player.inventory.currentItem;
this.slots = new ItemStack[this.getSizeInventory()];
if(target.stackTagCompound == null) {
@ -143,17 +149,9 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider
if(target.stackTagCompound.hasKey("spiders")) nbt.setBoolean("spiders", target.stackTagCompound.getBoolean("spiders")); // fuck you!!
}*/
/*
* target and held item stacks constantly desync, not being the same reference, while still holding the same value.
* code was tested with a copy of the containment box code using the CB's GUI and container to no avail.
* hypothesis: minecraft's keybind handling has some special bullshit case for ItemBlocks, since that is the only difference in the test.
* solution (?): check equality, then just access the held stack directly. if not, pray the target reference is still accurate and use that.
*/
if(player.getHeldItem() != null && ItemStack.areItemStacksEqual(player.getHeldItem(), target)) {
// i have completely given up
if(player.getHeldItem() != null && player.getHeldItem().getItem() == this.target.getItem() && player.inventory.currentItem == this.heldIndex) {
player.getHeldItem().setTagCompound(nbt);
this.target = player.getHeldItem(); // just fuckin whatever
} else {
target.setTagCompound(nbt);
}
}
@ -164,10 +162,8 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider
/*
* realistically, we only need one NBT size check (and we only *want* one because CompressedStreamTools is expensive) so we do that part only when closing
*/
if(player.getHeldItem() != null && ItemStack.areItemStacksEqual(player.getHeldItem(), target)) {
player.getHeldItem().setTagCompound(checkNBT(target.getTagCompound()));
} else {
target.setTagCompound(checkNBT(target.getTagCompound()));
if(player.getHeldItem() != null && player.getHeldItem().getItem() == this.target.getItem() && player.inventory.currentItem == this.heldIndex) {
player.getHeldItem().setTagCompound(checkNBT(player.getHeldItem().getTagCompound()));
}
}
}

View File

@ -88,15 +88,15 @@ public class XFactoryTool {
ct_hook = new BulletConfig().setItem(EnumAmmo.CT_HOOK).setRenderRotations(false).setLife(6_000).setVel(3F).setGrav(0.035D).setDoesPenetrate(true).setDamageFalloffByPen(false)
.setOnUpdate(LAMBDA_SET_HOOK).setOnImpact(LAMBDA_HOOK);
ct_mortar = new BulletConfig().setItem(EnumAmmo.CT_MORTAR).setLife(200).setVel(3F).setGrav(0.035D)
ct_mortar = new BulletConfig().setItem(EnumAmmo.CT_MORTAR).setDamage(2.5F).setLife(200).setVel(3F).setGrav(0.035D)
.setOnImpact(LAMBDA_MORTAR);
ct_mortar_charge = new BulletConfig().setItem(EnumAmmo.CT_MORTAR_CHARGE).setLife(200).setVel(3F).setGrav(0.035D)
ct_mortar_charge = new BulletConfig().setItem(EnumAmmo.CT_MORTAR_CHARGE).setDamage(5F).setLife(200).setVel(3F).setGrav(0.035D)
.setOnImpact(LAMBDA_MORTAR_CHARGE);
ModItems.gun_charge_thrower = new ItemGunChargeThrower(WeaponQuality.UTILITY, new GunConfig()
.dura(3_000).draw(20).inspect(31).reloadChangeType(true).hideCrosshair(false).crosshair(Crosshair.L_CIRCUMFLEX)
.dura(3_000).draw(10).inspect(55).reloadChangeType(true).hideCrosshair(false).crosshair(Crosshair.L_CIRCUMFLEX)
.rec(new Receiver(0)
.dmg(5F).delay(4).dry(10).auto(true).spread(0F).spreadHipfire(0F).reload(60).jam(55).sound("hbm:weapon.fire.grenade", 1.0F, 1.0F)
.dmg(10F).delay(4).dry(10).auto(true).spread(0F).spreadHipfire(0F).reload(60).jam(0).sound("hbm:weapon.fire.grenade", 1.0F, 1.0F)
.mag(new MagazineFullReload(0, 1).addConfigs(ct_hook, ct_mortar, ct_mortar_charge))
.offset(1, -0.0625 * 2.5, -0.25D)
.setupStandardFire().recoil(LAMBDA_RECOIL_CT))
@ -119,6 +119,9 @@ public class XFactoryTool {
.addBus("RAISE", new BusAnimationSequence().addPos(-45, 0, 0, 500, IType.SIN_FULL).hold(2000).addPos(0, 0, 0, 500, IType.SIN_FULL))
.addBus("AMMO", new BusAnimationSequence().setPos(0, -10, -5).hold(500).addPos(0, 0, 5, 750, IType.SIN_FULL).addPos(0, 0, 0, 500, IType.SIN_UP).hold(4000))
.addBus("TWIST", new BusAnimationSequence().setPos(0, 0, 25).hold(2000).addPos(0, 0, 0, 150));
case INSPECT: return new BusAnimation()
.addBus("TURN", new BusAnimationSequence().addPos(0, 60, 0, 500, IType.SIN_FULL).hold(1750).addPos(0, 0, 0, 500, IType.SIN_FULL))
.addBus("ROLL", new BusAnimationSequence().hold(750).addPos(0, 0, -90, 500, IType.SIN_FULL).hold(1000).addPos(0, 0, 0, 500, IType.SIN_FULL));
}
return null;

View File

@ -1783,7 +1783,8 @@ public class ClientProxy extends ServerProxy {
.addPos(90, 0, 1, 800)
.addPos(0, 0, 1, 50));
HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, null);
String id = ModItems.crucible.getUnlocalizedName();
HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(id, System.currentTimeMillis(), animation, null);
}
/* crucible swing */
@ -1804,8 +1805,8 @@ public class ClientProxy extends ServerProxy {
.addPos(0, 0, 0, 500));
Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:weapon.cSwing"), 0.8F + player.getRNG().nextFloat() * 0.2F));
HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, null);
String id = ModItems.crucible.getUnlocalizedName();
HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(id, System.currentTimeMillis(), animation, null);
}
}

View File

@ -953,8 +953,11 @@ public class CraftingManager {
Object casing = craneCasing[i * 2];
int amount = (int) craneCasing[i * 2 + 1];
addRecipeAuto(new ItemStack(ModBlocks.crane_inserter, amount), new Object[] { "CCC", "C C", "CBC", 'C', casing, 'B', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR) });
addRecipeAuto(new ItemStack(ModBlocks.crane_inserter, amount), new Object[] { "CCC", "C C", "CBC", 'C', casing, 'B', ModBlocks.conveyor });
addRecipeAuto(new ItemStack(ModBlocks.crane_extractor, amount), new Object[] { "CCC", "CPC", "CBC", 'C', casing, 'B', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR), 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) });
addRecipeAuto(new ItemStack(ModBlocks.crane_extractor, amount), new Object[] { "CCC", "CPC", "CBC", 'C', casing, 'B', ModBlocks.conveyor, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) });
addRecipeAuto(new ItemStack(ModBlocks.crane_grabber, amount), new Object[] { "C C", "P P", "CBC", 'C', casing, 'B', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR), 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) });
addRecipeAuto(new ItemStack(ModBlocks.crane_grabber, amount), new Object[] { "C C", "P P", "CBC", 'C', casing, 'B', ModBlocks.conveyor, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) });
}
addRecipeAuto(new ItemStack(ModBlocks.crane_boxer), new Object[] { "WWW", "WPW", "CCC", 'W', KEY_PLANKS, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'C', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR) });

View File

@ -59,6 +59,8 @@ public class ItemRenderChargeThrower extends ItemRenderWeaponBase {
double[] raise = HbmAnimations.getRelevantTransformation("RAISE");
double[] ammo = HbmAnimations.getRelevantTransformation("AMMO");
double[] twist = HbmAnimations.getRelevantTransformation("TWIST");
double[] turn = HbmAnimations.getRelevantTransformation("TURN");
double[] roll = HbmAnimations.getRelevantTransformation("ROLL");
GL11.glTranslated(0, 0, -7);
GL11.glRotated(equip[0], -1, 0, 0);
@ -69,6 +71,13 @@ public class ItemRenderChargeThrower extends ItemRenderWeaponBase {
GL11.glTranslated(0, 7, -4);
GL11.glTranslated(recoil[0], recoil[1], recoil[2]);
GL11.glTranslated(0, 0, -2);
GL11.glRotated(turn[1], 0, 1, 0);
GL11.glTranslated(0, 0, 2);
GL11.glTranslated(0, -1, 0);
GL11.glRotated(roll[2], 0, 0, 1);
GL11.glTranslated(0, 1, 0);
GL11.glShadeModel(GL11.GL_SMOOTH);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.charge_thrower_tex);

View File

@ -1114,6 +1114,7 @@ item.ammo_standard.m44_express.name=.44 Magnumkugel (VMG Express)
item.ammo_standard.m44_fmj.name=.44 Magnumkugel (Vollmantelgeschoss)
item.ammo_standard.m44_jhp.name=.44 Magnumkugel (Hohlspitz)
item.ammo_standard.m44_sp.name=.44 Magnumkugel (Teilmantelgeschoss)
item.ammo_standard.nuke_balefire.name=Miniatombombe, Balefire-Ei
item.ammo_standard.nuke_demo.name=Miniatombombe, Abriss
item.ammo_standard.nuke_high.name=Miniatombombe, hoher Ertrag
item.ammo_standard.nuke_hive.name=Raketenschwarm
@ -2120,6 +2121,7 @@ item.gun_maresleg_broken.name=Broken
item.gun_maresleg_short.name=Mare's Leg
item.gun_mas36.name=Südstern
item.gun_minigun.name=Minigun
item.gun_minigun_dual.name=Doppelete Miniguns
item.gun_minigun_lacunae.name=Lacunae
item.gun_missile_launcher.name=Raketenwerfer
item.gun_pepperbox.name=Bündelrevolver
@ -4881,6 +4883,9 @@ tile.watz_end_bolted.name=Watz-Stabilitätselement (Genietet)
tile.watz_hatch.name=Watzreaktorzugriffsluke
tile.watz_pump.name=Watz-Druckpumpe
tile.wood_barrier.name=Holzbarriere
tile.wood_structure.ceiling.name=Holzdecke
tile.wood_structure.roof.name=Holzdach
tile.wood_structure.scaffold.name=Holzgerüst
tile.yellow_barrel.name=Radioaktives Fass
tile.zirnox_destroyed.name=Zerstörter ZINOX

View File

@ -1839,6 +1839,7 @@ item.ammo_standard.m44_express.name=.44 Magnum Round (FMJ Express)
item.ammo_standard.m44_fmj.name=.44 Magnum Round (Full Metal Jacket)
item.ammo_standard.m44_jhp.name=.44 Magnum Round (Jacketed Hollow Point)
item.ammo_standard.m44_sp.name=.44 Magnum Round (Soft Point)
item.ammo_standard.nuke_balefire.name=Mini Nuke, Balefire Egg
item.ammo_standard.nuke_demo.name=Mini Nuke, Demolition
item.ammo_standard.nuke_high.name=Mini Nuke, High Yield
item.ammo_standard.nuke_hive.name=Rocket Hive
@ -2932,6 +2933,7 @@ item.gun_maresleg_broken.name=Broken
item.gun_maresleg_short.name=Mare's Leg
item.gun_mas36.name=South Star
item.gun_minigun.name=Minigun
item.gun_minigun_dual.name=Dual Miniguns
item.gun_minigun_lacunae.name=Lacunae
item.gun_missile_launcher.name=Missile Launcher
item.gun_pepperbox.name=Pepperbox
@ -6043,6 +6045,9 @@ tile.watz_end_bolted.name=Watz Reactor Stability Element (Riveted)
tile.watz_hatch.name=Watz Reactor Access Hatch
tile.watz_pump.name=Watz Pressure Pump
tile.wood_barrier.name=Wooden Barrier
tile.wood_structure.ceiling.name=Wooden Ceiling
tile.wood_structure.roof.name=Wooden Roof
tile.wood_structure.scaffold.name=Wooden Scaffold
tile.yellow_barrel.name=Radioactive Barrel
tile.zirnox_destroyed.name=Destroyed ZIRNOX