nothing some booze and some paracetamol and jacking off and killing myse
lf can't fix
11
changelog
@ -2,6 +2,11 @@
|
||||
* Laser pistol
|
||||
* Saturnite-tier pistol using capacitors
|
||||
* Also has variants
|
||||
* B-side for the assault rifle
|
||||
* Ammo bag
|
||||
* Holds up to 8 stacks of items with no NBT
|
||||
* Reloading guns will access the contents of the bag directly without it having to be emptied first
|
||||
* Comes with a handy little indicator to shot roughly how full it is
|
||||
|
||||
## Changed
|
||||
* Trenchmaster armor now has the fast reload and more ammo traits again
|
||||
@ -27,6 +32,10 @@
|
||||
* The diesel generator and turbofan will both now halt operation when powered by redstone
|
||||
* Infinite batteries will now also drain energy when put into a charging slot
|
||||
* TOREX effects now cause the sky to go fullbright again for 10 seconds after they spawn
|
||||
* Weapon tooltips now show the weapon's condition
|
||||
* Updated the catalytic cracking tower model
|
||||
* Leviathan turbine and powered condenser tooltip now use thousand separaators to make the numbers actually readable
|
||||
* Catalytic converters can now be crafted with `ANY_BISMOID` instead of just bismuth (that includes arsenic)
|
||||
|
||||
## Fixed
|
||||
* Fixed fatal gamebreaking hard drive corrupting issue where taurun leggings were misspelled
|
||||
@ -36,3 +45,5 @@
|
||||
* Fixed rotation issues for certain blocks using the new structure system
|
||||
* Fixed ReaSim water never moving if the reactor is at 20°
|
||||
* Fixed strand caster LPS gauge exceeding the limit
|
||||
* The SPAS-12 and congo lake now change type immediately when hitting the reload key, fixing an issue where the first loaded round may have the worng color when the ammo type changes
|
||||
* Fixed crash caused by `/ntmreload` when NEI is not installed
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
mod_version=1.0.27
|
||||
# Empty build number makes a release type
|
||||
mod_build_number=5299
|
||||
mod_build_number=5313
|
||||
|
||||
credits=HbMinecraft,\
|
||||
\ rodolphito (explosion algorithms),\
|
||||
|
||||
@ -83,7 +83,7 @@ public class MachineCatalyticCracker extends BlockDummyable implements ILookOver
|
||||
@Override
|
||||
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
|
||||
return super.checkRequirement(world, x, y, z, dir, o) &&
|
||||
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{4, -1, 3, -1, 1, 1}, x, y, z, dir) &&
|
||||
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{8, -1, 3, -1, 2, 0}, x, y, z, dir) &&
|
||||
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{13, 0, 0, 3, 2, 1}, x, y, z, dir) &&
|
||||
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{14, -13, -1, 2, 1, 0}, x, y, z, dir) &&
|
||||
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{3, -1, 2, 3, -1, 3}, x, y, z, dir);
|
||||
@ -93,7 +93,7 @@ public class MachineCatalyticCracker extends BlockDummyable implements ILookOver
|
||||
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
|
||||
super.fillSpace(world, x, y, z, dir, o);
|
||||
|
||||
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{4, -1, 3, -1, 1, 1}, this, dir);
|
||||
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{8, -1, 3, -1, 2, 0}, this, dir);
|
||||
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{13, 0, 0, 3, 2, 1}, this, dir);
|
||||
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{14, -13, -1, 2, 1, 0}, this, dir);
|
||||
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{3, -1, 2, 3, -1, 3}, this, dir);
|
||||
|
||||
@ -2,6 +2,7 @@ package com.hbm.blocks.machine;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.hbm.blocks.BlockDummyable;
|
||||
import com.hbm.blocks.ILookOverlay;
|
||||
@ -165,8 +166,8 @@ public class MachineChungus extends BlockDummyable implements ITooltipProvider,
|
||||
outputType = inputType.getTrait(FT_Coolable.class).coolsTo;
|
||||
}
|
||||
|
||||
text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + inputType.getLocalizedName() + ": " + tankInput.getFill() + "/" + tankInput.getMaxFill() + "mB");
|
||||
text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + outputType.getLocalizedName() + ": " + tankOutput.getFill() + "/" + tankOutput.getMaxFill() + "mB");
|
||||
text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + inputType.getLocalizedName() + ": " + String.format(Locale.US, "%,d", tankInput.getFill()) + "/" + String.format(Locale.US, "%,d", tankInput.getMaxFill()) + "mB");
|
||||
text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + outputType.getLocalizedName() + ": " + String.format(Locale.US, "%,d", tankOutput.getFill()) + "/" + String.format(Locale.US, "%,d", tankOutput.getMaxFill()) + "mB");
|
||||
text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + BobMathUtil.getShortNumber(chungus.power) + "/" + BobMathUtil.getShortNumber(chungus.getMaxPower()) + "HE");
|
||||
|
||||
|
||||
|
||||
@ -15,6 +15,7 @@ import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class MachineCondenserPowered extends BlockDummyable implements ILookOverlay {
|
||||
|
||||
@ -73,7 +74,7 @@ public class MachineCondenserPowered extends BlockDummyable implements ILookOver
|
||||
text.add(BobMathUtil.getShortNumber(tower.power) + "HE / " + BobMathUtil.getShortNumber(tower.maxPower) + "HE");
|
||||
|
||||
for(int i = 0; i < tower.tanks.length; i++)
|
||||
text.add((i < 1 ? (EnumChatFormatting.GREEN + "-> ") : (EnumChatFormatting.RED + "<- ")) + EnumChatFormatting.RESET + tower.tanks[i].getTankType().getLocalizedName() + ": " + tower.tanks[i].getFill() + "/" + tower.tanks[i].getMaxFill() + "mB");
|
||||
text.add((i < 1 ? (EnumChatFormatting.GREEN + "-> ") : (EnumChatFormatting.RED + "<- ")) + EnumChatFormatting.RESET + tower.tanks[i].getTankType().getLocalizedName() + ": " + String.format(Locale.US, "%,d", tower.tanks[i].getFill()) + "/" + String.format(Locale.US, "%,d", tower.tanks[i].getMaxFill()) + "mB");
|
||||
|
||||
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
|
||||
}
|
||||
|
||||
@ -76,6 +76,7 @@ public class WeaponRecipes {
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_spas12, 1), new Object[] { "BRM", "BGS", 'B', DESH.lightBarrel(), 'R', DESH.lightReceiver(), 'M', GUNMETAL.mechanism(), 'G', ANY_PLASTIC.grip(), 'S', DESH.stock() });
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_panzerschreck, 1), new Object[] { "BBB", "PGM", 'B', DESH.heavyBarrel(), 'P', STEEL.plateCast(), 'G', DESH.grip(), 'M', GUNMETAL.mechanism() });
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_g3, 1), new Object[] { "BRM", "WGS", 'B', WEAPONSTEEL.lightBarrel(), 'R', WEAPONSTEEL.lightReceiver(), 'M', WEAPONSTEEL.mechanism(), 'W', WOOD.grip(), 'G', RUBBER.grip(), 'S', WOOD.stock() });
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_g3_zebra, 1), new Object[] { " M ", "MPM", " M ", 'M', BIGMT.mechanism(), 'P', ModItems.gun_g3 });
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_stinger, 1), new Object[] { "BBB", "PGM", 'B', WEAPONSTEEL.heavyBarrel(), 'P', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'G', WEAPONSTEEL.grip(), 'M', WEAPONSTEEL.mechanism() });
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_chemthrower, 1), new Object[] { "MHW", "PSS", 'M', WEAPONSTEEL.mechanism(), 'H', RUBBER.pipe(), 'W', ModItems.wrench, 'P', WEAPONSTEEL.heavyBarrel(), 'S', WEAPONSTEEL.shell() });
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_m2, 1), new Object[] { " G", "BRM", " G", 'G', WOOD.grip(), 'B', FERRO.heavyBarrel(), 'R', FERRO.heavyReceiver(), 'M', WEAPONSTEEL.mechanism() });
|
||||
|
||||
@ -23,14 +23,9 @@ public class BoilingHandler extends NEIUniversalHandler {
|
||||
return "ntmBoiling";
|
||||
}
|
||||
|
||||
public static HashMap<Object, Object> cache;
|
||||
public static boolean isReload=false;
|
||||
|
||||
public static HashMap<Object, Object> generateRecipes() {
|
||||
|
||||
if(cache != null && !isReload) return cache;
|
||||
|
||||
cache = new HashMap();
|
||||
HashMap<Object, Object> recipes = new HashMap();
|
||||
|
||||
for(FluidType type : Fluids.getInNiceOrder()) {
|
||||
|
||||
@ -39,11 +34,11 @@ public class BoilingHandler extends NEIUniversalHandler {
|
||||
|
||||
if(trait.getEfficiency(HeatingType.BOILER) > 0) {
|
||||
HeatingStep step = trait.getFirstStep();
|
||||
cache.put(ItemFluidIcon.make(type, step.amountReq), ItemFluidIcon.make(step.typeProduced, step.amountProduced));
|
||||
recipes.put(ItemFluidIcon.make(type, step.amountReq), ItemFluidIcon.make(step.typeProduced, step.amountProduced));
|
||||
}
|
||||
}
|
||||
}
|
||||
isReload=false;
|
||||
return cache;
|
||||
|
||||
return recipes;
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,85 @@
|
||||
package com.hbm.inventory.container;
|
||||
|
||||
import com.hbm.inventory.SlotNonRetarded;
|
||||
import com.hbm.items.tool.ItemAmmoBag.InventoryAmmoBag;
|
||||
import com.hbm.util.InventoryUtil;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ContainerAmmoBag extends Container {
|
||||
|
||||
private InventoryAmmoBag bag;
|
||||
|
||||
public ContainerAmmoBag(InventoryPlayer invPlayer, InventoryAmmoBag box) {
|
||||
this.bag = box;
|
||||
this.bag.openInventory();
|
||||
|
||||
for(int i = 0; i < 2; i++) {
|
||||
for(int j = 0; j < 4; j++) {
|
||||
this.addSlotToContainer(new SlotNonRetarded(box, j + i * 4, 53 + j * 18, 18 + i * 18));
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < 3; i++) {
|
||||
for(int j = 0; j < 9; j++) {
|
||||
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 82 + i * 18));
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < 9; i++) {
|
||||
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 140));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) {
|
||||
ItemStack var3 = null;
|
||||
Slot var4 = (Slot) this.inventorySlots.get(par2);
|
||||
|
||||
if(var4 != null && var4.getHasStack()) {
|
||||
ItemStack var5 = var4.getStack();
|
||||
var3 = var5.copy();
|
||||
|
||||
if(par2 <= bag.getSizeInventory() - 1) {
|
||||
if(!InventoryUtil.mergeItemStack(this.inventorySlots, var5, bag.getSizeInventory(), this.inventorySlots.size(), true)) {
|
||||
return null;
|
||||
}
|
||||
} else if(!InventoryUtil.mergeItemStack(this.inventorySlots, var5, 0, bag.getSizeInventory(), false)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if(var5.stackSize == 0) {
|
||||
var4.putStack((ItemStack) null);
|
||||
} else {
|
||||
var4.onSlotChanged();
|
||||
}
|
||||
|
||||
var4.onPickupFromSlot(p_82846_1_, var5);
|
||||
}
|
||||
|
||||
return var3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) {
|
||||
// prevents the player from moving around the currently open box
|
||||
if(mode == 2 && button == player.inventory.currentItem) return null;
|
||||
if(index == player.inventory.currentItem + 27 + bag.getSizeInventory()) return null;
|
||||
return super.slotClick(index, button, mode, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer player) {
|
||||
return bag.isUseableByPlayer(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContainerClosed(EntityPlayer player) {
|
||||
super.onContainerClosed(player);
|
||||
this.bag.closeInventory();
|
||||
}
|
||||
}
|
||||
@ -14,7 +14,6 @@ import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.stream.JsonWriter;
|
||||
import com.hbm.handler.nei.BoilingHandler;
|
||||
import com.hbm.handler.pollution.PollutionHandler;
|
||||
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
|
||||
import com.hbm.inventory.fluid.trait.*;
|
||||
@ -892,7 +891,6 @@ public class Fluids {
|
||||
} else {
|
||||
readTraits(config);
|
||||
}
|
||||
BoilingHandler.isReload=true;
|
||||
}
|
||||
private static void registerCalculatedFuel(FluidType type, double base, double combustMult, FuelGrade grade) {
|
||||
|
||||
|
||||
51
src/main/java/com/hbm/inventory/gui/GUIAmmoBag.java
Normal file
@ -0,0 +1,51 @@
|
||||
package com.hbm.inventory.gui;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.inventory.container.ContainerAmmoBag;
|
||||
import com.hbm.items.tool.ItemAmmoBag.InventoryAmmoBag;
|
||||
import com.hbm.lib.RefStrings;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class GUIAmmoBag extends GuiContainer {
|
||||
|
||||
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_ammo_bag.png");
|
||||
private final InventoryAmmoBag inventory;
|
||||
|
||||
public GUIAmmoBag(InventoryPlayer invPlayer, InventoryAmmoBag bag) {
|
||||
super(new ContainerAmmoBag(invPlayer, bag));
|
||||
this.inventory = bag;
|
||||
|
||||
this.xSize = 176;
|
||||
this.ySize = 168;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int x, int y, float interp) {
|
||||
super.drawScreen(x, y, interp);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int i, int j) {
|
||||
String name = I18n.format(this.inventory.getInventoryName());
|
||||
|
||||
if(inventory.hasCustomInventoryName()) {
|
||||
name = inventory.box.getDisplayName();
|
||||
}
|
||||
|
||||
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xffffff);
|
||||
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 98, 4210752);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
|
||||
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
|
||||
}
|
||||
}
|
||||
@ -1,88 +0,0 @@
|
||||
package com.hbm.inventory.gui;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.inventory.container.ContainerIGenerator;
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.tileentity.machine.TileEntityMachineIGenerator;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class GUIIGenerator extends GuiInfoContainer {
|
||||
|
||||
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/generators/gui_igen.png");
|
||||
private TileEntityMachineIGenerator igen;
|
||||
|
||||
public GUIIGenerator(InventoryPlayer invPlayer, TileEntityMachineIGenerator tedf) {
|
||||
super(new ContainerIGenerator(invPlayer, tedf));
|
||||
igen = tedf;
|
||||
|
||||
this.xSize = 176;
|
||||
this.ySize = 237;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int x, int y, float f) {
|
||||
super.drawScreen(x, y, f);
|
||||
|
||||
this.drawElectricityInfo(this, x, y, guiLeft + 26, guiTop + 134, 142, 16, igen.power, igen.maxPower);
|
||||
|
||||
for(int i = 0; i < 4; i++) {
|
||||
int fire = igen.burn[i];
|
||||
|
||||
this.drawCustomInfoStat(x, y, guiLeft + 68 + (i % 2) * 18, guiTop + 34 + (i / 2) * 36, 14, 14, x, y, new String[] {(fire / 20) + "s"});
|
||||
}
|
||||
|
||||
this.drawCustomInfoStat(x, y, guiLeft + 113, guiTop + 4, 54, 18, x, y, new String[] {"Heat generated"});
|
||||
|
||||
igen.tanks[0].renderTankInfo(this, x, y, guiLeft + 80, guiTop + 112, 72, 16);
|
||||
igen.tanks[1].renderTankInfo(this, x, y, guiLeft + 114, guiTop + 33, 16, 70);
|
||||
igen.tanks[2].renderTankInfo(this, x, y, guiLeft + 150, guiTop + 33, 18, 70);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int i, int j) {
|
||||
String name = this.igen.hasCustomInventoryName() ? this.igen.getInventoryName() : I18n.format(this.igen.getInventoryName());
|
||||
|
||||
GL11.glPushMatrix();
|
||||
double scale = 0.75D;
|
||||
GL11.glScaled(scale, scale, 1);
|
||||
this.fontRendererObj.drawString(name, 22, 18, 0x303030);
|
||||
GL11.glPopMatrix();
|
||||
|
||||
String spin = this.igen.spin + "";
|
||||
this.fontRendererObj.drawString(spin, 139 - this.fontRendererObj.getStringWidth(spin) / 2, 10, 0x00ff00);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float iinterpolation, int x, int y) {
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
|
||||
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
|
||||
|
||||
int water = igen.tanks[0].getFill() * 72 / igen.tanks[0].getMaxFill();
|
||||
drawTexturedModalRect(guiLeft + 80, guiTop + 112, 184, 14, water, 16);
|
||||
|
||||
int power = (int) (igen.power * 142 / igen.maxPower);
|
||||
drawTexturedModalRect(guiLeft + 26, guiTop + 134, 0, 237, power, 16);
|
||||
|
||||
for(int i = 0; i < 4; i++) {
|
||||
int fire = igen.burn[i];
|
||||
|
||||
if(fire > 0) {
|
||||
drawTexturedModalRect(guiLeft + 68 + (i % 2) * 18, guiTop + 34 + (i / 2) * 36, 184, 0, 14, 14);
|
||||
}
|
||||
}
|
||||
|
||||
if(igen.hasRTG) {
|
||||
drawTexturedModalRect(guiLeft + 9, guiTop + 34, 176, 0, 4, 89);
|
||||
drawTexturedModalRect(guiLeft + 51, guiTop + 34, 180, 0, 4, 89);
|
||||
}
|
||||
|
||||
igen.tanks[1].renderTank(guiLeft + 114, guiTop + 103, this.zLevel, 16, 70);
|
||||
igen.tanks[2].renderTank(guiLeft + 150, guiTop + 103, this.zLevel, 16, 70);
|
||||
}
|
||||
}
|
||||
@ -75,7 +75,7 @@ public class PedestalRecipes extends SerializableRecipe {
|
||||
register(new PedestalRecipe(new ItemStack(ModItems.gun_laser_pistol_morning_glory),
|
||||
null, new ComparableStack(ModItems.morning_glory, 1), null,
|
||||
new ComparableStack(ModItems.item_secret, 2, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.gun_laser_pistol), new ComparableStack(ModItems.item_secret, 2, EnumSecretType.SELENIUM_STEEL),
|
||||
null, new OreDictStack(STAR.ingot(), 4), null));
|
||||
null, new OreDictStack(EMERALD.gem(), 16), null));
|
||||
|
||||
register(new PedestalRecipe(new ItemStack(ModItems.gun_folly),
|
||||
new ComparableStack(ModItems.item_secret, 4, EnumSecretType.FOLLY), new ComparableStack(ModItems.item_secret, 2, EnumSecretType.CONTROLLER), new ComparableStack(ModItems.item_secret, 4, EnumSecretType.FOLLY),
|
||||
|
||||
@ -1149,6 +1149,7 @@ public class ModItems {
|
||||
public static Item containment_box;
|
||||
public static Item plastic_bag;
|
||||
|
||||
public static Item ammo_bag;
|
||||
public static Item casing_bag;
|
||||
|
||||
public static Item test_nuke_igniter;
|
||||
@ -1463,6 +1464,7 @@ public class ModItems {
|
||||
public static Item gun_spas12;
|
||||
public static Item gun_panzerschreck;
|
||||
public static Item gun_g3;
|
||||
public static Item gun_g3_zebra;
|
||||
public static Item gun_stinger;
|
||||
public static Item gun_chemthrower;
|
||||
public static Item gun_m2;
|
||||
@ -3538,6 +3540,7 @@ public class ModItems {
|
||||
containment_box = new ItemLeadBox().setUnlocalizedName("containment_box").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":containment_box");
|
||||
plastic_bag = new ItemPlasticBag().setUnlocalizedName("plastic_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":plastic_bag");
|
||||
|
||||
ammo_bag = new ItemAmmoBag().setUnlocalizedName("ammo_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":ammo_bag");
|
||||
casing_bag = new ItemCasingBag().setUnlocalizedName("casing_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":casing_bag");
|
||||
|
||||
debris_graphite = new Item().setUnlocalizedName("debris_graphite").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":debris_graphite");
|
||||
@ -6170,6 +6173,7 @@ public class ModItems {
|
||||
GameRegistry.registerItem(containment_box, containment_box.getUnlocalizedName());
|
||||
GameRegistry.registerItem(plastic_bag, plastic_bag.getUnlocalizedName());
|
||||
|
||||
GameRegistry.registerItem(ammo_bag, ammo_bag.getUnlocalizedName());
|
||||
GameRegistry.registerItem(casing_bag, casing_bag.getUnlocalizedName());
|
||||
|
||||
//Keys and Locks
|
||||
@ -6405,6 +6409,7 @@ public class ModItems {
|
||||
GameRegistry.registerItem(gun_spas12, gun_spas12.getUnlocalizedName());
|
||||
GameRegistry.registerItem(gun_panzerschreck, gun_panzerschreck.getUnlocalizedName());
|
||||
GameRegistry.registerItem(gun_g3, gun_g3.getUnlocalizedName());
|
||||
GameRegistry.registerItem(gun_g3_zebra, gun_g3_zebra.getUnlocalizedName());
|
||||
GameRegistry.registerItem(gun_stinger, gun_stinger.getUnlocalizedName());
|
||||
GameRegistry.registerItem(gun_chemthrower, gun_chemthrower.getUnlocalizedName());
|
||||
GameRegistry.registerItem(gun_m2, gun_m2.getUnlocalizedName());
|
||||
|
||||
@ -89,10 +89,12 @@ public class ArmorTrenchmaster extends ArmorFSB {
|
||||
}
|
||||
|
||||
public static boolean isTrenchMaster(EntityPlayer player) {
|
||||
if(player == null) return false;
|
||||
return player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() == ModItems.trenchmaster_plate && ArmorFSB.hasFSBArmor(player);
|
||||
}
|
||||
|
||||
public static boolean hasAoS(EntityPlayer player) {
|
||||
if(player == null) return false;
|
||||
if(player.inventory.armorInventory[3] != null) {
|
||||
ItemStack[] mods = ArmorModHandler.pryMods(player.inventory.armorInventory[3]);
|
||||
ItemStack helmet = mods[ArmorModHandler.helmet_only];
|
||||
|
||||
147
src/main/java/com/hbm/items/tool/ItemAmmoBag.java
Normal file
@ -0,0 +1,147 @@
|
||||
package com.hbm.items.tool;
|
||||
|
||||
import com.hbm.inventory.container.ContainerAmmoBag;
|
||||
import com.hbm.inventory.gui.GUIAmmoBag;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
import com.hbm.util.ItemStackUtil;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class ItemAmmoBag extends Item implements IGUIProvider {
|
||||
|
||||
public ItemAmmoBag() {
|
||||
this.setMaxStackSize(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxItemUseDuration(ItemStack stack) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
|
||||
if(!world.isRemote) player.openGui(MainRegistry.instance, 0, world, 0, 0, 0);
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
return new ContainerAmmoBag(player.inventory, new InventoryAmmoBag(player.getHeldItem()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
return new GUIAmmoBag(player.inventory, new InventoryAmmoBag(player.getHeldItem()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean showDurabilityBar(ItemStack stack) {
|
||||
return !stack.hasTagCompound() || getDurabilityForDisplay(stack) != 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDurabilityForDisplay(ItemStack stack) {
|
||||
if(!stack.hasTagCompound()) return 1D;
|
||||
|
||||
InventoryAmmoBag inv = new InventoryAmmoBag(stack);
|
||||
int capacity = 0;
|
||||
int bullets = 0;
|
||||
for(int i = 0; i < inv.getSizeInventory(); i++) {
|
||||
ItemStack slot = inv.getStackInSlot(i);
|
||||
if(slot == null) {
|
||||
capacity += 64;
|
||||
} else {
|
||||
capacity += slot.getMaxStackSize();
|
||||
bullets += slot.stackSize;
|
||||
}
|
||||
}
|
||||
return 1D - (double) bullets / (double) capacity;
|
||||
}
|
||||
|
||||
public static class InventoryAmmoBag implements IInventory {
|
||||
|
||||
public final ItemStack box;
|
||||
public ItemStack[] slots;
|
||||
|
||||
public InventoryAmmoBag(ItemStack bag) {
|
||||
this.box = bag;
|
||||
slots = new ItemStack[this.getSizeInventory()];
|
||||
|
||||
if(!bag.hasTagCompound())
|
||||
bag.setTagCompound(new NBTTagCompound());
|
||||
|
||||
ItemStack[] fromNBT = ItemStackUtil.readStacksFromNBT(bag, slots.length);
|
||||
|
||||
if(fromNBT != null) {
|
||||
for(int i = 0; i < slots.length; i++) {
|
||||
slots[i] = fromNBT[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override public int getSizeInventory() { return 8; }
|
||||
@Override public ItemStack getStackInSlot(int slot) { return slots[slot]; }
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int slot, int amount) {
|
||||
ItemStack stack = getStackInSlot(slot);
|
||||
if (stack != null) {
|
||||
if (stack.stackSize > amount) {
|
||||
stack = stack.splitStack(amount);
|
||||
markDirty();
|
||||
} else {
|
||||
setInventorySlotContents(slot, null);
|
||||
}
|
||||
}
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlotOnClosing(int slot) {
|
||||
ItemStack stack = getStackInSlot(slot);
|
||||
setInventorySlotContents(slot, null);
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInventorySlotContents(int slot, ItemStack stack) {
|
||||
|
||||
if(stack != null) {
|
||||
stack.stackSize = Math.min(stack.stackSize, this.getInventoryStackLimit());
|
||||
}
|
||||
|
||||
slots[slot] = stack;
|
||||
markDirty();
|
||||
}
|
||||
|
||||
@Override public String getInventoryName() { return "container.ammoBag"; }
|
||||
@Override public boolean hasCustomInventoryName() { return box.hasDisplayName(); }
|
||||
@Override public int getInventoryStackLimit() { return 64; }
|
||||
|
||||
@Override
|
||||
public void markDirty() {
|
||||
for(int i = 0; i < getSizeInventory(); ++i) {
|
||||
if(getStackInSlot(i) != null && getStackInSlot(i).stackSize == 0) {
|
||||
slots[i] = null;
|
||||
}
|
||||
}
|
||||
|
||||
ItemStackUtil.addStacksToNBT(box, slots);
|
||||
}
|
||||
|
||||
@Override public boolean isUseableByPlayer(EntityPlayer player) { return true; }
|
||||
@Override public void openInventory() { }
|
||||
@Override public void closeInventory() { }
|
||||
@Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return !stack.hasTagCompound(); }
|
||||
}
|
||||
}
|
||||
@ -34,6 +34,7 @@ public class GunConfig {
|
||||
public static final String I_INSPECTCANCEL = "I_INSPECTCANCEL";
|
||||
public static final String O_CROSSHAIR = "O_CROSSHAIR";
|
||||
public static final String B_HIDECROSSHAIR = "B_HIDECROSSHAIR";
|
||||
public static final String B_RELOADREQUIRESTYPECHANGE = "B_RELOADREQUIRESTYPECHANGE";
|
||||
public static final String B_RELOADANIMATIONSEQUENTIAL = "B_RELOADANIMATIONSEQUENTIAL";
|
||||
public static final String O_SCOPETEXTURE = "O_SCOPETEXTURE";
|
||||
public static final String CON_SMOKE = "CON_SMOKE";
|
||||
@ -61,6 +62,7 @@ public class GunConfig {
|
||||
protected boolean inspectCancel_DNA = true;
|
||||
protected Crosshair crosshair_DNA;
|
||||
protected boolean hideCrosshair_DNA = true;
|
||||
protected boolean reloadRequiresTypeChange_DNA = false;
|
||||
protected boolean reloadAnimationsSequential_DNA;
|
||||
protected ResourceLocation scopeTexture_DNA;
|
||||
/** Handles smoke clientside */
|
||||
@ -92,6 +94,7 @@ public class GunConfig {
|
||||
public boolean getInspectCancel(ItemStack stack) { return WeaponModManager.eval(inspectCancel_DNA, stack, I_INSPECTCANCEL, this, this.index); }
|
||||
public Crosshair getCrosshair(ItemStack stack) { return WeaponModManager.eval(crosshair_DNA, stack, O_CROSSHAIR, this, this.index); }
|
||||
public boolean getHideCrosshair(ItemStack stack) { return WeaponModManager.eval(hideCrosshair_DNA, stack, B_HIDECROSSHAIR, this, this.index); }
|
||||
public boolean getReloadChangesType(ItemStack stack) { return WeaponModManager.eval(reloadRequiresTypeChange_DNA, stack, B_RELOADREQUIRESTYPECHANGE, this, this.index); }
|
||||
public boolean getReloadAnimSequential(ItemStack stack) { return WeaponModManager.eval(reloadAnimationsSequential_DNA, stack, B_RELOADANIMATIONSEQUENTIAL, this, this.index); }
|
||||
public ResourceLocation getScopeTexture(ItemStack stack) { return WeaponModManager.eval(scopeTexture_DNA, stack, O_SCOPETEXTURE, this, this.index); }
|
||||
public BiConsumer<ItemStack, LambdaContext> getSmokeHandler(ItemStack stack) { return WeaponModManager.eval(smokeHandler_DNA, stack, CON_SMOKE, this, this.index); }
|
||||
@ -121,6 +124,7 @@ public class GunConfig {
|
||||
public GunConfig inspectCancel(boolean flag) { this.inspectCancel_DNA = flag; return this; }
|
||||
public GunConfig crosshair(Crosshair crosshair) { this.crosshair_DNA = crosshair; return this; }
|
||||
public GunConfig hideCrosshair(boolean flag) { this.hideCrosshair_DNA = flag; return this; }
|
||||
public GunConfig reloadChangeType(boolean flag) { this.reloadRequiresTypeChange_DNA = flag; return this; }
|
||||
public GunConfig reloadSequential(boolean flag) { this.reloadAnimationsSequential_DNA = flag; return this; }
|
||||
public GunConfig scopeTexture(ResourceLocation tex) { this.scopeTexture_DNA = tex; return this; }
|
||||
|
||||
|
||||
@ -182,6 +182,10 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
|
||||
}
|
||||
}
|
||||
|
||||
float maxDura = config.getDurability(stack);
|
||||
int dura = MathHelper.clamp_int((int)((maxDura - this.getWear(stack, i)) * 100 / maxDura), 0, 100);
|
||||
list.add("Condition: " + dura + "%");
|
||||
|
||||
for(ItemStack upgrade : WeaponModManager.getUpgradeItems(stack, i)) {
|
||||
list.add(EnumChatFormatting.YELLOW + upgrade.getDisplayName());
|
||||
}
|
||||
@ -315,6 +319,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD, I
|
||||
this.setState(stack, i, GunState.DRAWING);
|
||||
this.setTimer(stack, i, configs[i].getDrawDuration(stack));
|
||||
}
|
||||
this.setLastAnim(stack, i, AnimType.CYCLE); //prevents new guns from initializing with DRAWING, 0
|
||||
}
|
||||
this.setIsAiming(stack, false);
|
||||
this.setReloadCancel(stack, false);
|
||||
|
||||
@ -65,7 +65,8 @@ public class GunFactoryClient {
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_uzi_akimbo, new ItemRenderUziAkimbo());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_spas12, new ItemRenderSPAS12());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_panzerschreck, new ItemRenderPanzerschreck());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_g3, new ItemRenderG3());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_g3, new ItemRenderG3(ResourceManager.g3_tex));
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_g3_zebra, new ItemRenderG3(ResourceManager.g3_zebra_tex));
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_stinger, new ItemRenderStinger());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_chemthrower, new ItemRenderChemthrower());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_m2, new ItemRenderM2());
|
||||
@ -138,6 +139,8 @@ public class GunFactoryClient {
|
||||
r556_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET);
|
||||
r556_ap.setRenderer(LegoClient.RENDER_AP_BULLET);
|
||||
|
||||
setRendererBulk(LegoClient.RENDER_AP_BULLET, r556_inc_sp, r556_inc_fmj, r556_inc_jhp, r556_inc_ap);
|
||||
|
||||
r762_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET);
|
||||
r762_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET);
|
||||
r762_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET);
|
||||
@ -238,6 +241,7 @@ public class GunFactoryClient {
|
||||
((ItemGunBaseNT) ModItems.gun_spas12) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||
((ItemGunBaseNT) ModItems.gun_panzerschreck) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||
((ItemGunBaseNT) ModItems.gun_g3) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||
((ItemGunBaseNT) ModItems.gun_g3_zebra) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||
((ItemGunBaseNT) ModItems.gun_stinger) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||
((ItemGunBaseNT) ModItems.gun_chemthrower) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||
((ItemGunBaseNT) ModItems.gun_m2) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO);
|
||||
|
||||
@ -67,6 +67,7 @@ public class Lego {
|
||||
ItemGunBaseNT.setState(stack, ctx.configIndex, GunState.RELOADING);
|
||||
ItemGunBaseNT.setTimer(stack, ctx.configIndex, rec.getReloadBeginDuration(stack) + (loaded <= 0 ? rec.getReloadCockOnEmptyPre(stack) : 0));
|
||||
ItemGunBaseNT.playAnimation(player, stack, AnimType.RELOAD, ctx.configIndex);
|
||||
if(ctx.config.getReloadChangesType(stack)) mag.initNewType(stack, ctx.inventory);
|
||||
} else {
|
||||
ItemGunBaseNT.playAnimation(player, stack, AnimType.INSPECT, ctx.configIndex);
|
||||
if(!ctx.config.getInspectCancel(stack)) {
|
||||
|
||||
@ -740,7 +740,8 @@ public class Orchestras {
|
||||
if(entity.worldObj.isRemote) return;
|
||||
AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex);
|
||||
int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex);
|
||||
boolean aiming = ItemGunBaseNT.getIsAiming(stack) && !WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE);
|
||||
boolean scoped = stack.getItem() == ModItems.gun_g3_zebra || WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE);
|
||||
boolean aiming = ItemGunBaseNT.getIsAiming(stack) && !scoped;
|
||||
|
||||
if(type == AnimType.CYCLE) {
|
||||
if(timer == 0) {
|
||||
|
||||
@ -343,7 +343,7 @@ public class XFactory12ga {
|
||||
).setUnlocalizedName("gun_liberator");
|
||||
|
||||
ModItems.gun_spas12 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()
|
||||
.dura(600).draw(20).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE)
|
||||
.dura(600).draw(20).inspect(39).reloadSequential(true).reloadChangeType(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE)
|
||||
.rec(new Receiver(0)
|
||||
.dmg(32F).spreadHipfire(0F).delay(20).reload(5, 10, 10, 10, 0).jam(36).sound("hbm:weapon.shotgunShoot", 1.0F, 1.0F)
|
||||
.mag(new MagazineSingleReload(0, 8).addConfigs(all))
|
||||
|
||||
@ -165,7 +165,7 @@ public class XFactory40mm {
|
||||
).setUnlocalizedName("gun_flaregun");
|
||||
|
||||
ModItems.gun_congolake = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()
|
||||
.dura(400).draw(7).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCUMFLEX).smoke(LAMBDA_SMOKE)
|
||||
.dura(400).draw(7).inspect(39).reloadSequential(true).reloadChangeType(true).crosshair(Crosshair.L_CIRCUMFLEX).smoke(LAMBDA_SMOKE)
|
||||
.rec(new Receiver(0)
|
||||
.dmg(20F).delay(24).reload(16, 16, 16, 0).jam(0).sound("hbm:weapon.glShoot", 1.0F, 1.0F)
|
||||
.mag(new MagazineSingleReload(0, 4).addConfigs(g40_he, g40_heat, g40_demo, g40_inc, g40_phosphorus))
|
||||
|
||||
@ -5,6 +5,8 @@ import java.util.function.BiFunction;
|
||||
import java.util.function.Function;
|
||||
|
||||
import com.hbm.config.ClientConfig;
|
||||
import com.hbm.entity.projectile.EntityBulletBaseMK4;
|
||||
import com.hbm.extprop.HbmLivingProps;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.ItemEnums.EnumCasingType;
|
||||
import com.hbm.items.weapon.sedna.BulletConfig;
|
||||
@ -28,7 +30,9 @@ import com.hbm.render.anim.BusAnimationSequence;
|
||||
import com.hbm.render.anim.BusAnimationKeyframe.IType;
|
||||
import com.hbm.render.anim.HbmAnimations.AnimType;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class XFactory556mm {
|
||||
@ -40,6 +44,18 @@ public class XFactory556mm {
|
||||
public static BulletConfig r556_jhp;
|
||||
public static BulletConfig r556_ap;
|
||||
|
||||
public static BulletConfig r556_inc_sp;
|
||||
public static BulletConfig r556_inc_fmj;
|
||||
public static BulletConfig r556_inc_jhp;
|
||||
public static BulletConfig r556_inc_ap;
|
||||
|
||||
public static BiConsumer<EntityBulletBaseMK4, MovingObjectPosition> INCENDIARY = (bullet, mop) -> {
|
||||
if(mop.entityHit != null && mop.entityHit instanceof EntityLivingBase) {
|
||||
HbmLivingProps data = HbmLivingProps.getData((EntityLivingBase) mop.entityHit);
|
||||
if(data.phosphorus < 300) data.phosphorus = 300;
|
||||
}
|
||||
};
|
||||
|
||||
public static void init() {
|
||||
SpentCasing casing556 = new SpentCasing(CasingType.BOTTLENECK).setColor(SpentCasing.COLOR_CASE_BRASS).setScale(0.8F);
|
||||
r556_sp = new BulletConfig().setItem(EnumAmmo.R556_SP).setCasing(EnumCasingType.SMALL, 8)
|
||||
@ -51,21 +67,36 @@ public class XFactory556mm {
|
||||
r556_ap = new BulletConfig().setItem(EnumAmmo.R556_AP).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.5F).setThresholdNegation(10F).setArmorPiercing(0.15F)
|
||||
.setCasing(casing556.clone().setColor(SpentCasing.COLOR_CASE_44).register("r556ap"));
|
||||
|
||||
r556_inc_sp = r556_sp.clone().setOnImpact(INCENDIARY);
|
||||
r556_inc_fmj = r556_fmj.clone().setOnImpact(INCENDIARY);
|
||||
r556_inc_jhp = r556_jhp.clone().setOnImpact(INCENDIARY);
|
||||
r556_inc_ap = r556_ap.clone().setOnImpact(INCENDIARY);
|
||||
|
||||
ModItems.gun_g3 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()
|
||||
.dura(3_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE)
|
||||
.rec(new Receiver(0)
|
||||
.dmg(5F).delay(2).auto(true).dry(15).spread(0.0F).reload(50).jam(47).sound("hbm:weapon.fire.assault", 1.0F, 1.0F)
|
||||
.dmg(5F).delay(2).auto(true).dry(15).reload(50).jam(47).sound("hbm:weapon.fire.assault", 1.0F, 1.0F)
|
||||
.mag(new MagazineFullReload(0, 30).addConfigs(r556_sp, r556_fmj, r556_jhp, r556_ap))
|
||||
.offset(1, -0.0625 * 2.5, -0.25D)
|
||||
.setupStandardFire().recoil(LAMBDA_RECOIL_G3))
|
||||
.setupStandardConfiguration().ps(Lego.LAMBDA_STANDARD_CLICK_SECONDARY)
|
||||
.anim(LAMBDA_G3_ANIMS).orchestra(Orchestras.ORCHESTRA_G3)
|
||||
).setNameMutator(LAMBDA_NAME_G3).setUnlocalizedName("gun_g3");
|
||||
ModItems.gun_g3_zebra = new ItemGunBaseNT(WeaponQuality.B_SIDE, new GunConfig()
|
||||
.dura(6_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE).scopeTexture(XFactory44.scope_lilmac)
|
||||
.rec(new Receiver(0)
|
||||
.dmg(7.5F).delay(2).auto(true).dry(15).spreadHipfire(0.01F).reload(50).jam(47).sound("hbm:weapon.fire.silenced", 1.0F, 1.0F)
|
||||
.mag(new MagazineFullReload(0, 30).addConfigs(r556_inc_sp, r556_inc_fmj, r556_inc_jhp, r556_inc_ap))
|
||||
.offset(1, -0.0625 * 2.5, -0.25D)
|
||||
.setupStandardFire().recoil(LAMBDA_RECOIL_G3))
|
||||
.setupStandardConfiguration().ps(Lego.LAMBDA_STANDARD_CLICK_SECONDARY)
|
||||
.anim(LAMBDA_G3_ANIMS).orchestra(Orchestras.ORCHESTRA_G3)
|
||||
).setNameMutator(LAMBDA_NAME_G3).setUnlocalizedName("gun_g3_zebra");
|
||||
|
||||
ModItems.gun_stg77 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()
|
||||
.dura(3_000).draw(10).inspect(125).crosshair(Crosshair.CIRCLE).scopeTexture(scope_lilmac).smoke(LAMBDA_SMOKE)
|
||||
.rec(new Receiver(0)
|
||||
.dmg(10F).delay(2).dry(15).auto(true).spread(0.0F).reload(46).jam(0).sound("hbm:weapon.fire.assault", 1.0F, 1.0F)
|
||||
.dmg(10F).delay(2).dry(15).auto(true).reload(46).jam(0).sound("hbm:weapon.fire.assault", 1.0F, 1.0F)
|
||||
.mag(new MagazineFullReload(0, 30).addConfigs(r556_sp, r556_fmj, r556_jhp, r556_ap))
|
||||
.offset(1, -0.0625 * 2.5, -0.25D)
|
||||
.setupStandardFire().recoil(LAMBDA_RECOIL_STG))
|
||||
|
||||
@ -33,6 +33,8 @@ public interface IMagazine<T> {
|
||||
public void useUpAmmo(ItemStack stack, IInventory inventory, int amount);
|
||||
/** If a reload can even be initiated, i.e. the player even has bullets to load, inventory can be null */
|
||||
public boolean canReload(ItemStack stack, IInventory inventory);
|
||||
/** On the begin of a reload, potentially change the mag type before the reload happens for animation purposes */
|
||||
public void initNewType(ItemStack stack, IInventory inventory);
|
||||
/** The action done at the end of one reload cycle, either loading one shell or replacing the whole mag, inventory can be null */
|
||||
public void reloadAction(ItemStack stack, IInventory inventory);
|
||||
/** The stack that should be displayed for the ammo HUD */
|
||||
|
||||
@ -3,6 +3,8 @@ package com.hbm.items.weapon.sedna.mags;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.tool.ItemAmmoBag.InventoryAmmoBag;
|
||||
import com.hbm.items.weapon.sedna.BulletConfig;
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
|
||||
import com.hbm.particle.SpentCasing;
|
||||
@ -44,6 +46,23 @@ public class MagazineBelt implements IMagazine<BulletConfig> {
|
||||
IMagazine.handleAmmoBag(inventory, first, toRemove);
|
||||
if(amount <= 0) return;
|
||||
}
|
||||
|
||||
if(slot.getItem() == ModItems.ammo_bag) {
|
||||
InventoryAmmoBag bag = new InventoryAmmoBag(slot);
|
||||
for(int j = 0; j < bag.getSizeInventory(); j++) {
|
||||
ItemStack bagslot = bag.getStackInSlot(j);
|
||||
|
||||
if(bagslot != null) {
|
||||
if(first.ammo.matchesRecipe(bagslot, true)) {
|
||||
int toRemove = Math.min(bagslot.stackSize, amount);
|
||||
amount -= toRemove;
|
||||
bag.decrStackSize(j, toRemove);
|
||||
IMagazine.handleAmmoBag(inventory, first, toRemove);
|
||||
if(amount <= 0) return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -52,6 +71,7 @@ public class MagazineBelt implements IMagazine<BulletConfig> {
|
||||
@Override public int getCapacity(ItemStack stack) { return 0; }
|
||||
@Override public void setAmount(ItemStack stack, int amount) { }
|
||||
@Override public boolean canReload(ItemStack stack, IInventory inventory) { return false; }
|
||||
@Override public void initNewType(ItemStack stack, IInventory inventory) { }
|
||||
@Override public void reloadAction(ItemStack stack, IInventory inventory) { }
|
||||
@Override public void setAmountBeforeReload(ItemStack stack, int amount) { }
|
||||
@Override public int getAmountBeforeReload(ItemStack stack) { return 0; }
|
||||
@ -68,6 +88,17 @@ public class MagazineBelt implements IMagazine<BulletConfig> {
|
||||
|
||||
if(slot != null) {
|
||||
if(first.ammo.matchesRecipe(slot, true)) count += slot.stackSize;
|
||||
|
||||
if(slot.getItem() == ModItems.ammo_bag) {
|
||||
InventoryAmmoBag bag = new InventoryAmmoBag(slot);
|
||||
for(int j = 0; j < bag.getSizeInventory(); j++) {
|
||||
ItemStack bagslot = bag.getStackInSlot(j);
|
||||
|
||||
if(bagslot != null) {
|
||||
if(first.ammo.matchesRecipe(bagslot, true)) count += bagslot.stackSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return count;
|
||||
@ -100,6 +131,19 @@ public class MagazineBelt implements IMagazine<BulletConfig> {
|
||||
for(BulletConfig config : this.acceptedBullets) {
|
||||
if(config.ammo.matchesRecipe(slot, true)) return config;
|
||||
}
|
||||
|
||||
if(slot.getItem() == ModItems.ammo_bag) {
|
||||
InventoryAmmoBag bag = new InventoryAmmoBag(slot);
|
||||
for(int j = 0; j < bag.getSizeInventory(); j++) {
|
||||
ItemStack bagslot = bag.getStackInSlot(j);
|
||||
|
||||
if(bagslot != null) {
|
||||
for(BulletConfig config : this.acceptedBullets) {
|
||||
if(config.ammo.matchesRecipe(bagslot, true)) return config;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -52,6 +52,7 @@ public class MagazineFluid implements IMagazine<FluidType> {
|
||||
@Override public void setAmount(ItemStack stack, int amount) { setMagCount(stack, index, amount); }
|
||||
|
||||
@Override public boolean canReload(ItemStack stack, IInventory inventory) { return false; }
|
||||
@Override public void initNewType(ItemStack stack, IInventory inventory) { }
|
||||
@Override public void reloadAction(ItemStack stack, IInventory inventory) { }
|
||||
@Override public SpentCasing getCasing(ItemStack stack, IInventory inventory) { return null; }
|
||||
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
package com.hbm.items.weapon.sedna.mags;
|
||||
|
||||
import com.hbm.items.weapon.sedna.BulletConfig;
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
@ -12,76 +10,9 @@ public class MagazineFullReload extends MagazineSingleTypeBase {
|
||||
super(index, capacity);
|
||||
}
|
||||
|
||||
/** Returns true if the player has the same ammo if partially loaded, or any valid ammo if not */
|
||||
@Override
|
||||
public boolean canReload(ItemStack stack, IInventory inventory) {
|
||||
|
||||
if(this.getAmount(stack, inventory) >= this.getCapacity(stack)) return false;
|
||||
|
||||
if(inventory == null) return true;
|
||||
|
||||
for(int i = 0; i < inventory.getSizeInventory(); i++) {
|
||||
ItemStack slot = inventory.getStackInSlot(i);
|
||||
|
||||
if(slot != null) {
|
||||
if(this.getAmount(stack, inventory) == 0) {
|
||||
for(BulletConfig config : this.acceptedBullets) {
|
||||
if(config.ammo.matchesRecipe(slot, true)) return true;
|
||||
}
|
||||
} else {
|
||||
BulletConfig config = this.getType(stack, inventory);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); }
|
||||
if(config.ammo.matchesRecipe(slot, true)) return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Reloads all rounds at once. If the mag is empty, the mag's type will change to the first valid ammo type */
|
||||
@Override
|
||||
public void reloadAction(ItemStack stack, IInventory inventory) {
|
||||
|
||||
if(inventory == null) {
|
||||
BulletConfig config = this.getType(stack, inventory);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); } //fixing broken NBT
|
||||
this.setAmount(stack, this.capacity);
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0; i < inventory.getSizeInventory(); i++) {
|
||||
ItemStack slot = inventory.getStackInSlot(i);
|
||||
|
||||
if(slot != null) {
|
||||
|
||||
//mag is empty, assume next best type
|
||||
if(this.getAmount(stack, inventory) == 0) {
|
||||
|
||||
for(BulletConfig config : this.acceptedBullets) {
|
||||
if(config.ammo.matchesRecipe(slot, true)) {
|
||||
this.setType(stack, config);
|
||||
int wantsToLoad = (int) Math.ceil((double) this.getCapacity(stack) / (double) config.ammoReloadCount);
|
||||
int toLoad = Math.min(wantsToLoad, slot.stackSize);
|
||||
this.setAmount(stack, Math.min(toLoad * config.ammoReloadCount, this.capacity));
|
||||
inventory.decrStackSize(i, toLoad);
|
||||
break;
|
||||
}
|
||||
}
|
||||
//mag has a type set, only load that
|
||||
} else {
|
||||
BulletConfig config = this.getType(stack, inventory);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); } //fixing broken NBT
|
||||
|
||||
if(config.ammo.matchesRecipe(slot, true)) {
|
||||
int alreadyLoaded = this.getAmount(stack, inventory);
|
||||
int wantsToLoad = (int) Math.ceil((double) (this.getCapacity(stack) - alreadyLoaded) / (double) config.ammoReloadCount);
|
||||
int toLoad = Math.min(wantsToLoad, slot.stackSize);
|
||||
this.setAmount(stack, Math.min((toLoad * config.ammoReloadCount) + alreadyLoaded, this.capacity));
|
||||
inventory.decrStackSize(i, toLoad);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
standardReload(stack, inventory, this.capacity);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
package com.hbm.items.weapon.sedna.mags;
|
||||
|
||||
import com.hbm.items.weapon.sedna.BulletConfig;
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
@ -12,73 +10,9 @@ public class MagazineSingleReload extends MagazineSingleTypeBase {
|
||||
super(index, capacity);
|
||||
}
|
||||
|
||||
/** Returns true if the player has the same ammo if partially loaded, or any valid ammo if not */
|
||||
@Override
|
||||
public boolean canReload(ItemStack stack, IInventory inventory) {
|
||||
|
||||
if(this.getAmount(stack, inventory) >= this.getCapacity(stack)) return false;
|
||||
|
||||
if(inventory == null) return true;
|
||||
|
||||
for(int i = 0; i < inventory.getSizeInventory(); i++) {
|
||||
ItemStack slot = inventory.getStackInSlot(i);
|
||||
|
||||
if(slot != null) {
|
||||
if(this.getAmount(stack, inventory) == 0) {
|
||||
for(BulletConfig config : this.acceptedBullets) {
|
||||
if(config.ammo.matchesRecipe(slot, true)) return true;
|
||||
}
|
||||
} else {
|
||||
BulletConfig config = this.getType(stack, inventory);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); }
|
||||
if(config.ammo.matchesRecipe(slot, true)) return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Reloads all rounds at once. If the mag is empty, the mag's type will change to the first valid ammo type */
|
||||
@Override
|
||||
public void reloadAction(ItemStack stack, IInventory inventory) {
|
||||
|
||||
if(inventory == null) {
|
||||
BulletConfig config = this.getType(stack, inventory);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); } //fixing broken NBT
|
||||
this.setAmount(stack, this.getAmount(stack, inventory) + 1);
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0; i < inventory.getSizeInventory(); i++) {
|
||||
ItemStack slot = inventory.getStackInSlot(i);
|
||||
|
||||
if(slot != null) {
|
||||
|
||||
//mag is empty, assume next best type
|
||||
if(this.getAmount(stack, inventory) == 0) {
|
||||
|
||||
for(BulletConfig config : this.acceptedBullets) {
|
||||
if(config.ammo.matchesRecipe(slot, true)) {
|
||||
this.setType(stack, config);
|
||||
this.setAmount(stack, 1);
|
||||
inventory.decrStackSize(i, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
//mag has a type set, only load that
|
||||
} else {
|
||||
BulletConfig config = this.getType(stack, inventory);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); } //fixing broken NBT
|
||||
|
||||
if(config.ammo.matchesRecipe(slot, true)) {
|
||||
int alreadyLoaded = this.getAmount(stack, inventory);
|
||||
this.setAmount(stack, alreadyLoaded + 1);
|
||||
inventory.decrStackSize(i, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
standardReload(stack, inventory, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,9 +3,12 @@ package com.hbm.items.weapon.sedna.mags;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.tool.ItemAmmoBag.InventoryAmmoBag;
|
||||
import com.hbm.items.weapon.sedna.BulletConfig;
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
|
||||
import com.hbm.particle.SpentCasing;
|
||||
import com.hbm.util.BobMathUtil;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
@ -74,6 +77,149 @@ public abstract class MagazineSingleTypeBase implements IMagazine<BulletConfig>
|
||||
IMagazine.handleAmmoBag(inventory, this.getType(stack, inventory), amount);
|
||||
}
|
||||
|
||||
/** Returns true if the player has the same ammo if partially loaded, or any valid ammo if not */
|
||||
@Override
|
||||
public boolean canReload(ItemStack stack, IInventory inventory) {
|
||||
if(this.getAmount(stack, inventory) >= this.getCapacity(stack)) return false;
|
||||
if(inventory == null) return true;
|
||||
BulletConfig nextConfig = getFirstConfig(stack, inventory);
|
||||
return nextConfig != null;
|
||||
}
|
||||
|
||||
public void standardReload(ItemStack stack, IInventory inventory, int loadLimit) {
|
||||
|
||||
if(inventory == null) {
|
||||
BulletConfig config = this.getType(stack, inventory);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); } //fixing broken NBT
|
||||
this.setAmount(stack, this.capacity);
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0; i < inventory.getSizeInventory(); i++) {
|
||||
ItemStack slot = inventory.getStackInSlot(i);
|
||||
|
||||
if(slot != null) {
|
||||
|
||||
//mag is empty, assume next best type
|
||||
if(this.getAmount(stack, null) == 0) {
|
||||
|
||||
for(BulletConfig config : this.acceptedBullets) {
|
||||
if(config.ammo.matchesRecipe(slot, true)) {
|
||||
this.setType(stack, config);
|
||||
int wantsToLoad = (int) Math.ceil((double) this.getCapacity(stack) / (double) config.ammoReloadCount);
|
||||
int toLoad = BobMathUtil.min(wantsToLoad, slot.stackSize, loadLimit);
|
||||
this.setAmount(stack, Math.min(toLoad * config.ammoReloadCount, this.capacity));
|
||||
inventory.decrStackSize(i, toLoad);
|
||||
break;
|
||||
}
|
||||
}
|
||||
//mag has a type set, only load that
|
||||
} else {
|
||||
BulletConfig config = this.getType(stack, null);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); } //fixing broken NBT
|
||||
|
||||
if(config.ammo.matchesRecipe(slot, true)) {
|
||||
int alreadyLoaded = this.getAmount(stack, null);
|
||||
int wantsToLoad = (int) Math.ceil((double) (this.getCapacity(stack) - alreadyLoaded) / (double) config.ammoReloadCount);
|
||||
int toLoad = BobMathUtil.min(wantsToLoad, slot.stackSize, loadLimit);
|
||||
this.setAmount(stack, Math.min((toLoad * config.ammoReloadCount) + alreadyLoaded, this.capacity));
|
||||
inventory.decrStackSize(i, toLoad);
|
||||
}
|
||||
}
|
||||
|
||||
if(slot.getItem() == ModItems.ammo_bag) {
|
||||
InventoryAmmoBag bag = new InventoryAmmoBag(slot);
|
||||
|
||||
for(int j = 0; j < bag.getSizeInventory(); j++) {
|
||||
ItemStack bagslot = bag.getStackInSlot(j);
|
||||
|
||||
if(bagslot != null) {
|
||||
|
||||
//mag is empty, assume next best type
|
||||
if(this.getAmount(stack, null) == 0) {
|
||||
|
||||
for(BulletConfig config : this.acceptedBullets) {
|
||||
if(config.ammo.matchesRecipe(bagslot, true)) {
|
||||
this.setType(stack, config);
|
||||
int wantsToLoad = (int) Math.ceil((double) this.getCapacity(stack) / (double) config.ammoReloadCount);
|
||||
int toLoad = BobMathUtil.min(wantsToLoad, bagslot.stackSize, loadLimit);
|
||||
this.setAmount(stack, Math.min(toLoad * config.ammoReloadCount, this.capacity));
|
||||
bag.decrStackSize(j, toLoad);
|
||||
break;
|
||||
}
|
||||
}
|
||||
//mag has a type set, only load that
|
||||
} else {
|
||||
BulletConfig config = this.getType(stack, null);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); } //fixing broken NBT
|
||||
|
||||
if(config.ammo.matchesRecipe(bagslot, true)) {
|
||||
int alreadyLoaded = this.getAmount(stack, bag);
|
||||
int wantsToLoad = (int) Math.ceil((double) (this.getCapacity(stack) - alreadyLoaded) / (double) config.ammoReloadCount);
|
||||
int toLoad = BobMathUtil.min(wantsToLoad, bagslot.stackSize, loadLimit);
|
||||
this.setAmount(stack, Math.min((toLoad * config.ammoReloadCount) + alreadyLoaded, this.capacity));
|
||||
bag.decrStackSize(j, toLoad);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Returns the config of the first potential loadable round, either what's already chambered or the first valid one if empty */
|
||||
public BulletConfig getFirstConfig(ItemStack stack, IInventory inventory) {
|
||||
if(inventory == null) return null;
|
||||
|
||||
for(int i = 0; i < inventory.getSizeInventory(); i++) {
|
||||
ItemStack slot = inventory.getStackInSlot(i);
|
||||
|
||||
if(slot != null) {
|
||||
if(this.getAmount(stack, inventory) == 0) {
|
||||
for(BulletConfig config : this.acceptedBullets) {
|
||||
if(config.ammo.matchesRecipe(slot, true)) return config;
|
||||
}
|
||||
} else {
|
||||
BulletConfig config = this.getType(stack, inventory);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); }
|
||||
if(config.ammo.matchesRecipe(slot, true)) return config;
|
||||
}
|
||||
|
||||
if(slot.getItem() == ModItems.ammo_bag) {
|
||||
InventoryAmmoBag bag = new InventoryAmmoBag(slot);
|
||||
|
||||
for(int j = 0; j < bag.getSizeInventory(); j++) {
|
||||
ItemStack bagslot = bag.getStackInSlot(j);
|
||||
|
||||
if(bagslot != null) {
|
||||
if(this.getAmount(stack, bag) == 0) {
|
||||
for(BulletConfig config : this.acceptedBullets) {
|
||||
if(config.ammo.matchesRecipe(bagslot, true)) return config;
|
||||
}
|
||||
} else {
|
||||
BulletConfig config = this.getType(stack, bag);
|
||||
if(config == null) { config = this.acceptedBullets.get(0); this.setType(stack, config); }
|
||||
if(config.ammo.matchesRecipe(bagslot, true)) return config;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public void initNewType(ItemStack stack, IInventory inventory) {
|
||||
if(inventory == null) return;
|
||||
BulletConfig nextConfig = getFirstConfig(stack, inventory);
|
||||
if(nextConfig != null) {
|
||||
int i = BulletConfig.configs.indexOf(nextConfig);
|
||||
this.setMagType(stack, index, i);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public int getCapacity(ItemStack stack) { return capacity; }
|
||||
@Override public int getAmount(ItemStack stack, IInventory inventory) { return getMagCount(stack, index); }
|
||||
@Override public void setAmount(ItemStack stack, int amount) { setMagCount(stack, index, amount); }
|
||||
@ -84,7 +230,7 @@ public abstract class MagazineSingleTypeBase implements IMagazine<BulletConfig>
|
||||
@Override public int getAmountAfterReload(ItemStack stack) { return ItemGunBaseNT.getValueInt(stack, KEY_MAG_AFTER + index); }
|
||||
|
||||
// MAG TYPE //
|
||||
public static int getMagType(ItemStack stack, int index) { return ItemGunBaseNT.getValueInt(stack, KEY_MAG_TYPE + index); } //TODO: replace with named tags to avoid ID shifting
|
||||
public static int getMagType(ItemStack stack, int index) { return ItemGunBaseNT.getValueInt(stack, KEY_MAG_TYPE + index); }
|
||||
public static void setMagType(ItemStack stack, int index, int value) { ItemGunBaseNT.setValueInt(stack, KEY_MAG_TYPE + index, value); }
|
||||
|
||||
// MAG COUNT //
|
||||
|
||||
@ -88,7 +88,7 @@ public class WeaponModManager {
|
||||
ModItems.gun_spas12,
|
||||
ModItems.gun_panzerschreck };
|
||||
Item[] wsteelGuns = new Item[] {
|
||||
ModItems.gun_g3,
|
||||
ModItems.gun_g3, ModItems.gun_g3_zebra,
|
||||
ModItems.gun_stinger,
|
||||
ModItems.gun_chemthrower };
|
||||
Item[] ferroGuns = new Item[] {
|
||||
@ -101,6 +101,7 @@ public class WeaponModManager {
|
||||
ModItems.gun_missile_launcher,
|
||||
ModItems.gun_tesla_cannon };
|
||||
Item[] bigmtGuns = new Item[] {
|
||||
ModItems.gun_laser_pistol, ModItems.gun_laser_pistol_pew_pew,
|
||||
ModItems.gun_stg77,
|
||||
ModItems.gun_fatman,
|
||||
ModItems.gun_tau };
|
||||
@ -130,7 +131,7 @@ public class WeaponModManager {
|
||||
new WeaponModDefinition(EnumModSpecial.SAW)
|
||||
.addMod(new Item[] {ModItems.gun_maresleg, ModItems.gun_double_barrel}, new WeaponModSawedOff(ID_SAWED_OFF))
|
||||
.addMod(ModItems.gun_panzerschreck, new WeaponModPanzerschreckSawedOff(ID_NO_SHIELD))
|
||||
.addMod(ModItems.gun_g3, new WeapnModG3SawedOff(ID_NO_STOCK));
|
||||
.addMod(new Item[] {ModItems.gun_g3, ModItems.gun_g3_zebra}, new WeapnModG3SawedOff(ID_NO_STOCK));
|
||||
new WeaponModDefinition(EnumModSpecial.GREASEGUN).addMod(ModItems.gun_greasegun, new WeaponModGreasegun(ID_GREASEGUN_CLEAN));
|
||||
new WeaponModDefinition(EnumModSpecial.SLOWDOWN).addMod(ModItems.gun_minigun, new WeaponModSlowdown(207));
|
||||
new WeaponModDefinition(EnumModSpecial.SPEEDUP)
|
||||
|
||||
@ -3,7 +3,7 @@ package com.hbm.lib;
|
||||
public class RefStrings {
|
||||
public static final String MODID = "hbm";
|
||||
public static final String NAME = "Hbm's Nuclear Tech Mod";
|
||||
public static final String VERSION = "1.0.27 BETA (5299)";
|
||||
public static final String VERSION = "1.0.27 BETA (5313)";
|
||||
//HBM's Beta Naming Convention:
|
||||
//V T (X)
|
||||
//V -> next release version
|
||||
|
||||
@ -650,6 +650,8 @@ public class CraftingManager {
|
||||
addRecipeAuto(new ItemStack(ModItems.containment_box, 1), new Object[] { "LUL", "UCU", "LUL", 'L', PB.plate(), 'U', U238.billet(), 'C', ModBlocks.crate_steel });
|
||||
addRecipeAuto(new ItemStack(ModItems.casing_bag, 1), new Object[] { " L ", "LGL", " L ", 'L', Items.leather, 'G', GUNMETAL.plate() });
|
||||
addRecipeAuto(new ItemStack(ModItems.casing_bag, 1), new Object[] { " L ", "LGL", " L ", 'L', ANY_RUBBER.ingot(), 'G', GUNMETAL.plate() });
|
||||
addRecipeAuto(new ItemStack(ModItems.ammo_bag, 1), new Object[] { "LLL", "MGM", "LLL", 'L', Items.leather, 'G', WEAPONSTEEL.plate(), 'M', WEAPONSTEEL.mechanism() });
|
||||
addRecipeAuto(new ItemStack(ModItems.ammo_bag, 1), new Object[] { "LLL", "MGM", "LLL", 'L', ANY_RUBBER.ingot(), 'G', WEAPONSTEEL.plate(), 'M', WEAPONSTEEL.mechanism() });
|
||||
|
||||
addRecipeAuto(new ItemStack(ModBlocks.absorber, 1), new Object[] { "ICI", "CPC", "ICI", 'I', CU.ingot(), 'C', COAL.dust(), 'P', PB.dust() });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.absorber_red, 1), new Object[] { "ICI", "CPC", "ICI", 'I', TI.ingot(), 'C', COAL.dust(), 'P', ModBlocks.absorber });
|
||||
@ -752,7 +754,7 @@ public class CraftingManager {
|
||||
addRecipeAuto(new ItemStack(ModBlocks.struct_watz_core, 1), new Object[] { "CBC", "BHB", "CBC", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'B', ANY_RESISTANTALLOY.plateCast(), 'H', ModBlocks.watz_cooler });
|
||||
addShapelessAuto(new ItemStack(ModBlocks.fusion_heater), new Object[] { ModBlocks.fusion_hatch });
|
||||
addShapelessAuto(new ItemStack(ModItems.energy_core), new Object[] { ModItems.fusion_core, ModItems.fuse });
|
||||
addRecipeAuto(new ItemStack(ModItems.catalytic_converter, 1), new Object[] { "PCP", "PBP", "PCP", 'P', ANY_HARDPLASTIC.ingot(), 'C', CO.dust(), 'B', BI.ingot() });
|
||||
addRecipeAuto(new ItemStack(ModItems.catalytic_converter, 1), new Object[] { "PCP", "PBP", "PCP", 'P', ANY_HARDPLASTIC.ingot(), 'C', CO.dust(), 'B', ANY_BISMOID.ingot() });
|
||||
|
||||
addRecipeAuto(new ItemStack(ModItems.upgrade_nullifier, 1), new Object[] { "SPS", "PUP", "SPS", 'S', STEEL.plate(), 'P', ModItems.powder_fire, 'U', ModItems.upgrade_template });
|
||||
addRecipeAuto(new ItemStack(ModItems.upgrade_smelter, 1), new Object[] { "PHP", "CUC", "DTD", 'P', CU.plate(), 'H', Blocks.hopper, 'C', ModItems.coil_tungsten, 'U', ModItems.upgrade_template, 'D', ModItems.coil_copper, 'T', ModBlocks.machine_transformer });
|
||||
|
||||
@ -75,7 +75,7 @@ public class ResourceManager {
|
||||
public static final IModelCustom refinery_exploded = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/refinery_exploded.obj")).asVBO();
|
||||
public static final IModelCustom fraction_tower = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/fraction_tower.obj"));
|
||||
public static final IModelCustom fraction_spacer = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/fraction_spacer.obj"));
|
||||
public static final IModelCustom cracking_tower = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/cracking_tower.obj")).asVBO();
|
||||
public static final IModelCustom cracking_tower = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/catalytic_cracker.obj")).asVBO();
|
||||
public static final IModelCustom catalytic_reformer = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/catalytic_reformer.obj")).asVBO();
|
||||
public static final IModelCustom hydrotreater = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/hydrotreater.obj")).asVBO();
|
||||
public static final IModelCustom liquefactor = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/liquefactor.obj")).asVBO();
|
||||
@ -492,7 +492,7 @@ public class ResourceManager {
|
||||
public static final ResourceLocation vacuum_distill_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/vacuum_distill.png");
|
||||
public static final ResourceLocation fraction_tower_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/fraction_tower.png");
|
||||
public static final ResourceLocation fraction_spacer_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/fraction_spacer.png");
|
||||
public static final ResourceLocation cracking_tower_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/cracking_tower.png");
|
||||
public static final ResourceLocation cracking_tower_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/catalytic_cracker.png");
|
||||
public static final ResourceLocation catalytic_reformer_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/catalytic_reformer.png");
|
||||
public static final ResourceLocation hydrotreater_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/hydrotreater.png");
|
||||
public static final ResourceLocation liquefactor_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/liquefactor.png");
|
||||
@ -982,6 +982,7 @@ public class ResourceManager {
|
||||
public static final ResourceLocation uzi_saturnite_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/uzi_saturnite.png");
|
||||
public static final ResourceLocation panzerschreck_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/panzerschreck.png");
|
||||
public static final ResourceLocation g3_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3.png");
|
||||
public static final ResourceLocation g3_zebra_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_zebra.png");
|
||||
public static final ResourceLocation g3_green_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_polymer_green.png");
|
||||
public static final ResourceLocation g3_black_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_polymer_black.png");
|
||||
public static final ResourceLocation g3_attachments = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_attachments.png");
|
||||
|
||||
@ -2,6 +2,7 @@ package com.hbm.render.item.weapon.sedna;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
|
||||
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
|
||||
import com.hbm.main.ResourceManager;
|
||||
@ -13,6 +14,12 @@ import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class ItemRenderG3 extends ItemRenderWeaponBase {
|
||||
|
||||
public ResourceLocation texture;
|
||||
|
||||
public ItemRenderG3(ResourceLocation texture) {
|
||||
this.texture = texture;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.25F; }
|
||||
|
||||
@ -209,16 +216,16 @@ public class ItemRenderG3 extends ItemRenderWeaponBase {
|
||||
}
|
||||
|
||||
public boolean hasSilencer(ItemStack stack) {
|
||||
return WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SILENCER);
|
||||
return stack.getItem() == ModItems.gun_g3_zebra || WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SILENCER);
|
||||
}
|
||||
|
||||
public boolean isScoped(ItemStack stack) {
|
||||
return WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE);
|
||||
return stack.getItem() == ModItems.gun_g3_zebra || WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE);
|
||||
}
|
||||
|
||||
public ResourceLocation getTexture(ItemStack stack) {
|
||||
if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_FURNITURE_GREEN)) return ResourceManager.g3_green_tex;
|
||||
if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_FURNITURE_BLACK)) return ResourceManager.g3_black_tex;
|
||||
return ResourceManager.g3_tex;
|
||||
return texture;
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,7 +45,7 @@ public class RenderPyroOven extends TileEntitySpecialRenderer implements IItemRe
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(1.5, 0, 1.5);
|
||||
GL11.glRotated(anim * -15D % 360D, 0, 1, 0);
|
||||
GL11.glRotated(anim * 45D % 360D, 0, 1, 0);
|
||||
GL11.glTranslated(-1.5, 0, -1.5);
|
||||
ResourceManager.pyrooven.renderPart("Fan");
|
||||
GL11.glPopMatrix();
|
||||
|
||||
@ -6,7 +6,6 @@ import com.hbm.inventory.fluid.FluidType;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.inventory.fluid.trait.FT_Flammable;
|
||||
import com.hbm.inventory.gui.GUIIGenerator;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
import com.hbm.tileentity.TileEntityMachineBase;
|
||||
import com.hbm.util.CompatEnergyControl;
|
||||
@ -290,7 +289,7 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
return new GUIIGenerator(player.inventory, this);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -281,6 +281,7 @@ chem.XENON=Lindeverfahren (Xenon)
|
||||
chem.XENON_OXY=Verbessertes Lindeverfahren (Xenon)
|
||||
chem.YELLOWCAKE=Yellowcakeproduktion
|
||||
|
||||
container.ammoBag=Mun-Tasche
|
||||
container.amsBase=AMS-Basis (Deko)
|
||||
container.amsEmitter=AMS-Emitter (Deko)
|
||||
container.amsLimiter=AMS-Stabilisator (Deko)
|
||||
@ -1029,6 +1030,7 @@ item.ammo_arty_nuke.name=16" Atomare Artilleriegranate
|
||||
item.ammo_arty_phosgene.name=16" Artilleriegranate (Phosgen)
|
||||
item.ammo_arty_phosphorus.name=16" Phosphor-Artilleriegranate
|
||||
item.ammo_arty_phosphorus_multi.name=16" Mehrfach-Phosphor-Artilleriegranate
|
||||
item.ammo_bag.name=Munitionstasche
|
||||
item.ammo_dgk.name=Goalkeeper-Zwilling CIWS 200er Gürtel
|
||||
item.ammo_fireext.name=Feuerlöscher-Wassertank
|
||||
item.ammo_fireext_foam.name=Feuerlöscher-Schaumtank
|
||||
@ -2082,6 +2084,7 @@ item.gun_folly.name=Folly
|
||||
item.gun_g3.name=Sturmgewehr
|
||||
item.gun_g3_a3.name=G3A3
|
||||
item.gun_g3_infiltrator.name=Infiltrierer
|
||||
item.gun_g3_zebra.name=Zebra-Gewehr
|
||||
item.gun_greasegun.name=Grease Gun
|
||||
item.gun_greasegun_m3.name=M3
|
||||
item.gun_hangman.name=Hangman
|
||||
|
||||
@ -682,6 +682,7 @@ commands.satellite.satellite_descended=Satellite successfully descended.
|
||||
commands.satellite.satellite_orbited=Satellite launched.
|
||||
commands.satellite.should_be_run_as_player=This command should be run by a player!
|
||||
|
||||
container.ammoBag=Ammo Bag
|
||||
container.amsBase=AMS Base (Deco)
|
||||
container.amsEmitter=AMS Emitter (Deco)
|
||||
container.amsLimiter=AMS Stabilizer (Deco)
|
||||
@ -1754,6 +1755,7 @@ item.ammo_arty_nuke.name=16" Nuclear Artillery Shell
|
||||
item.ammo_arty_phosgene.name=16" Phosgene Artillery Shell
|
||||
item.ammo_arty_phosphorus.name=16" Phosphorus Shell
|
||||
item.ammo_arty_phosphorus_multi.name=16" Multi Phosphorus Shell
|
||||
item.ammo_bag.name=Ammo Bag
|
||||
item.ammo_container.name=Ammo Container
|
||||
item.ammo_dgk.name=Goalkeeper Twin CIWS 200 Round Belt
|
||||
item.ammo_fireext.name=Fire Extinguisher Water Tank
|
||||
@ -2895,6 +2897,7 @@ item.gun_folly.name=Folly
|
||||
item.gun_g3.name=Assault Rifle
|
||||
item.gun_g3_a3.name=G3A3
|
||||
item.gun_g3_infiltrator.name=Infiltrator
|
||||
item.gun_g3_zebra.name=Zebra Rifle
|
||||
item.gun_greasegun.name=Grease Gun
|
||||
item.gun_greasegun_m3.name=M3
|
||||
item.gun_hangman.name=Hangman
|
||||
|
||||
7525
src/main/resources/assets/hbm/models/machines/catalytic_cracker.obj
Normal file
BIN
src/main/resources/assets/hbm/textures/gui/gui_ammo_bag.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 414 B After Width: | Height: | Size: 407 B |
|
Before Width: | Height: | Size: 408 B After Width: | Height: | Size: 406 B |
|
Before Width: | Height: | Size: 332 B After Width: | Height: | Size: 347 B |
|
Before Width: | Height: | Size: 267 B After Width: | Height: | Size: 268 B |
|
Before Width: | Height: | Size: 279 B After Width: | Height: | Size: 290 B |
|
After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 260 B |
|
Before Width: | Height: | Size: 137 B |
|
After Width: | Height: | Size: 11 KiB |