this is dave from microsoft, your computer has virus

This commit is contained in:
Boblet 2026-01-27 15:37:27 +01:00
parent 843d3ea6cd
commit aa40b57297
41 changed files with 441 additions and 485 deletions

View File

@ -6,7 +6,7 @@
* Simplified the battery socket's client packets, reducing CPU load
* Muzzle flashes on guns now work in third person mode, including on other players and on NPCs, making it more apparent when you're being fired at
* This includes non-standard special effects like the .44 gap flash and the .35-800 ejector plume
* Removed the old unused satelite deco blocks, freeing up 6 block IDs
* Removed the old unused satellite deco blocks, freeing up 6 block IDs
* Crucibles that smelt metal with no template set will no place the metal in the recipe stack instead of the waste stack, this should make it easier to get a recipe to work in the many, many cases where people add the template after smelting the material
* Battery sockets and the FENSU now support the copy tool
* Removed unused displaylist support from the model loader
@ -14,12 +14,12 @@
* Rebranded canned horse slime
* Now with extra bone marrow
* Updated the deuterium tower's model
* Increased the energy requirement for welding osmiridium
* Updated most blast door visuals
* RBMKs now have QMAW pages
* Updated the model on the heavy magnetic storage container
* Increased the power draw on the osmiridium welding recipe
* Bullet casings now make sounds when falling to the ground
* Most ammo types now have QMAW pages, including information on whether or not they are a war crime
# Fixed
* Potentially fixed yet another issue regarding crates
@ -30,3 +30,5 @@
* Fixed an issue where the charging station would crash when trying to charge certain items
* Fixed the DFC's core component not dropping its contents when mined
* Fixed audio problems with guns
* Fixed third person muzzleflash on the miniguns clipping the barrel
* Fixed arc furnace IO slots stacking items with incompatible NBT

View File

@ -1192,17 +1192,8 @@ public class ModBlocks {
public static Block corium_block;
public static Fluid corium_fluid;
public static final Material fluidcorium = (new MaterialLiquid(MapColor.brownColor) {
@Override
public boolean blocksMovement() {
return true;
}
@Override
public Material setImmovableMobility() { //override access modifier
return super.setImmovableMobility();
}
@Override public boolean blocksMovement() { return true; }
@Override public Material setImmovableMobility() { return super.setImmovableMobility(); } //override access modifier
}.setImmovableMobility());
public static Block volcanic_lava_block;

View File

@ -4,12 +4,12 @@ import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.interfaces.IBomb;
import com.hbm.items.special.ItemDoorSkin;
import com.hbm.tileentity.DoorDecl;
import com.hbm.tileentity.TileEntityDoorGeneric;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.util.fauxpointtwelve.Rotation;
import api.hbm.block.IToolable;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
@ -23,7 +23,7 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockDoorGeneric extends BlockDummyable implements IBomb {
public class BlockDoorGeneric extends BlockDummyable implements IBomb, IToolable {
public DoorDecl type;
@ -69,20 +69,29 @@ public class BlockDoorGeneric extends BlockDummyable implements IBomb {
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer playerIn, int side, float hitX, float hitY, float hitZ){
if(!world.isRemote && !playerIn.isSneaking()) {
int[] pos1 = findCore(world, x, y, z);
if(pos1 == null)
return false;
if(pos1 == null) return false;
TileEntityDoorGeneric door = (TileEntityDoorGeneric) world.getTileEntity(pos1[0], pos1[1], pos1[2]);
if(door != null) {
if(playerIn.getHeldItem() != null && playerIn.getHeldItem().getItem() instanceof ItemDoorSkin) {
return door.setSkinIndex((byte) playerIn.getHeldItem().getItemDamage());
} else {
return door.tryToggle(playerIn);
}
return door.tryToggle(playerIn);
}
}
return !playerIn.isSneaking();
}
@Override
public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) {
if(tool != ToolType.SCREWDRIVER || !player.isSneaking()) return false;
int[] pos1 = findCore(world, x, y, z);
if(pos1 == null) return false;
TileEntityDoorGeneric door = (TileEntityDoorGeneric) world.getTileEntity(pos1[0], pos1[1], pos1[2]);
if(door == null || !door.getDoorType().hasSkins()) return false;
if(world.isRemote) return true;
door.cycleSkinIndex();
return true;
}
@Override
public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {

View File

@ -11,8 +11,8 @@ import com.hbm.blocks.ModBlocks;
import com.hbm.handler.imc.ICompatNHNEI;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.gui.GUIMachineShredder;
import com.hbm.inventory.recipes.MachineRecipes;
import com.hbm.inventory.recipes.ShredderRecipes;
import com.hbm.items.ModItems;
import com.hbm.lib.RefStrings;
import codechicken.nei.NEIServerUtils;
@ -175,9 +175,18 @@ public class ShredderRecipeHandler extends TemplateRecipeHandler implements ICom
public TemplateRecipeHandler newInstance() {
if(fuels == null || fuels.isEmpty())
fuels = new ArrayList<Fuel>();
for(ItemStack i : MachineRecipes.instance().getBlades()) {
for(ItemStack i : getBlades()) {
fuels.add(new Fuel(i));
}
return super.newInstance();
}
public static ArrayList<ItemStack> getBlades() {
ArrayList<ItemStack> fuels = new ArrayList<ItemStack>();
fuels.add(new ItemStack(ModItems.blades_advanced_alloy));
fuels.add(new ItemStack(ModItems.blades_steel));
fuels.add(new ItemStack(ModItems.blades_titanium));
fuels.add(new ItemStack(ModItems.blades_desh));
return fuels;
}
}

View File

@ -12,7 +12,6 @@ import com.hbm.util.Tuple.Triplet;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.oredict.OreDictionary;
@ -50,42 +49,12 @@ public class MachineRecipes {
ArrayList<ItemStack> fuels = new ArrayList<ItemStack>();
fuels.add(new ItemStack(ModItems.battery_potato));
fuels.add(new ItemStack(ModItems.battery_potatos));
fuels.add(new ItemStack(ModItems.fusion_core));
fuels.add(new ItemStack(ModItems.energy_core));
for(EnumBatteryPack num : EnumBatteryPack.values()) fuels.add(new ItemStack(ModItems.battery_pack, 1, num.ordinal()));
for(EnumBatterySC num : EnumBatterySC.values()) fuels.add(new ItemStack(ModItems.battery_sc, 1, num.ordinal()));
fuels.add(new ItemStack(ModItems.battery_creative));
return fuels;
}
public ArrayList<ItemStack> getBlades() {
ArrayList<ItemStack> fuels = new ArrayList<ItemStack>();
fuels.add(new ItemStack(ModItems.blades_advanced_alloy));
fuels.add(new ItemStack(ModItems.blades_steel));
fuels.add(new ItemStack(ModItems.blades_titanium));
fuels.add(new ItemStack(ModItems.blades_desh));
return fuels;
}
public static boolean mODE(Item item, String[] names) {
return mODE(new ItemStack(item), names);
}
public static boolean mODE(ItemStack item, String[] names) {
boolean flag = false;
if(names.length > 0) {
for(int i = 0; i < names.length; i++) {
if(mODE(item, names[i]))
flag = true;
}
}
return flag;
}
public static boolean mODE(Item item, String name) {
return mODE(new ItemStack(item), name);
}
//Matches Ore Dict Entry
public static boolean mODE(ItemStack stack, String name) {

View File

@ -1347,16 +1347,6 @@ public class ModItems {
public static Item mp_chip_4;
public static Item mp_chip_5;
public static Item missile_skin_camo;
public static Item missile_skin_desert;
public static Item missile_skin_flames;
public static Item missile_skin_manly_pink;
public static Item missile_skin_orange_insulation;
public static Item missile_skin_sleek;
public static Item missile_skin_soviet_glory;
public static Item missile_skin_soviet_stank;
public static Item missile_skin_metal;
public static Item missile_custom;
public static Item missile_soyuz;
@ -2135,8 +2125,6 @@ public class ModItems {
public static Item door_bunker;
public static Item door_red;
public static Item sliding_blast_door_skin;
public static Item record_lc;
public static Item record_ss;
public static Item record_vc;
@ -3680,16 +3668,6 @@ public class ModItems {
mp_chip_4 = new ItemCustomMissilePart().makeChip(0.005F) .setUnlocalizedName("mp_c_4").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_4");
mp_chip_5 = new ItemCustomMissilePart().makeChip(0.0F) .setUnlocalizedName("mp_c_5").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":mp_c_5");
missile_skin_camo = new ItemCustomLore().setUnlocalizedName("missile_skin_camo").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_camo");
missile_skin_desert = new ItemCustomLore().setUnlocalizedName("missile_skin_desert").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_desert");
missile_skin_flames = new ItemCustomLore().setUnlocalizedName("missile_skin_flames").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_flames");
missile_skin_manly_pink = new ItemCustomLore().setUnlocalizedName("missile_skin_manly_pink").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_manly_pink");
missile_skin_orange_insulation = new ItemCustomLore().setUnlocalizedName("missile_skin_orange_insulation").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_orange_insulation");
missile_skin_sleek = new ItemCustomLore().setUnlocalizedName("missile_skin_sleek").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_sleek");
missile_skin_soviet_glory = new ItemCustomLore().setUnlocalizedName("missile_skin_soviet_glory").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_soviet_glory");
missile_skin_soviet_stank = new ItemCustomLore().setUnlocalizedName("missile_skin_soviet_stank").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_soviet_stank");
missile_skin_metal = new ItemCustomLore().setUnlocalizedName("missile_skin_metal").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_skin_metal");
ammo_shell = (ItemEnumMulti) new ItemAmmo(Ammo240Shell.class).setCreativeTab(MainRegistry.weaponTab).setUnlocalizedName("ammo_shell");
ammo_dgk = new ItemCustomLore().setUnlocalizedName("ammo_dgk").setCreativeTab(MainRegistry.weaponTab);
ammo_fireext = (ItemEnumMulti) new ItemAmmo(AmmoFireExt.class).setCreativeTab(MainRegistry.weaponTab).setUnlocalizedName("ammo_fireext");
@ -4850,8 +4828,6 @@ public class ModItems {
door_bunker = new ItemModDoor().setUnlocalizedName("door_bunker").setCreativeTab(MainRegistry.blockTab).setTextureName(RefStrings.MODID + ":door_bunker");
door_red = new ItemModDoor().setUnlocalizedName("door_red").setCreativeTab(null).setTextureName(RefStrings.MODID + ":door_red");
sliding_blast_door_skin = new ItemSlidingBlastDoorSkin().setUnlocalizedName("sliding_blast_door_skin").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":sliding_blast_door_default");
record_lc = new ItemModRecord("lc").setUnlocalizedName("record_lc").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_lc");
record_ss = new ItemModRecord("ss").setUnlocalizedName("record_ss").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_ss");
record_vc = new ItemModRecord("vc").setUnlocalizedName("record_vc").setCreativeTab(CreativeTabs.tabMisc).setTextureName(RefStrings.MODID + ":record_vc");
@ -7032,7 +7008,6 @@ public class ModItems {
GameRegistry.registerItem(door_office, door_office.getUnlocalizedName());
GameRegistry.registerItem(door_bunker, door_bunker.getUnlocalizedName());
GameRegistry.registerItem(door_red, door_red.getUnlocalizedName());
GameRegistry.registerItem(sliding_blast_door_skin, sliding_blast_door_skin.getUnlocalizedName());
//Records
GameRegistry.registerItem(record_lc, record_lc.getUnlocalizedName());

View File

@ -1,36 +0,0 @@
package com.hbm.items.special;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import java.util.List;
public class ItemDoorSkin extends Item {
protected final IIcon[] icons;
public ItemDoorSkin(int skinCount) {
setMaxStackSize(1);
icons = new IIcon[skinCount];
}
@Override
public boolean getHasSubtypes() {
return true;
}
@Override
public void getSubItems(Item item, CreativeTabs creativeTabs, List list) {
for(int i = 0; i < icons.length; i++) {
list.add(new ItemStack(item, 1, i));
}
}
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamage(int meta) {
return icons[meta];
}
}

View File

@ -1,28 +0,0 @@
package com.hbm.items.special;
import com.hbm.lib.RefStrings;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.item.ItemStack;
public class ItemSlidingBlastDoorSkin extends ItemDoorSkin {
public ItemSlidingBlastDoorSkin() {
super(3);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister reg) {
this.itemIcon = reg.registerIcon(this.getIconString());
this.icons[0] = reg.registerIcon(RefStrings.MODID + ":sliding_blast_door_default");
this.icons[1] = reg.registerIcon(RefStrings.MODID + ":sliding_blast_door_variant1");
this.icons[2] = reg.registerIcon(RefStrings.MODID + ":sliding_blast_door_variant2");
}
@Override
public String getUnlocalizedName(ItemStack stack) {
return super.getUnlocalizedName(stack) + "." + stack.getItemDamage();
}
}

View File

@ -71,7 +71,7 @@ public class XFactory50 {
.setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50ap"));
bmg50_du = new BulletConfig().setItem(EnumAmmo.BMG50_DU).setCasing(EnumCasingType.LARGE_STEEL, 12).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.5F).setThresholdNegation(21F).setArmorPiercing(0.25F)
.setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50du"));
bmg50_he = new BulletConfig().setItem(EnumAmmo.BMG50_HE).setCasing(EnumCasingType.LARGE_STEEL, 12).setWear(3F).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(1.75F).setOnImpact(LAMBDA_STANDARD_EXPLODE)
bmg50_he = new BulletConfig().setItem(EnumAmmo.BMG50_HE).setCasing(EnumCasingType.LARGE_STEEL, 12).setWear(3F).setDamage(1.75F).setOnImpact(LAMBDA_STANDARD_EXPLODE)
.setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50he"));
bmg50_sm = new BulletConfig().setItem(EnumAmmo.BMG50_SM).setCasing(EnumCasingType.LARGE_STEEL, 6).setWear(10F).setDoesPenetrate(true).setDamageFalloffByPen(false).setDamage(2.5F).setThresholdNegation(30F).setArmorPiercing(0.35F)
.setCasing(casing50.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50sm"));

View File

@ -1072,11 +1072,6 @@ public class CraftingManager {
ModItems.circuit_star_piece.stackFromEnum(ScrapType.BOARD_BLANK)
});
addRecipeAuto(new ItemStack(ModItems.sliding_blast_door_skin), "SPS", "DPD", "SPS", 'P', Items.paper, 'D', "dye", 'S', STEEL.plate());
addShapelessAuto(new ItemStack(ModItems.sliding_blast_door_skin, 1, 1), new ItemStack(ModItems.sliding_blast_door_skin, 1, 0));
addShapelessAuto(new ItemStack(ModItems.sliding_blast_door_skin, 1, 2), new ItemStack(ModItems.sliding_blast_door_skin, 1, 1));
addShapelessAuto(new ItemStack(ModItems.sliding_blast_door_skin), new ItemStack(ModItems.sliding_blast_door_skin, 1, 2));
addRecipeAuto(new ItemStack(ModBlocks.cm_block, 4, 0), " I ", "IPI", " I ", 'I', STEEL.ingot(), 'P', STEEL.plateCast());
addRecipeAuto(new ItemStack(ModBlocks.cm_block, 4, 1), " I ", "IPI", " I ", 'I', ALLOY.ingot(), 'P', ALLOY.plateCast());
addRecipeAuto(new ItemStack(ModBlocks.cm_block, 4, 2), " I ", "IPI", " I ", 'I', DESH.ingot(), 'P', DESH.plateCast());

View File

@ -1477,6 +1477,7 @@ public class MainRegistry {
ignoreMappings.add("hbm:tile.sat_laser");
ignoreMappings.add("hbm:tile.sat_foeq");
ignoreMappings.add("hbm:tile.sat_resonator");
ignoreMappings.add("hbm:item.sliding_blast_door_skin");
/// REMAP ///
remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses);

View File

@ -342,6 +342,7 @@ public class ResourceManager {
public static final ResourceLocation pheo_seal_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/seal_door.png");
public static IModelCustomNamed pheo_seal_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/seal_door.obj")).asVBO();
public static final ResourceLocation pheo_secure_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/secure_door.png");
public static final ResourceLocation pheo_secure_door_grey_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/secure_door_grey.png");
public static IModelCustomNamed pheo_secure_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/secure_door.obj")).asVBO();
public static final ResourceLocation pheo_sliding_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/pheodoors/sliding_door.png");
public static IModelCustomNamed pheo_sliding_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/pheodoors/sliding_door.obj")).asVBO();

View File

@ -145,7 +145,7 @@ public class ItemRenderMinigun extends ItemRenderWeaponBase {
}
GL11.glPushMatrix();
GL11.glTranslated(0, 0, 12);
GL11.glTranslated(0, 0, 12.25);
GL11.glRotated(90, 0, 1, 0);
if(stack.getItem() == ModItems.gun_minigun_lacunae) {

View File

@ -134,7 +134,7 @@ public class ItemRenderMinigunDual extends ItemRenderWeaponBase {
}
GL11.glPushMatrix();
GL11.glTranslated(0, 0, 12);
GL11.glTranslated(0, 0, 12.25);
GL11.glRotated(90, 0, 1, 0);
GL11.glRotated(shotRand * 90, 1, 0, 0);
@ -164,7 +164,7 @@ public class ItemRenderMinigunDual extends ItemRenderWeaponBase {
}
GL11.glPushMatrix();
GL11.glTranslated(0, 0, 12);
GL11.glTranslated(0, 0, 12.25);
GL11.glRotated(90, 0, 1, 0);
GL11.glRotated(shotRand * 90, 1, 0, 0);

View File

@ -1,172 +0,0 @@
package com.hbm.render.loader;
import org.lwjgl.opengl.GL11;
import com.hbm.main.ResourceManager;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelBox;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.renderer.GLAllocation;
import net.minecraft.client.renderer.Tessellator;
public class ModelRendererTest extends ModelRenderer {
//TODO: blow up mojank HQ with a JDAM
private boolean compiled;
private int displayList;
public ModelRendererTest(ModelBase p_i1173_1_) {
super(p_i1173_1_);
}
public ModelRendererTest(ModelBase p_i1174_1_, int p_i1174_2_, int p_i1174_3_) {
this(p_i1174_1_);
this.setTextureOffset(p_i1174_2_, p_i1174_3_);
}
@SideOnly(Side.CLIENT)
public void render(float p_78785_1_) {
if(!this.isHidden) {
if(this.showModel) {
if(!this.compiled) {
this.compileDisplayList(p_78785_1_);
}
GL11.glTranslatef(this.offsetX, this.offsetY, this.offsetZ);
int i;
if(this.rotateAngleX == 0.0F && this.rotateAngleY == 0.0F && this.rotateAngleZ == 0.0F) {
if(this.rotationPointX == 0.0F && this.rotationPointY == 0.0F && this.rotationPointZ == 0.0F) {
GL11.glCallList(this.displayList);
if(this.childModels != null) {
for(i = 0; i < this.childModels.size(); ++i) {
((ModelRenderer) this.childModels.get(i)).render(p_78785_1_);
}
}
} else {
GL11.glTranslatef(this.rotationPointX * p_78785_1_, this.rotationPointY * p_78785_1_, this.rotationPointZ * p_78785_1_);
GL11.glCallList(this.displayList);
if(this.childModels != null) {
for(i = 0; i < this.childModels.size(); ++i) {
((ModelRenderer) this.childModels.get(i)).render(p_78785_1_);
}
}
GL11.glTranslatef(-this.rotationPointX * p_78785_1_, -this.rotationPointY * p_78785_1_, -this.rotationPointZ * p_78785_1_);
}
} else {
GL11.glPushMatrix();
GL11.glTranslatef(this.rotationPointX * p_78785_1_, this.rotationPointY * p_78785_1_, this.rotationPointZ * p_78785_1_);
if(this.rotateAngleZ != 0.0F) {
GL11.glRotatef(this.rotateAngleZ * (180F / (float) Math.PI), 0.0F, 0.0F, 1.0F);
}
if(this.rotateAngleY != 0.0F) {
GL11.glRotatef(this.rotateAngleY * (180F / (float) Math.PI), 0.0F, 1.0F, 0.0F);
}
if(this.rotateAngleX != 0.0F) {
GL11.glRotatef(this.rotateAngleX * (180F / (float) Math.PI), 1.0F, 0.0F, 0.0F);
}
GL11.glPushMatrix();
GL11.glScaled(0.1, 0.1, 0.1);
ResourceManager.chemplant_body.renderAll();
GL11.glPopMatrix();
//GL11.glCallList(this.displayList);
if(this.childModels != null) {
for(i = 0; i < this.childModels.size(); ++i) {
((ModelRenderer) this.childModels.get(i)).render(p_78785_1_);
}
}
GL11.glPopMatrix();
}
GL11.glTranslatef(-this.offsetX, -this.offsetY, -this.offsetZ);
}
}
}
@SideOnly(Side.CLIENT)
public void renderWithRotation(float p_78791_1_) {
if(!this.isHidden) {
if(this.showModel) {
if(!this.compiled) {
this.compileDisplayList(p_78791_1_);
}
GL11.glPushMatrix();
GL11.glTranslatef(this.rotationPointX * p_78791_1_, this.rotationPointY * p_78791_1_, this.rotationPointZ * p_78791_1_);
if(this.rotateAngleY != 0.0F) {
GL11.glRotatef(this.rotateAngleY * (180F / (float) Math.PI), 0.0F, 1.0F, 0.0F);
}
if(this.rotateAngleX != 0.0F) {
GL11.glRotatef(this.rotateAngleX * (180F / (float) Math.PI), 1.0F, 0.0F, 0.0F);
}
if(this.rotateAngleZ != 0.0F) {
GL11.glRotatef(this.rotateAngleZ * (180F / (float) Math.PI), 0.0F, 0.0F, 1.0F);
}
GL11.glCallList(this.displayList);
GL11.glPopMatrix();
}
}
}
@SideOnly(Side.CLIENT)
public void postRender(float p_78794_1_) {
if(!this.isHidden) {
if(this.showModel) {
if(!this.compiled) {
this.compileDisplayList(p_78794_1_);
}
if(this.rotateAngleX == 0.0F && this.rotateAngleY == 0.0F && this.rotateAngleZ == 0.0F) {
if(this.rotationPointX != 0.0F || this.rotationPointY != 0.0F || this.rotationPointZ != 0.0F) {
GL11.glTranslatef(this.rotationPointX * p_78794_1_, this.rotationPointY * p_78794_1_, this.rotationPointZ * p_78794_1_);
}
} else {
GL11.glTranslatef(this.rotationPointX * p_78794_1_, this.rotationPointY * p_78794_1_, this.rotationPointZ * p_78794_1_);
if(this.rotateAngleZ != 0.0F) {
GL11.glRotatef(this.rotateAngleZ * (180F / (float) Math.PI), 0.0F, 0.0F, 1.0F);
}
if(this.rotateAngleY != 0.0F) {
GL11.glRotatef(this.rotateAngleY * (180F / (float) Math.PI), 0.0F, 1.0F, 0.0F);
}
if(this.rotateAngleX != 0.0F) {
GL11.glRotatef(this.rotateAngleX * (180F / (float) Math.PI), 1.0F, 0.0F, 0.0F);
}
}
}
}
}
@SideOnly(Side.CLIENT)
private void compileDisplayList(float p_78788_1_) {
this.displayList = GLAllocation.generateDisplayLists(1);
GL11.glNewList(this.displayList, GL11.GL_COMPILE);
Tessellator tessellator = Tessellator.instance;
for(int i = 0; i < this.cubeList.size(); ++i) {
((ModelBox) this.cubeList.get(i)).render(tessellator, p_78788_1_);
}
GL11.glEndList();
this.compiled = true;
}
}

View File

@ -17,7 +17,10 @@ public class RenderSecureDoor implements IRenderDoors {
@Override
public void render(TileEntityDoorGeneric door, DoubleBuffer buf) {
Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.pheo_secure_door_tex);
Minecraft.getMinecraft().getTextureManager().bindTexture(
door.getSkinIndex() == 1 ?
ResourceManager.pheo_secure_door_grey_tex :
ResourceManager.pheo_secure_door_tex);
double maxRaise = 3.5;
double raise = 0;

View File

@ -113,7 +113,7 @@ public abstract class DoorDecl {
}
@Override
public BusAnimation getBusAnimation(byte state) {
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
if(state == TileEntityDoorGeneric.STATE_CLOSING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 1, 0).addPos(0, 0, 0, this.timeToOpen() * 50));
return null;
@ -164,7 +164,7 @@ public abstract class DoorDecl {
}
@Override
public BusAnimation getBusAnimation(byte state) {
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation()
.addBus("LOCK", new BusAnimationSequence().setPos(0, 0, 0).addPos(1, 0, 0, 200))
.addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 0, 0, 350).addPos(0, 0.05, 0, 200).addPos(0, 1, 0, 650, IType.SIN_UP));
@ -205,7 +205,7 @@ public abstract class DoorDecl {
}
@Override
public BusAnimation getBusAnimation(byte state) {
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
if(state == TileEntityDoorGeneric.STATE_CLOSING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 1, 0).addPos(0, 0, 0, this.timeToOpen() * 50));
return null;
@ -240,7 +240,7 @@ public abstract class DoorDecl {
}
@Override
public BusAnimation getBusAnimation(byte state) {
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
if(state == TileEntityDoorGeneric.STATE_CLOSING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 1, 0).addPos(0, 0, 0, this.timeToOpen() * 50));
return null;
@ -268,6 +268,11 @@ public abstract class DoorDecl {
return super.getBlockBound(x, y, z, open, forCollision);
}
}
@Override
public int getSkinCount() {
return 2;
}
};
public static final DoorDecl ROUND_AIRLOCK_DOOR = new DoorDecl() {
@ -282,7 +287,7 @@ public abstract class DoorDecl {
}
@Override
public BusAnimation getBusAnimation(byte state) {
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
if(state == TileEntityDoorGeneric.STATE_CLOSING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 1, 0).addPos(0, 0, 0, this.timeToOpen() * 50));
return null;
@ -323,7 +328,7 @@ public abstract class DoorDecl {
}
@Override
public BusAnimation getBusAnimation(byte state) {
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
if(state == TileEntityDoorGeneric.STATE_CLOSING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 1, 0).addPos(0, 0, 0, this.timeToOpen() * 50));
return null;
@ -359,7 +364,7 @@ public abstract class DoorDecl {
}
@Override
public BusAnimation getBusAnimation(byte state) {
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
if(state == TileEntityDoorGeneric.STATE_CLOSING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 1, 0).addPos(0, 0, 0, this.timeToOpen() * 50));
return null;
@ -397,7 +402,7 @@ public abstract class DoorDecl {
}
@Override
public BusAnimation getBusAnimation(byte state) {
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation()
.addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 0, 0, 1500).addPos(0, 1, 0, 1500, IType.SIN_FULL))
.addBus("BOLT", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 0, 1, 1500, IType.SIN_FULL));
@ -596,7 +601,7 @@ public abstract class DoorDecl {
}
@Override
public BusAnimation getBusAnimation(byte state) {
public BusAnimation getBusAnimation(byte state, byte skinIndex) {
if(state == TileEntityDoorGeneric.STATE_OPENING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 0, 0).addPos(0, 1, 0, this.timeToOpen() * 50));
if(state == TileEntityDoorGeneric.STATE_CLOSING) return new BusAnimation().addBus("DOOR", new BusAnimationSequence().setPos(0, 1, 0).addPos(0, 0, 0, this.timeToOpen() * 50));
return null;
@ -629,21 +634,14 @@ public abstract class DoorDecl {
public abstract int[] getDimensions();
public int getBlockOffset() {
return 0;
}
public boolean remoteControllable() {
return false;
}
public int getBlockOffset() { return 0; }
public boolean remoteControllable() { return false; }
public float getDoorRangeOpenTime(int ticks, int idx) {
return getNormTime(ticks);
}
public int timeToOpen() {
return 20;
}
public int timeToOpen() { return 20; }
public float getNormTime(float time) {
return getNormTime(time, 0, timeToOpen());
@ -653,13 +651,8 @@ public abstract class DoorDecl {
return BobMathUtil.remap01_clamp(time, min, max);
}
public boolean hasSkins() {
return getSkinCount() > 0;
}
public int getSkinCount() {
return 0;
}
public boolean hasSkins() { return getSkinCount() > 0; }
public int getSkinCount() { return 0; }
@SideOnly(Side.CLIENT)
public ResourceLocation getTextureForPart(String partName) {
@ -672,37 +665,20 @@ public abstract class DoorDecl {
@SideOnly(Side.CLIENT) public Animation getAnim() { return null; }
@SideOnly(Side.CLIENT)
public void getTranslation(String partName, float openTicks, boolean child, float[] trans) {
set(trans, 0, 0, 0);
}
public void getTranslation(String partName, float openTicks, boolean child, float[] trans) { set(trans, 0, 0, 0); }
@SideOnly(Side.CLIENT)
public void getRotation(String partName, float openTicks, float[] rot) {
set(rot, 0, 0, 0);
}
public void getRotation(String partName, float openTicks, float[] rot) { set(rot, 0, 0, 0); }
@SideOnly(Side.CLIENT)
public void getOrigin(String partName, float[] orig) {
set(orig, 0, 0, 0);
}
public void getOrigin(String partName, float[] orig) { set(orig, 0, 0, 0); }
@SideOnly(Side.CLIENT)
public boolean doesRender(String partName, boolean child) {
return true;
}
public boolean doesRender(String partName, boolean child) { return true; }
private static final String[] nothing = new String[] {};
@SideOnly(Side.CLIENT)
public String[] getChildren(String partName) {
return nothing;
}
public String[] getChildren(String partName) { return nothing; }
@SideOnly(Side.CLIENT)
public double[][] getClippingPlanes() {
return new double[][] {};
}
public double[][] getClippingPlanes() { return new double[][] {}; }
@SideOnly(Side.CLIENT)
public void doOffsetTransform() { }
@ -710,42 +686,18 @@ public abstract class DoorDecl {
return open ? AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0) : AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1);
}
public boolean isLadder(boolean open) {
return false;
}
public String getOpenSoundLoop() {
return null;
}
public boolean isLadder(boolean open) { return false; }
public String getOpenSoundLoop() { return null; }
// Hack
public String getSoundLoop2() {
return null;
}
public String getSoundLoop2() { return null; }
public String getCloseSoundLoop() { return getOpenSoundLoop(); }
public String getOpenSoundStart() { return null; }
public String getCloseSoundStart() { return getOpenSoundStart(); }
public String getOpenSoundEnd() { return null; }
public String getCloseSoundEnd() { return getOpenSoundEnd(); }
public String getCloseSoundLoop() {
return getOpenSoundLoop();
}
public String getOpenSoundStart() {
return null;
}
public String getCloseSoundStart() {
return getOpenSoundStart();
}
public String getOpenSoundEnd() {
return null;
}
public String getCloseSoundEnd() {
return getOpenSoundEnd();
}
public float getSoundVolume() {
return 1;
}
public float getSoundVolume() { return 1; }
public float[] set(float[] f, float x, float y, float z) {
f[0] = x;
@ -756,10 +708,10 @@ public abstract class DoorDecl {
// keyframe animation system sneakily stitched into the door decl
public IRenderDoors getSEDNARenderer() { return null; }
public BusAnimation getBusAnimation(byte state) { return null; }
public BusAnimation getBusAnimation(byte state, byte skinIndex) { return null; }
public com.hbm.render.anim.HbmAnimations.Animation getSEDNAAnim(byte state) {
BusAnimation anim = this.getBusAnimation(state);
public com.hbm.render.anim.HbmAnimations.Animation getSEDNAAnim(byte state, byte skinIndex) {
BusAnimation anim = this.getBusAnimation(state, skinIndex);
if(anim != null) return new com.hbm.render.anim.HbmAnimations.Animation("DOOR_ANIM", System.currentTimeMillis(), anim);
return null;
}

View File

@ -24,13 +24,13 @@ import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityDoorGeneric extends TileEntityLockableBase {
public static byte STATE_CLOSED = 0;
public static byte STATE_OPEN = 1;
public static byte STATE_CLOSING = 2;
public static byte STATE_OPENING = 3;
public static final byte STATE_CLOSED = 0;
public static final byte STATE_OPEN = 1;
public static final byte STATE_CLOSING = 2;
public static final byte STATE_OPENING = 3;
//0: closed, 1: open, 2: closing, 3: opening
public byte state = 0;
public byte state = STATE_CLOSED;
protected DoorDecl doorType;
public int openTicks = 0;
public long animStartTime = 0;
@ -47,16 +47,13 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
@Override
public void updateEntity() {
if(state == 3) {
if(state == STATE_OPENING) {
openTicks++;
if(openTicks >= getDoorType().timeToOpen()) {
openTicks = getDoorType().timeToOpen();
}
} else if(state == 2) {
if(openTicks >= getDoorType().timeToOpen()) openTicks = getDoorType().timeToOpen();
} else if(state == STATE_CLOSING) {
openTicks--;
if(openTicks <= 0) {
openTicks = 0;
}
if(openTicks <= 0) openTicks = 0;
}
if(!worldObj.isRemote) {
@ -66,7 +63,7 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
int[][] ranges = getDoorType().getDoorOpenRanges();
ForgeDirection dir = ForgeDirection.getOrientation(getBlockMetadata() - BlockDummyable.offset);
if(state == 3) {
if(state == STATE_OPENING) {
for(int i = 0; i < ranges.length; i++) {
@ -102,7 +99,7 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
}
}
} else if(state == 2) {
} else if(state == STATE_CLOSING) {
for(int i = 0; i < ranges.length; i++) {
@ -139,18 +136,18 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
}
}
}
if(state == 3 && openTicks == getDoorType().timeToOpen()) {
state = 1;
if(state == STATE_OPENING && openTicks == getDoorType().timeToOpen()) {
state = STATE_OPEN;
}
if(state == 2 && openTicks == 0) {
state = 0;
if(state == STATE_CLOSING && openTicks == 0) {
state = STATE_CLOSED;
}
this.networkPackNT(100);
if(redstonePower == -1 && state == 1) {
if(redstonePower == -1 && state == STATE_OPEN) {
tryToggle(-1);
} else if(redstonePower > 0 && state == 0) {
} else if(redstonePower > 0 && state == STATE_CLOSED) {
tryToggle(-1);
}
if(redstonePower == -1) {
@ -169,7 +166,7 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
@Override
public void deserialize(ByteBuf buf) {
handleNewState(buf.readByte());
setSkinIndex(buf.readByte());
skinIndex = buf.readByte();
shouldUseBB = buf.readBoolean();
}
@ -197,36 +194,31 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
if(this.isLocked() && player == null) return false;
if(state == 0 && redstonePower > 0) {
if(state == STATE_CLOSED && redstonePower > 0) {
//Redstone "power locks" doors, just like minecraft iron doors
return false;
}
if(this.state == 0) {
if(!worldObj.isRemote && canAccess(player)) {
this.state = 3;
}
if(this.state == STATE_CLOSED) {
if(!worldObj.isRemote && canAccess(player)) this.state = STATE_OPENING;
return true;
} else if(this.state == 1) {
if(!worldObj.isRemote && canAccess(player)) {
this.state = 2;
}
} else if(this.state == STATE_OPEN) {
if(!worldObj.isRemote && canAccess(player)) this.state = STATE_CLOSING;
return true;
}
return false;
}
public boolean tryToggle(int passcode) {
if(this.isLocked() && passcode != this.lock)
return false;
if(this.state == 0) {
if(!worldObj.isRemote) {
this.state = 3;
}
if(this.isLocked() && passcode != this.lock) return false;
if(this.state == STATE_CLOSED) {
if(!worldObj.isRemote) this.state = STATE_OPENING;
return true;
} else if(this.state == 1) {
if(!worldObj.isRemote) {
this.state = 2;
}
} else if(this.state == STATE_OPEN) {
if(!worldObj.isRemote) this.state = STATE_CLOSING;
return true;
}
return false;
@ -238,7 +230,7 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
if(this.state != state) {
DoorDecl doorType = getDoorType();
if(this.state == 0 && state == 3) { // Door transitioning to open
if(this.state == STATE_CLOSED && state == STATE_OPENING) { // Door transitioning to open
if(audio != null) {
audio.stopSound();
audio.setKeepAlive(0);
@ -261,7 +253,7 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
}
}
if(this.state == 1 && state == 2) { // Door transitioning to closed
if(this.state == STATE_OPEN && state == STATE_CLOSING) { // Door transitioning to closed
if(audio != null) {
audio.stopSound();
}
@ -283,7 +275,7 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
}
}
if(state == 1 || state == 0) { // Door finished any transition
if(state == STATE_OPEN || state == STATE_CLOSED) { // Door finished any transition
if(audio != null) {
audio.stopSound();
audio = null;
@ -294,13 +286,13 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
}
}
if(this.state == 3 && state == 1) { // Door finished transitioning to open
if(this.state == STATE_OPENING && state == STATE_OPEN) { // Door finished transitioning to open
if(doorType.getOpenSoundEnd() != null) {
worldObj.playSound(xCoord, yCoord, zCoord, doorType.getOpenSoundEnd(), doorType.getSoundVolume(), 1F, false);
}
}
if(this.state == 2 && state == 0) { // Door finished transitioning to closed
if(this.state == STATE_CLOSING && state == STATE_CLOSED) { // Door finished transitioning to closed
if(doorType.getCloseSoundEnd() != null) {
worldObj.playSound(xCoord, yCoord, zCoord, doorType.getCloseSoundEnd(), doorType.getSoundVolume(), 1F, false);
}
@ -308,10 +300,10 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
this.state = state;
if(state > 1) animStartTime = System.currentTimeMillis();
if(state == STATE_OPENING || state == STATE_CLOSING) {
currentAnimation = this.doorType.getSEDNAAnim(state);
animStartTime = System.currentTimeMillis();
currentAnimation = this.doorType.getSEDNAAnim(state, this.skinIndex);
}
}
}
@ -320,23 +312,21 @@ public class TileEntityDoorGeneric extends TileEntityLockableBase {
return skinIndex;
}
public boolean setSkinIndex(byte skinIndex) {
if(!getDoorType().hasSkins())
return false;
if(getDoorType().getSkinCount() < skinIndex) {
return false;
}
this.skinIndex = skinIndex;
public boolean cycleSkinIndex() {
if(!getDoorType().hasSkins()) return false;
this.skinIndex++;
this.skinIndex %= getDoorType().getSkinCount();
this.markDirty();
return true;
}
/**Useful for logic block interactions, as a way to close/open doors**/
public void open(){
if(state == 0) state = 3;
if(state == STATE_CLOSED) state = STATE_OPENING;
}
public void close() {
if(state == 1) state = 2;
if(state == STATE_OPEN) state = STATE_CLOSING;
}
@Override

View File

@ -242,20 +242,6 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl
}
if(this.lid != this.prevLid && this.lid < this.prevLid && this.lid > 0.5F && this.hasMaterial && MainRegistry.proxy.me().getDistance(xCoord + 0.5, yCoord + 4, zCoord + 0.5) < 50) {
/*NBTTagCompound data = new NBTTagCompound();
data.setString("type", "tower");
data.setFloat("lift", 0.01F);
data.setFloat("base", 0.5F);
data.setFloat("max", 2F);
data.setInteger("life", 50 + worldObj.rand.nextInt(20));
data.setDouble("posX", xCoord + 0.5 + worldObj.rand.nextGaussian() * 0.25);
data.setDouble("posZ", zCoord + 0.5 + worldObj.rand.nextGaussian() * 0.25);
data.setDouble("posY", yCoord + 4);
data.setBoolean("noWind", true);
data.setFloat("alphaMod", prevLid / lid);
data.setInteger("color", 0x808080);
data.setFloat("strafe", 0.15F);
MainRegistry.proxy.effectNT(data);*/
if(worldObj.rand.nextInt(5) == 0) {
NBTTagCompound flame = new NBTTagCompound();
@ -286,7 +272,7 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl
// add to existing stacks
for(int i /* ingredient */ = 5; i < 25; i++) {
if(slots[i] == null) continue;
if(!slots[q].isItemEqual(slots[i])) continue;
if(!slots[q].isItemEqual(slots[i]) || !ItemStack.areItemStackTagsEqual(slots[q], slots[i])) continue;
int toMove = BobMathUtil.min(slots[i].getMaxStackSize() - slots[i].stackSize, slots[q].stackSize, max - slots[i].stackSize);
if(toMove > 0) {
this.decrStackSize(q, toMove);

View File

@ -57,9 +57,9 @@ public class TileEntityMachineOrbus extends TileEntityBarrel {
xCoord - 2,
yCoord,
zCoord - 2,
xCoord + 2,
xCoord + 3,
yCoord + 5,
zCoord + 2
zCoord + 3
);
}

View File

@ -0,0 +1,20 @@
{
"name": "Armor Piercing Bullet",
"icon": ["hbm:item.ammo_standard", 1, 31],
"trigger": [
["hbm:item.ammo_standard", 1, 8],
["hbm:item.ammo_standard", 1, 14],
["hbm:item.ammo_standard", 1, 19],
["hbm:item.ammo_standard", 1, 23],
["hbm:item.ammo_standard", 1, 88],
["hbm:item.ammo_standard", 1, 27],
["hbm:item.ammo_standard", 1, 31],
["hbm:item.ammo_standard", 1, 36]
],
"title": {
"en_US": "Armor Piercing Bullet"
},
"content": {
"en_US": "AP rounds are similar to FMJ rounds, but using hardened steel jackets and significantly higher powder load. Not only do APs deal more damage and pierce through armor more effectively, but they can also penetrate their target."
}
}

View File

@ -0,0 +1,14 @@
{
"name": "Buckshot",
"icon": ["hbm:item.ammo_standard", 1, 44],
"trigger": [
["hbm:item.ammo_standard", 1, 44],
["hbm:item.ammo_standard", 1, 78]
],
"title": {
"en_US": "Buckshot"
},
"content": {
"en_US": "Standard shot, creates many low-damage pellets with considerable spread. Sometimes it's hard to beat the classics."
}
}

View File

@ -0,0 +1,14 @@
{
"name": "Magnum Buckshot",
"icon": ["hbm:item.ammo_standard", 1, 47],
"trigger": [
["hbm:item.ammo_standard", 1, 42],
["hbm:item.ammo_standard", 1, 47]
],
"title": {
"en_US": "Magnum Buckshot"
},
"content": {
"en_US": "Buckshot, but with fewer larger pellets which deal more damage. While black powder magnum shells don't perform that much better compared to buckshot, smokeless powder ones are noticably more powerful. Additionally, magnum buckshot shells have roughly half as much spread as standard buckshot."
}
}

View File

@ -0,0 +1,13 @@
{
"name": "Shrapnel Buckshot",
"icon": ["hbm:item.ammo_standard", 1, 79],
"trigger": [
["hbm:item.ammo_standard", 1, 79]
],
"title": {
"en_US": "Shrapnel Buckshot"
},
"content": {
"en_US": "A more devious version of standard buckshot, identical in most ways except that the pellets are incredibly bouncy, ricocheting off of most surfaces multiple times. May be hazardous to the user when used in enclosed spaces."
}
}

View File

@ -0,0 +1,15 @@
{
"name": "Demolition Explosives",
"icon": ["hbm:item.ammo_standard", 1, 60],
"trigger": [
["hbm:item.ammo_standard", 1, 55],
["hbm:item.ammo_standard", 1, 60],
["hbm:item.ammo_standard", 1, 74]
],
"title": {
"en_US": "Demolition Explosives"
},
"content": {
"en_US": "Demolition explosives are similar to regular high-explosives, however they have a larger splash radius, slightly lower damage, and they break blocks. Not recommended for home defense."
}
}

View File

@ -0,0 +1,16 @@
{
"name": "Depleted Uranium Bullet",
"icon": ["hbm:item.ammo_standard", 1, 32],
"trigger": [
["hbm:item.ammo_standard", 1, 89],
["hbm:item.ammo_standard", 1, 32],
["hbm:item.ammo_standard", 1, 37],
["hbm:item.ammo_standard", 1, 80]
],
"title": {
"en_US": "Depleted Uranium Bullet"
},
"content": {
"en_US": "Ammunition with depleted uranium in its core. The increased density and higher powder load causes this ammo type to have even better armor-piercing properties than AP ammo. The added punch causes the projectiles to penetrate.<br><br>Due to their intended effect being kinetic energy, rather than being poisonous, depleted uranium ammunition is not subject to the Hague Conventions of 1899 regarding use of poisonous projectiles in warfare."
}
}

View File

@ -0,0 +1,14 @@
{
"name": "FMJ Express Bullet",
"icon": ["hbm:item.ammo_standard", 1, 15],
"trigger": [
["hbm:item.ammo_standard", 1, 9],
["hbm:item.ammo_standard", 1, 15]
],
"title": {
"en_US": "FMJ Express Bullet"
},
"content": {
"en_US": "FMJ Express is a special type of full metal jacket ammo for revolver calibers. Express ammo has the same armor-pericing effects in addition to increased damage. Express projectiles can penetrate their targets, but unlike AP rounds, Express projectiles become weaker on every penetration. Due to the higher powder load in combination with the basic gunmetal casing, Express ammo causes the gun to wear faster."
}
}

View File

@ -0,0 +1,13 @@
{
"name": "Flechettes",
"icon": ["hbm:item.ammo_standard", 1, 46],
"trigger": [
["hbm:item.ammo_standard", 1, 46]
],
"title": {
"en_US": "Flechettes"
},
"content": {
"en_US": "Flechettes are small fin-stabilized projectiles, contrary to buckshot's round pellets. Flechette shells have less spread and better armor-piercing compared to standard buckshot."
}
}

View File

@ -0,0 +1,20 @@
{
"name": "Full Metal Jacket Bullet",
"icon": ["hbm:item.ammo_standard", 1, 29],
"trigger": [
["hbm:item.ammo_standard", 1, 6],
["hbm:item.ammo_standard", 1, 12],
["hbm:item.ammo_standard", 1, 17],
["hbm:item.ammo_standard", 1, 21],
["hbm:item.ammo_standard", 1, 86],
["hbm:item.ammo_standard", 1, 25],
["hbm:item.ammo_standard", 1, 29],
["hbm:item.ammo_standard", 1, 34]
],
"title": {
"en_US": "Full Metal Jacket Bullet"
},
"content": {
"en_US": "FMJs do not deform when hitting a soft target, meaning they deliver less damage. However, it allows them to pierce armor more effectively. All FMJs have some armor-piercing properties, as well as added damage threshold negation based on the caliber size."
}
}

View File

@ -0,0 +1,14 @@
{
"name": "High-Explosives",
"icon": ["hbm:item.ammo_standard", 1, 58],
"trigger": [
["hbm:item.ammo_standard", 1, 53],
["hbm:item.ammo_standard", 1, 58]
],
"title": {
"en_US": "High-Explosives"
},
"content": {
"en_US": "Standard ammunition for grenade and rocket launchers. Deals splash damage in a moderate area."
}
}

View File

@ -0,0 +1,17 @@
{
"name": "High-Explosive Ammunition",
"icon": ["hbm:item.ammo_standard", 1, 82],
"trigger": [
["hbm:item.ammo_standard", 1, 82],
["hbm:item.ammo_standard", 1, 83],
["hbm:item.ammo_standard", 1, 84],
["hbm:item.ammo_standard", 1, 48],
["hbm:item.ammo_standard", 1, 73]
],
"title": {
"en_US": "High-Explosive Ammunition"
},
"content": {
"en_US": "As one would expect, explosive ammunition deals explosive damage to its target, and the surroundings in a small radius. The resulting damage is noticably higher than the gun's base damage, at the cost of causing the gun to wear down significantly faster.<br><br>Use of explosive projectiles with a weight of less than 400 grams is prohibited by the Saint Petersburg Declaration of 1868."
}
}

View File

@ -0,0 +1,14 @@
{
"name": "Shaped Charges",
"icon": ["hbm:item.ammo_standard", 1, 59],
"trigger": [
["hbm:item.ammo_standard", 1, 54],
["hbm:item.ammo_standard", 1, 59]
],
"title": {
"en_US": "Shaped Charges"
},
"content": {
"en_US": "Special type of explosive munition with weaker splash damage compared to high-explosives, which deals massive extra damage on direct hit."
}
}

View File

@ -0,0 +1,14 @@
{
"name": "Incendiary Munitions",
"icon": ["hbm:item.ammo_standard", 1, 61],
"trigger": [
["hbm:item.ammo_standard", 1, 56],
["hbm:item.ammo_standard", 1, 61]
],
"title": {
"en_US": "Incendiary Munitions"
},
"content": {
"en_US": "Incendiary explosives leave behind lingering fire, which can ignite targets. The afterburn does not last very long, and can be extinguished with water.<br><br>Use of incendiary weapons against or near civilians is forbidden by the Geneva Conventions."
}
}

View File

@ -0,0 +1,20 @@
{
"name": "Jacketed Hollow Point Bullet",
"icon": ["hbm:item.ammo_standard", 1, 30],
"trigger": [
["hbm:item.ammo_standard", 1, 7],
["hbm:item.ammo_standard", 1, 13],
["hbm:item.ammo_standard", 1, 18],
["hbm:item.ammo_standard", 1, 22],
["hbm:item.ammo_standard", 1, 87],
["hbm:item.ammo_standard", 1, 26],
["hbm:item.ammo_standard", 1, 30],
["hbm:item.ammo_standard", 1, 35]
],
"title": {
"en_US": "Jacketed Hollow Point Bullet"
},
"content": {
"en_US": "JHPs are deforming bullets that cause more damage to soft targets compared to soft point bullets, at the cost of faring worse against armored targets. JHPs also have a higher bonus on headshots.<br><br>Due to being expanding projectiles, jacketed hollow points are prohibited for use in warfare under the Hague Conventions of 1899."
}
}

View File

@ -0,0 +1,13 @@
{
"name": "High Yield Mini Nuke",
"icon": ["hbm:item.ammo_standard", 1, 75],
"trigger": [
["hbm:item.ammo_standard", 1, 75]
],
"title": {
"en_US": "High Yield Mini Nuke"
},
"content": {
"en_US": "nuclear bobm<br>"
}
}

View File

@ -0,0 +1,15 @@
{
"name": "Black Powder Ammunition",
"icon": ["hbm:item.ammo_standard", 1, 10],
"trigger": [
["hbm:item.ammo_standard", 1, 4],
["hbm:item.ammo_standard", 1, 10],
["hbm:item.ammo_standard", 1, 41]
],
"title": {
"en_US": "Black Powder Ammunition"
},
"content": {
"en_US": "The earliest available type of cartridge, black powder ammo is available for revolver calibers and 12 gauge shells. For revolver calibers, black powder bullets are a variant of soft point bullets. Black powder shells however are available in buckshot, magnum shot and slug variants. Black powder ammo is very cheap, but deals significantly less damage and causes a large cloud of smoke on every shot."
}
}

View File

@ -0,0 +1,15 @@
{
"name": "Slug",
"icon": ["hbm:item.ammo_standard", 1, 45],
"trigger": [
["hbm:item.ammo_standard", 1, 43],
["hbm:item.ammo_standard", 1, 45],
["hbm:item.ammo_standard", 1, 81]
],
"title": {
"en_US": "Slug"
},
"content": {
"en_US": "A shell type that only holds a single large projectile. Unlike shot, slugs do not have inherent spread, deall the gun's full damage on hit, and have some armor-piercing properties."
}
}

View File

@ -0,0 +1,20 @@
{
"name": "Soft Point Bullet",
"icon": ["hbm:item.ammo_standard", 1, 28],
"trigger": [
["hbm:item.ammo_standard", 1, 5],
["hbm:item.ammo_standard", 1, 11],
["hbm:item.ammo_standard", 1, 16],
["hbm:item.ammo_standard", 1, 20],
["hbm:item.ammo_standard", 1, 85],
["hbm:item.ammo_standard", 1, 24],
["hbm:item.ammo_standard", 1, 28],
["hbm:item.ammo_standard", 1, 33]
],
"title": {
"en_US": "Soft Point Bullet"
},
"content": {
"en_US": "The \"default\" ammunition type for most guns. Soft point bullets do not change the gun's base damage, and don't have any armor-piercing properties.<br><br>Due to being expanding projectiles, soft points are prohibited for use in warfare under the Hague Conventions of 1899."
}
}

View File

@ -0,0 +1,13 @@
{
"name": "Starmetal Bullet",
"icon": ["hbm:item.ammo_standard", 1, 94],
"trigger": [
["hbm:item.ammo_standard", 1, 94]
],
"title": {
"en_US": "Starmetal Bullet"
},
"content": {
"en_US": "Cartridge with extra high powder load using a starmetal projectile. The density and stability of starmetal ensures that this projectile can punch through most armors, at the cost of the gun wearing ten times faster. Can only be used in anti-materiel rifles, as the chamber pressure is so high, it would blow automatic weapons apart."
}
}

View File

@ -0,0 +1,15 @@
{
"name": "White Phosphorus Munitions",
"icon": ["hbm:item.ammo_standard", 1, 62],
"trigger": [
["hbm:item.ammo_standard", 1, 49],
["hbm:item.ammo_standard", 1, 57],
["hbm:item.ammo_standard", 1, 62]
],
"title": {
"en_US": "White Phosphorus Munitions"
},
"content": {
"en_US": "White phosphorus ignites easily and is very hard to extinguish, causing significant afterburn damage which cannot be permanently extinguished by water. Lingering fire caused by WP explosions lasts longer than by conventinal incendiary explosives.<br><br>Use of incendiary weapons against or near civilians is forbidden by the Geneva Conventions."
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB