back mounted rocket launcher time

This commit is contained in:
Bob 2026-02-23 20:36:00 +01:00
parent 04708e8c90
commit f62fcc89cb
18 changed files with 242 additions and 19 deletions

View File

@ -5,11 +5,16 @@
* NCR Ranger Power Armor * NCR Ranger Power Armor
* Legendary set, like the remnants power armor * Legendary set, like the remnants power armor
* Stats are largely similar, but has a speed boost when sprinting * Stats are largely similar, but has a speed boost when sprinting
* Red room exclusive
* Comes with the power armor - melee controller item * Comes with the power armor - melee controller item
* If the full set is equipped, the melee controller allows for powerful melee attacks * If the full set is equipped, the melee controller allows for powerful melee attacks
* Left click does two rapid swings, right click causes both arms to swing at once * Left click does two rapid swings, right click causes both arms to swing at once
* The NCRPA's blades are armor-piercing and gib enemies on death * The NCRPA's blades are armor-piercing and gib enemies on death
* The blades do 250% damage on large enemies, i.e. ones with 100 or more max health * The blades do 250% damage on large enemies, i.e. ones with 100 or more max health
* And also the power armor - ranged controller
* Allows the NCRPA to fire rockets straight from the intentory
* Left click fires guided rockets and right click unguided ones
* Only does 25 damage max, but has no reload and a fire rate of 120 per minute
## Changed ## Changed
* Reworked the industrial turbine * Reworked the industrial turbine

View File

@ -205,10 +205,18 @@ public class BlockKeyhole extends BlockStone {
if(rand == 0) { if(rand == 0) {
world.setBlock(x, y + 1, z, ModBlocks.deco_loot); world.setBlock(x, y + 1, z, ModBlocks.deco_loot);
TileEntityLoot loot = (TileEntityLoot) world.getTileEntity(x, y + 1, z); TileEntityLoot loot = (TileEntityLoot) world.getTileEntity(x, y + 1, z);
if(world.rand.nextInt(5) == 0) {
loot.addItem(new ItemStack(ModItems.ncrpa_helmet), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.ncrpa_plate), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.ncrpa_legs), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.ncrpa_boots), 0, 0, 0);
} else {
loot.addItem(new ItemStack(ModItems.trenchmaster_helmet), 0, 0, 0); loot.addItem(new ItemStack(ModItems.trenchmaster_helmet), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.trenchmaster_plate), 0, 0, 0); loot.addItem(new ItemStack(ModItems.trenchmaster_plate), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.trenchmaster_legs), 0, 0, 0); loot.addItem(new ItemStack(ModItems.trenchmaster_legs), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.trenchmaster_boots), 0, 0, 0); loot.addItem(new ItemStack(ModItems.trenchmaster_boots), 0, 0, 0);
}
} else { } else {
spawnPedestalItem(world, x, y + 1, z); spawnPedestalItem(world, x, y + 1, z);
} }

View File

@ -103,6 +103,9 @@ public class WeaponRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_charge_thrower, 1), new Object[] { "MMM", "BBL", "GG ", 'M', GUNMETAL.mechanism(), 'B', STEEL.heavyBarrel(), 'G', STEEL.grip(), 'L', ANY_RUBBER.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_charge_thrower, 1), new Object[] { "MMM", "BBL", "GG ", 'M', GUNMETAL.mechanism(), 'B', STEEL.heavyBarrel(), 'G', STEEL.grip(), 'L', ANY_RUBBER.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_drill, 1), new Object[] { " GL", "IBP", " GL", 'G', GUNMETAL.ingot(), 'L', ANY_RUBBER.ingot(), 'I', TI.ingot(), 'B', STEEL.block(), 'P', ModItems.piston_selenium }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_drill, 1), new Object[] { " GL", "IBP", " GL", 'G', GUNMETAL.ingot(), 'L', ANY_RUBBER.ingot(), 'I', TI.ingot(), 'B', STEEL.block(), 'P', ModItems.piston_selenium });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_pa_melee, 1), new Object[] { " C ", "MWM", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'M', ModItems.motor, 'W', GOLD.wireDense() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_pa_ranged, 1), new Object[] { "C", "W", "P", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'P', ANY_PLASTIC.ingot(), 'W', GOLD.wireDense() });
//SEDNA Ammo //SEDNA Ammo
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE, 6), new Object[] { "C", "P", "G", 'C', KEY_COBBLESTONE, 'P', Items.paper, 'G', Items.gunpowder }); CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE, 6), new Object[] { "C", "P", "G", 'C', KEY_COBBLESTONE, 'P', Items.paper, 'G', Items.gunpowder });
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_AP, 6), new Object[] { "C", "P", "G", 'C', Items.flint, 'P', Items.paper, 'G', Items.gunpowder }); CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_AP, 6), new Object[] { "C", "P", "G", 'C', Items.flint, 'P', Items.paper, 'G', Items.gunpowder });

View File

@ -1440,6 +1440,7 @@ public class ModItems {
public static Item gun_charge_thrower; public static Item gun_charge_thrower;
public static Item gun_drill; public static Item gun_drill;
public static Item gun_pa_melee; public static Item gun_pa_melee;
public static Item gun_pa_ranged;
public static Item ammo_standard; public static Item ammo_standard;
public static Item ammo_secret; public static Item ammo_secret;
@ -6330,6 +6331,7 @@ public class ModItems {
GameRegistry.registerItem(gun_charge_thrower, gun_charge_thrower.getUnlocalizedName()); GameRegistry.registerItem(gun_charge_thrower, gun_charge_thrower.getUnlocalizedName());
GameRegistry.registerItem(gun_drill, gun_drill.getUnlocalizedName()); GameRegistry.registerItem(gun_drill, gun_drill.getUnlocalizedName());
GameRegistry.registerItem(gun_pa_melee, gun_pa_melee.getUnlocalizedName()); GameRegistry.registerItem(gun_pa_melee, gun_pa_melee.getUnlocalizedName());
GameRegistry.registerItem(gun_pa_ranged, gun_pa_ranged.getUnlocalizedName());
GameRegistry.registerItem(ammo_standard, ammo_standard.getUnlocalizedName()); GameRegistry.registerItem(ammo_standard, ammo_standard.getUnlocalizedName());
GameRegistry.registerItem(ammo_secret, ammo_secret.getUnlocalizedName()); GameRegistry.registerItem(ammo_secret, ammo_secret.getUnlocalizedName());

View File

@ -21,6 +21,8 @@ import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.IItemRenderer;
@ -53,8 +55,6 @@ public class ArmorNCRPA extends ArmorFSBPowered implements IItemRendererProvider
if(this != ModItems.ncrpa_plate) return; if(this != ModItems.ncrpa_plate) return;
HbmPlayerProps props = HbmPlayerProps.getData(player);
/// SPEED /// /// SPEED ///
Multimap multimap = super.getAttributeModifiers(stack); Multimap multimap = super.getAttributeModifiers(stack);
multimap.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), new AttributeModifier(speed, "NCRPA SPEED", 0.1, 0)); multimap.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), new AttributeModifier(speed, "NCRPA SPEED", 0.1, 0));
@ -63,6 +63,9 @@ public class ArmorNCRPA extends ArmorFSBPowered implements IItemRendererProvider
if(player.isSprinting()) { if(player.isSprinting()) {
player.getAttributeMap().applyAttributeModifiers(multimap); player.getAttributeMap().applyAttributeModifiers(multimap);
} }
if(world.getTotalWorldTime() % 20 != 0) return;
if(HbmPlayerProps.getData(player).enableHUD) player.addPotionEffect(new PotionEffect(Potion.nightVision.id, 300, 0, true));
} }
@Override public Item getItemForRenderer() { return this; } @Override public Item getItemForRenderer() { return this; }
@ -81,10 +84,17 @@ public class ArmorNCRPA extends ArmorFSBPowered implements IItemRendererProvider
} }
public static final ArmorNCRPAMelee meleeComponent = new ArmorNCRPAMelee(); public static final ArmorNCRPAMelee meleeComponent = new ArmorNCRPAMelee();
public static final ArmorNCRPARanged rangedComponent = new ArmorNCRPARanged();
@Override @Override
public IPAMelee getMeleeComponent(EntityPlayer entity) { public IPAMelee getMeleeComponent(EntityPlayer entity) {
if(this.hasFSBArmorIgnoreCharge(entity)) return meleeComponent; if(this.hasFSBArmorIgnoreCharge(entity)) return meleeComponent;
return null; return null;
} }
@Override
public IPARanged getRangedComponent(EntityPlayer entity) {
if(this.hasFSBArmorIgnoreCharge(entity)) return rangedComponent;
return null;
}
} }

View File

@ -0,0 +1,51 @@
package com.hbm.items.armor;
import com.hbm.entity.projectile.EntityBulletBaseMK4;
import com.hbm.items.weapon.sedna.BulletConfig;
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.GunState;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import com.hbm.items.weapon.sedna.factory.XFactoryRocket;
import com.hbm.items.weapon.sedna.mags.MagazineBelt;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public class ArmorNCRPARanged implements IPARanged {
public static MagazineBelt rocketSteerMag = new MagazineBelt();
public static MagazineBelt rocketMag = new MagazineBelt();
@Override public void clickPrimary(ItemStack stack, LambdaContext ctx) { fireRocket(stack, ctx, true); }
@Override public void clickSecondary(ItemStack stack, LambdaContext ctx) { fireRocket(stack, ctx, false); }
public static void fireRocket(ItemStack stack, LambdaContext ctx, boolean steer) {
EntityPlayer player = ctx.getPlayer();
GunState state = ItemGunBaseNT.getState(stack, 0);
MagazineBelt mag = steer ? rocketSteerMag : rocketMag;
if(state == GunState.IDLE) {
if(mag.acceptedBullets.isEmpty()) {
mag.addConfigs(steer ? XFactoryRocket.rocket_ncrpa_steer : XFactoryRocket.rocket_ncrpa);
}
BulletConfig cfg = mag.getType(stack, player.inventory);
int amount = mag.getAmount(stack, player.inventory);
if(amount > 0) {
mag.useUpAmmo(stack, player.inventory, 1);
EntityBulletBaseMK4 mk4 = new EntityBulletBaseMK4(player, cfg, 25, 0, 0.25F * (player.getRNG().nextBoolean() ? - 1 : 1), 0, 0);
player.worldObj.spawnEntityInWorld(mk4);
ItemGunBaseNT.setState(stack, 0, GunState.COOLDOWN);
ItemGunBaseNT.setTimer(stack, 0, 10);
player.worldObj.playSoundAtEntity(player, "hbm:weapon.rpgShoot", 0.5F, 0.9F + player.getRNG().nextFloat() * 0.2F);
player.inventoryContainer.detectAndSendChanges();
} else {
ItemGunBaseNT.setState(stack, 0, GunState.COOLDOWN);
ItemGunBaseNT.setTimer(stack, 0, 10);
player.worldObj.playSoundAtEntity(player, "hbm:weapon.reload.dryFireClick", 1F, 1F);
}
}
}
}

View File

@ -61,4 +61,6 @@ public class ArmorRPA extends ArmorFSBPowered implements IItemRendererProvider,
if(this.hasFSBArmorIgnoreCharge(entity)) return meleeComponent; if(this.hasFSBArmorIgnoreCharge(entity)) return meleeComponent;
return null; return null;
} }
@Override public IPARanged getRangedComponent(EntityPlayer entity) { return null; }
} }

View File

@ -0,0 +1,11 @@
package com.hbm.items.armor;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import net.minecraft.item.ItemStack;
public interface IPARanged {
public void clickPrimary(ItemStack stack, LambdaContext ctx);
public void clickSecondary(ItemStack stack, LambdaContext ctx);
}

View File

@ -19,4 +19,18 @@ public interface IPAWeaponsProvider {
} }
return null; return null;
} }
public IPARanged getRangedComponent(EntityPlayer entity);
public static IPARanged getRangedComponentClient() {
return getRangedComponentCommon(MainRegistry.proxy.me());
}
public static IPARanged getRangedComponentCommon(EntityPlayer player) {
if(player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() instanceof IPAWeaponsProvider) {
IPAWeaponsProvider prov = (IPAWeaponsProvider) player.inventory.armorInventory[2].getItem();
return prov.getRangedComponent(player);
}
return null;
}
} }

View File

@ -211,6 +211,8 @@ public class GunFactoryClient {
setRendererBulk(LegoClient.RENDER_RPZB, rocket_rpzb); setRendererBulk(LegoClient.RENDER_RPZB, rocket_rpzb);
setRendererBulk(LegoClient.RENDER_QD, rocket_qd); setRendererBulk(LegoClient.RENDER_QD, rocket_qd);
setRendererBulk(LegoClient.RENDER_ML, rocket_ml); setRendererBulk(LegoClient.RENDER_ML, rocket_ml);
setRendererBulk(LegoClient.RENDER_RPZB, rocket_ncrpa_steer);
setRendererBulk(LegoClient.RENDER_RPZB, rocket_ncrpa);
setRendererBulk(LegoClient.RENDER_NUKE, nuke_standard, nuke_demo, nuke_high); setRendererBulk(LegoClient.RENDER_NUKE, nuke_standard, nuke_demo, nuke_high);
nuke_tots.setRenderer(LegoClient.RENDER_GRENADE); nuke_tots.setRenderer(LegoClient.RENDER_GRENADE);

View File

@ -6,10 +6,12 @@ import java.util.function.BiFunction;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.armor.IPAMelee; import com.hbm.items.armor.IPAMelee;
import com.hbm.items.armor.IPARanged;
import com.hbm.items.armor.IPAWeaponsProvider; import com.hbm.items.armor.IPAWeaponsProvider;
import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.Crosshair;
import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.GunConfig;
import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.Receiver;
import com.hbm.lib.RefStrings;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.GunState; import com.hbm.items.weapon.sedna.ItemGunBaseNT.GunState;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
@ -26,14 +28,18 @@ public class XFactoryPA {
public static void init() { public static void init() {
ModItems.gun_pa_melee = new ItemGunMelee(WeaponQuality.UTILITY, new GunConfig() ModItems.gun_pa_melee = new ItemGunPA(WeaponQuality.UTILITY, new GunConfig()
.draw(10).inspect(55).crosshair(Crosshair.NONE) .draw(10).crosshair(Crosshair.NONE)
.rec(new Receiver(0) .rec(new Receiver(0))
.dmg(10F).delay(20).jam(0) .pp(LAMBDA_CLICK_MELEE_PRIMARY).ps(LAMBDA_CLICK_MELEE_SENONDARY).decider(GunStateDecider.LAMBDA_STANDARD_DECIDER)
.offset(1, -0.0625 * 2.5, -0.25D))
.pp(LAMBDA_CLICK_PRIMARY).ps(LAMBDA_CLICK_SENONDARY).decider(GunStateDecider.LAMBDA_STANDARD_DECIDER)
.anim(LAMBDA_MELEE_ANIMS).orchestra(ORCHESTRA) .anim(LAMBDA_MELEE_ANIMS).orchestra(ORCHESTRA)
).setUnlocalizedName("gun_pa_melee"); ).setUnlocalizedName("gun_pa_melee");
ModItems.gun_pa_ranged = new ItemGunPA(WeaponQuality.UTILITY, new GunConfig()
.draw(0).crosshair(Crosshair.CROSS)
.rec(new Receiver(0))
.pp(LAMBDA_CLICK_RANGED_PRIMARY).ps(LAMBDA_CLICK_RANGED_SENONDARY).decider(GunStateDecider.LAMBDA_STANDARD_DECIDER)
).setUnlocalizedName("gun_pa_ranged").setFull3D().setTextureName(RefStrings.MODID + ":gun_pa_ranged");
} }
public static BiConsumer<ItemStack, LambdaContext> ORCHESTRA = (stack, ctx) -> { public static BiConsumer<ItemStack, LambdaContext> ORCHESTRA = (stack, ctx) -> {
@ -47,11 +53,11 @@ public class XFactoryPA {
return null; return null;
}; };
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_PRIMARY = (stack, ctx) -> { public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_MELEE_PRIMARY = (stack, ctx) -> {
IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient(); IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient();
if(component != null) component.clickPrimary(stack, ctx); if(component != null) component.clickPrimary(stack, ctx);
}; };
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_SENONDARY = (stack, ctx) -> { public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_MELEE_SENONDARY = (stack, ctx) -> {
IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient(); IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient();
if(component != null) component.clickSecondary(stack, ctx); if(component != null) component.clickSecondary(stack, ctx);
}; };
@ -69,9 +75,18 @@ public class XFactoryPA {
} }
} }
public static class ItemGunMelee extends ItemGunBaseNT { public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_RANGED_PRIMARY = (stack, ctx) -> {
IPARanged component = IPAWeaponsProvider.getRangedComponentClient();
if(component != null) component.clickPrimary(stack, ctx);
};
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_RANGED_SENONDARY = (stack, ctx) -> {
IPARanged component = IPAWeaponsProvider.getRangedComponentClient();
if(component != null) component.clickSecondary(stack, ctx);
};
public ItemGunMelee(WeaponQuality quality, GunConfig... cfg) { public static class ItemGunPA extends ItemGunBaseNT {
public ItemGunPA(WeaponQuality quality, GunConfig... cfg) {
super(quality, cfg); super(quality, cfg);
} }

View File

@ -50,6 +50,8 @@ public class XFactoryRocket {
public static BulletConfig[] rocket_rpzb; public static BulletConfig[] rocket_rpzb;
public static BulletConfig[] rocket_qd; public static BulletConfig[] rocket_qd;
public static BulletConfig[] rocket_ml; public static BulletConfig[] rocket_ml;
public static BulletConfig[] rocket_ncrpa;
public static BulletConfig[] rocket_ncrpa_steer;
// FLYING // FLYING
public static Consumer<Entity> LAMBDA_STANDARD_ACCELERATE = (entity) -> { public static Consumer<Entity> LAMBDA_STANDARD_ACCELERATE = (entity) -> {
@ -57,13 +59,25 @@ public class XFactoryRocket {
if(bullet.accel < 7) bullet.accel += 0.4D; if(bullet.accel < 7) bullet.accel += 0.4D;
}; };
public static Consumer<Entity> LAMBDA_STEERING_ACCELERATE = (entity) -> { public static Consumer<Entity> LAMBDA_STEERING_ACCELERATE = (entity) -> {
EntityBulletBaseMK4 bullet = (EntityBulletBaseMK4) entity;
if(!(entity instanceof EntityPlayer)) {
if(bullet.accel < 7) bullet.accel += 0.4D;
return;
}
EntityPlayer player = (EntityPlayer) bullet.getThrower();
steeringAccelerate(entity, player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof ItemGunBaseNT) || !ItemGunBaseNT.getIsAiming(player.getHeldItem()));
};
public static Consumer<Entity> LAMBDA_NCR_ACCELERATE = (entity) -> {
steeringAccelerate(entity, false);
};
public static void steeringAccelerate(Entity entity, boolean noSteer) {
EntityBulletBaseMK4 bullet = (EntityBulletBaseMK4) entity; EntityBulletBaseMK4 bullet = (EntityBulletBaseMK4) entity;
if(bullet.accel < 4) bullet.accel += 0.4D; if(bullet.accel < 4) bullet.accel += 0.4D;
if(bullet.getThrower() == null || !(bullet.getThrower() instanceof EntityPlayer)) return; if(bullet.getThrower() == null || !(bullet.getThrower() instanceof EntityPlayer)) return;
EntityPlayer player = (EntityPlayer) bullet.getThrower(); EntityPlayer player = (EntityPlayer) bullet.getThrower();
if(Vec3.createVectorHelper(bullet.posX - player.posX, bullet.posY - player.posY, bullet.posZ - player.posZ).lengthVector() > 100) return; if(Vec3.createVectorHelper(bullet.posX - player.posX, bullet.posY - player.posY, bullet.posZ - player.posZ).lengthVector() > 100) return;
if(player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof ItemGunBaseNT) || !ItemGunBaseNT.getIsAiming(player.getHeldItem())) return; if(noSteer) return;
MovingObjectPosition mop = Library.rayTrace(player, 200, 1); MovingObjectPosition mop = Library.rayTrace(player, 200, 1);
if(mop == null || mop.hitVec == null) return; if(mop == null || mop.hitVec == null) return;
@ -76,7 +90,7 @@ public class XFactoryRocket {
bullet.motionX = vec.xCoord * speed; bullet.motionX = vec.xCoord * speed;
bullet.motionY = vec.yCoord * speed; bullet.motionY = vec.yCoord * speed;
bullet.motionZ = vec.zCoord * speed; bullet.motionZ = vec.zCoord * speed;
}; }
// IMPACT // IMPACT
public static BiConsumer<EntityBulletBaseMK4, MovingObjectPosition> LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { public static BiConsumer<EntityBulletBaseMK4, MovingObjectPosition> LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> {
@ -138,6 +152,7 @@ public class XFactoryRocket {
public static BulletConfig makeRPZB(BulletConfig original) { return original.clone(); } public static BulletConfig makeRPZB(BulletConfig original) { return original.clone(); }
public static BulletConfig makeQD(BulletConfig original) { return original.clone().setLife(400).setOnUpdate(LAMBDA_STEERING_ACCELERATE); } public static BulletConfig makeQD(BulletConfig original) { return original.clone().setLife(400).setOnUpdate(LAMBDA_STEERING_ACCELERATE); }
public static BulletConfig makeNCR(BulletConfig original) { return original.clone().setLife(400).setOnUpdate(LAMBDA_NCR_ACCELERATE); }
public static BulletConfig makeML(BulletConfig original) { return original.clone(); } public static BulletConfig makeML(BulletConfig original) { return original.clone(); }
//this is starting to get messy but we need to put this crap *somewhere* and fragmenting it into a billion classes with two methods each just isn't gonna help //this is starting to get messy but we need to put this crap *somewhere* and fragmenting it into a billion classes with two methods each just isn't gonna help
@ -156,11 +171,15 @@ public class XFactoryRocket {
rocket_rpzb = new BulletConfig[rocket_template.length]; rocket_rpzb = new BulletConfig[rocket_template.length];
rocket_qd = new BulletConfig[rocket_template.length]; rocket_qd = new BulletConfig[rocket_template.length];
rocket_ml = new BulletConfig[rocket_template.length]; rocket_ml = new BulletConfig[rocket_template.length];
rocket_ncrpa_steer = new BulletConfig[rocket_template.length];
rocket_ncrpa = new BulletConfig[rocket_template.length];
for(int i = 0; i < rocket_template.length; i++) { for(int i = 0; i < rocket_template.length; i++) {
rocket_rpzb[i] = makeRPZB(rocket_template[i]); rocket_rpzb[i] = makeRPZB(rocket_template[i]);
rocket_qd[i] = makeQD(rocket_template[i]); rocket_qd[i] = makeQD(rocket_template[i]);
rocket_ml[i] = makeML(rocket_template[i]); rocket_ml[i] = makeML(rocket_template[i]);
rocket_ncrpa_steer[i] = makeNCR(rocket_template[i]);
rocket_ncrpa[i] = makeRPZB(rocket_template[i]);
} }
ModItems.gun_panzerschreck = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() ModItems.gun_panzerschreck = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()

View File

@ -268,6 +268,7 @@ public class XWeaponModManager {
/** Saves the state on receiver 0 so that if the mag changes through upgrading, the state may potentially be restored, if compatible */ /** Saves the state on receiver 0 so that if the mag changes through upgrading, the state may potentially be restored, if compatible */
private static void saveMagState(ItemStack stack, int cfg) { private static void saveMagState(ItemStack stack, int cfg) {
IMagazine mag = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, cfg).getReceivers(stack)[0].getMagazine(stack); IMagazine mag = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, cfg).getReceivers(stack)[0].getMagazine(stack);
if(mag == null) return;
prevMagType = mag.getType(stack, null); prevMagType = mag.getType(stack, null);
prevMagCount = mag.getAmount(stack, null); prevMagCount = mag.getAmount(stack, null);
} }
@ -285,6 +286,7 @@ public class XWeaponModManager {
changedMagState = false; changedMagState = false;
IMagazine mag = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, cfg).getReceivers(stack)[0].getMagazine(stack); IMagazine mag = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, cfg).getReceivers(stack)[0].getMagazine(stack);
if(mag == null) return;
if(mag.getType(stack, null) == prevMagType) { if(mag.getType(stack, null) == prevMagType) {
mag.setAmount(stack, MathHelper.clamp_int(prevMagCount, 0, mag.getCapacity(stack))); mag.setAmount(stack, MathHelper.clamp_int(prevMagCount, 0, mag.getCapacity(stack)));
} else { } else {

View File

@ -73,4 +73,27 @@ public class ItemRenderPAMelee extends ItemRenderWeaponBase {
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
public void renderOther(ItemStack stack, ItemRenderType type, Object... data) {
if(type == type.EQUIPPED) return;
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glShadeModel(GL11.GL_SMOOTH);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ncrpa_arm);
GL11.glPushMatrix();
double scale = 0.3125D;
GL11.glScaled(scale, scale, scale);
GL11.glRotated(90, 1, 0, 0);
GL11.glTranslated(0, -5.5, 0);
GL11.glTranslated(-2, 0, 0);
ResourceManager.armor_ncr.renderPart("Leftarm");
GL11.glTranslated(4, 0, 0);
ResourceManager.armor_ncr.renderPart("RightArm");
GL11.glPopMatrix();
GL11.glShadeModel(GL11.GL_FLAT);
}
} }

View File

@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL12;
import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.armor.ArmorNCRPA;
import com.hbm.items.armor.ArmorTrenchmaster; import com.hbm.items.armor.ArmorTrenchmaster;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
@ -47,6 +48,8 @@ public class RenderLoot extends TileEntitySpecialRenderer {
} else if(stack.getItem() instanceof ArmorTrenchmaster) { } else if(stack.getItem() instanceof ArmorTrenchmaster) {
renderTrenchmaster(stack); renderTrenchmaster(stack);
} else if(stack.getItem() instanceof ArmorNCRPA) {
renderNCR(stack);
} else { } else {
renderStandardItem(item.getW()); renderStandardItem(item.getW());
} }
@ -108,6 +111,57 @@ public class RenderLoot extends TileEntitySpecialRenderer {
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
private void renderNCR(ItemStack stack) {
GL11.glPushMatrix();
GL11.glTranslated(0.5, 1.5, 0.5);
GL11.glScaled(0.0625, 0.0625, 0.0625);
GL11.glRotated(180, 1, 0, 0);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
if(stack.getItem() == ModItems.ncrpa_helmet) {
bindTexture(ResourceManager.ncrpa_helmet);
GL11.glEnable(GL11.GL_BLEND);
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
ResourceManager.armor_ncr.renderPart("Helmet");
GL11.glDisable(GL11.GL_BLEND);
float lastX = OpenGlHelper.lastBrightnessX;
float lastY = OpenGlHelper.lastBrightnessY;
GL11.glPushAttrib(GL11.GL_LIGHTING_BIT);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F);
GL11.glDisable(GL11.GL_LIGHTING);
ResourceManager.armor_ncr.renderPart("Eyes");
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopAttrib();
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lastX, lastY);
}
if(stack.getItem() == ModItems.ncrpa_plate) {
bindTexture(ResourceManager.ncrpa_chest);
ResourceManager.armor_ncr.renderPart("Chest");
bindTexture(ResourceManager.ncrpa_arm);
GL11.glPushMatrix();
GL11.glRotated(-3, 1, 0, 0);
ResourceManager.armor_ncr.renderPart("LeftArm");
ResourceManager.armor_ncr.renderPart("RightArm");
GL11.glPopMatrix();
}
if(stack.getItem() == ModItems.ncrpa_legs) {
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ncrpa_leg);
ResourceManager.armor_ncr.renderPart("LeftLeg");
GL11.glPushMatrix();
GL11.glRotated(-0.1, 1, 0, 0);
ResourceManager.armor_ncr.renderPart("RightLeg");
GL11.glPopMatrix();
}
if(stack.getItem() == ModItems.ncrpa_boots) {
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ncrpa_leg);
ResourceManager.armor_ncr.renderPart("LeftBoot");
GL11.glPushMatrix();
GL11.glRotated(-0.1, 1, 0, 0);
ResourceManager.armor_ncr.renderPart("RightBoot");
GL11.glPopMatrix();
}
GL11.glPopMatrix();
}
private void renderNuke() { private void renderNuke() {
GL11.glScaled(0.5, 0.5, 0.5); GL11.glScaled(0.5, 0.5, 0.5);
GL11.glTranslated(1, 0.5, 1); GL11.glTranslated(1, 0.5, 1);

View File

@ -2221,6 +2221,7 @@ item.gun_minigun_lacunae.name=Lacunae
item.gun_missile_launcher.name=Raketenwerfer item.gun_missile_launcher.name=Raketenwerfer
item.gun_n_i_4_n_i.name=N I 4 N I item.gun_n_i_4_n_i.name=N I 4 N I
item.gun_pa_melee.name=Powerrüstung - Nahkampfcontroller item.gun_pa_melee.name=Powerrüstung - Nahkampfcontroller
item.gun_pa_ranged.name=Powerrüstung - Fernkampfcontroller
item.gun_panzerschreck.name=Panzerschreck item.gun_panzerschreck.name=Panzerschreck
item.gun_pepperbox.name=Bündelrevolver item.gun_pepperbox.name=Bündelrevolver
item.gun_quadro.name=Vierfachraketenwerfer item.gun_quadro.name=Vierfachraketenwerfer

View File

@ -3064,6 +3064,7 @@ item.gun_minigun_lacunae.name=Lacunae
item.gun_missile_launcher.name=Missile Launcher item.gun_missile_launcher.name=Missile Launcher
item.gun_n_i_4_n_i.name=N I 4 N I item.gun_n_i_4_n_i.name=N I 4 N I
item.gun_pa_melee.name=Power Armor - Melee Controller item.gun_pa_melee.name=Power Armor - Melee Controller
item.gun_pa_ranged.name=Power Armor - Ranged Controller
item.gun_panzerschreck.name=Panzerschreck item.gun_panzerschreck.name=Panzerschreck
item.gun_pepperbox.name=Pepperbox item.gun_pepperbox.name=Pepperbox
item.gun_quadro.name=Quad Rocket Launcher item.gun_quadro.name=Quad Rocket Launcher

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B