mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-02-21 13:32:28 +00:00
this is dave from microsoft, your computer has virus
This commit is contained in:
parent
843d3ea6cd
commit
aa40b57297
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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];
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -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"));
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -57,9 +57,9 @@ public class TileEntityMachineOrbus extends TileEntityBarrel {
|
||||
xCoord - 2,
|
||||
yCoord,
|
||||
zCoord - 2,
|
||||
xCoord + 2,
|
||||
xCoord + 3,
|
||||
yCoord + 5,
|
||||
zCoord + 2
|
||||
zCoord + 3
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
20
src/main/resources/assets/hbm/manual/weapon/ap.json
Normal file
20
src/main/resources/assets/hbm/manual/weapon/ap.json
Normal 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."
|
||||
}
|
||||
}
|
||||
14
src/main/resources/assets/hbm/manual/weapon/buckshot.json
Normal file
14
src/main/resources/assets/hbm/manual/weapon/buckshot.json
Normal 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."
|
||||
}
|
||||
}
|
||||
@ -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."
|
||||
}
|
||||
}
|
||||
@ -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."
|
||||
}
|
||||
}
|
||||
15
src/main/resources/assets/hbm/manual/weapon/demo.json
Normal file
15
src/main/resources/assets/hbm/manual/weapon/demo.json
Normal 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."
|
||||
}
|
||||
}
|
||||
16
src/main/resources/assets/hbm/manual/weapon/du.json
Normal file
16
src/main/resources/assets/hbm/manual/weapon/du.json
Normal 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."
|
||||
}
|
||||
}
|
||||
14
src/main/resources/assets/hbm/manual/weapon/express.json
Normal file
14
src/main/resources/assets/hbm/manual/weapon/express.json
Normal 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."
|
||||
}
|
||||
}
|
||||
13
src/main/resources/assets/hbm/manual/weapon/flechettes.json
Normal file
13
src/main/resources/assets/hbm/manual/weapon/flechettes.json
Normal 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."
|
||||
}
|
||||
}
|
||||
20
src/main/resources/assets/hbm/manual/weapon/fmj.json
Normal file
20
src/main/resources/assets/hbm/manual/weapon/fmj.json
Normal 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."
|
||||
}
|
||||
}
|
||||
14
src/main/resources/assets/hbm/manual/weapon/grenade.json
Normal file
14
src/main/resources/assets/hbm/manual/weapon/grenade.json
Normal 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."
|
||||
}
|
||||
}
|
||||
17
src/main/resources/assets/hbm/manual/weapon/he.json
Normal file
17
src/main/resources/assets/hbm/manual/weapon/he.json
Normal 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."
|
||||
}
|
||||
}
|
||||
14
src/main/resources/assets/hbm/manual/weapon/heat.json
Normal file
14
src/main/resources/assets/hbm/manual/weapon/heat.json
Normal 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."
|
||||
}
|
||||
}
|
||||
14
src/main/resources/assets/hbm/manual/weapon/incendiary.json
Normal file
14
src/main/resources/assets/hbm/manual/weapon/incendiary.json
Normal 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."
|
||||
}
|
||||
}
|
||||
20
src/main/resources/assets/hbm/manual/weapon/jhp.json
Normal file
20
src/main/resources/assets/hbm/manual/weapon/jhp.json
Normal 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."
|
||||
}
|
||||
}
|
||||
13
src/main/resources/assets/hbm/manual/weapon/muke.json
Normal file
13
src/main/resources/assets/hbm/manual/weapon/muke.json
Normal 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>"
|
||||
}
|
||||
}
|
||||
15
src/main/resources/assets/hbm/manual/weapon/powder.json
Normal file
15
src/main/resources/assets/hbm/manual/weapon/powder.json
Normal 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."
|
||||
}
|
||||
}
|
||||
15
src/main/resources/assets/hbm/manual/weapon/slug.json
Normal file
15
src/main/resources/assets/hbm/manual/weapon/slug.json
Normal 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."
|
||||
}
|
||||
}
|
||||
20
src/main/resources/assets/hbm/manual/weapon/softpoint.json
Normal file
20
src/main/resources/assets/hbm/manual/weapon/softpoint.json
Normal 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."
|
||||
}
|
||||
}
|
||||
13
src/main/resources/assets/hbm/manual/weapon/star.json
Normal file
13
src/main/resources/assets/hbm/manual/weapon/star.json
Normal 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."
|
||||
}
|
||||
}
|
||||
15
src/main/resources/assets/hbm/manual/weapon/wp.json
Normal file
15
src/main/resources/assets/hbm/manual/weapon/wp.json
Normal 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 |
Loading…
x
Reference in New Issue
Block a user