the new, the old, the mold
@ -125,10 +125,10 @@ public class PowerNet implements IPowerNet {
|
||||
@Override
|
||||
public long transferPower(long power) {
|
||||
|
||||
if(lastCleanup + 45 < System.currentTimeMillis()) {
|
||||
/*if(lastCleanup + 45 < System.currentTimeMillis()) {
|
||||
cleanup(this.subscribers);
|
||||
lastCleanup = System.currentTimeMillis();
|
||||
}
|
||||
}*/
|
||||
|
||||
return fairTransfer(this.subscribers, power);
|
||||
}
|
||||
@ -145,6 +145,8 @@ public class PowerNet implements IPowerNet {
|
||||
if(subscribers.isEmpty())
|
||||
return power;
|
||||
|
||||
cleanup(subscribers);
|
||||
|
||||
ConnectionPriority[] priorities = new ConnectionPriority[] {ConnectionPriority.HIGH, ConnectionPriority.NORMAL, ConnectionPriority.LOW};
|
||||
|
||||
for(ConnectionPriority p : priorities) {
|
||||
|
||||
@ -19,7 +19,6 @@ import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
@ -1140,6 +1140,7 @@ public class ModBlocks {
|
||||
public static final int guiID_brandon = 122;
|
||||
public static Block turret_arty;
|
||||
public static Block turret_himars;
|
||||
public static Block turret_sentry;
|
||||
|
||||
public static Block rbmk_rod;
|
||||
public static Block rbmk_rod_mod;
|
||||
@ -2152,18 +2153,19 @@ public class ModBlocks {
|
||||
sat_dock = new MachineSatDock(Material.iron).setBlockName("sat_dock").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":sat_dock");
|
||||
soyuz_capsule = new SoyuzCapsule(Material.iron).setBlockName("soyuz_capsule").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":soyuz_capsule");
|
||||
|
||||
turret_chekhov = new TurretChekhov(Material.iron).setBlockName("turret_chekhov").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_chekhov = new TurretChekhov(Material.iron).setBlockName("turret_chekhov").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_friendly = new TurretFriendly(Material.iron).setBlockName("turret_friendly").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_jeremy = new TurretJeremy(Material.iron).setBlockName("turret_jeremy").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_tauon = new TurretTauon(Material.iron).setBlockName("turret_tauon").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_tauon = new TurretTauon(Material.iron).setBlockName("turret_tauon").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_richard = new TurretRichard(Material.iron).setBlockName("turret_richard").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_howard = new TurretHoward(Material.iron).setBlockName("turret_howard").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_howard = new TurretHoward(Material.iron).setBlockName("turret_howard").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_howard_damaged = new TurretHowardDamaged(Material.iron).setBlockName("turret_howard_damaged").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_rust");
|
||||
turret_maxwell = new TurretMaxwell(Material.iron).setBlockName("turret_maxwell").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_fritz = new TurretFritz(Material.iron).setBlockName("turret_fritz").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_maxwell = new TurretMaxwell(Material.iron).setBlockName("turret_maxwell").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_fritz = new TurretFritz(Material.iron).setBlockName("turret_fritz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_brandon = new TurretBrandon(Material.iron).setBlockName("turret_brandon").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_arty = new TurretArty(Material.iron).setBlockName("turret_arty").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_himars = new TurretHIMARS(Material.iron).setBlockName("turret_himars").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
turret_sentry = new TurretSentry().setBlockName("turret_sentry").setHardness(5.0F).setResistance(5.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
|
||||
rbmk_rod = new RBMKRod(false).setBlockName("rbmk_rod").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_element");
|
||||
rbmk_rod_mod = new RBMKRod(true).setBlockName("rbmk_rod_mod").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_element_mod");
|
||||
@ -2234,7 +2236,7 @@ public class ModBlocks {
|
||||
barricade = new BlockNoDrop(Material.sand).setBlockName("barricade").setHardness(1.0F).setResistance(2.5F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":barricade");
|
||||
machine_assembler = new MachineAssembler(Material.iron).setBlockName("machine_assembler").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_assembler");
|
||||
machine_assemfac = new MachineAssemfac(Material.iron).setBlockName("machine_assemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
machine_chemplant = new MachineChemplant(Material.iron).setBlockName("machine_chemplant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_chemplant");
|
||||
machine_chemplant = new MachineChemplant(Material.iron).setBlockName("machine_chemplant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
machine_chemfac = new MachineChemfac(Material.iron).setBlockName("machine_chemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
machine_mixer = new MachineMixer(Material.iron).setBlockName("machine_mixer").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
|
||||
machine_fluidtank = new MachineFluidTank(Material.iron).setBlockName("machine_fluidtank").setHardness(5.0F).setResistance(20.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_fluidtank");
|
||||
@ -2938,6 +2940,7 @@ public class ModBlocks {
|
||||
GameRegistry.registerBlock(turret_brandon, turret_brandon.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(turret_arty, turret_arty.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(turret_himars, turret_himars.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(turret_sentry, turret_sentry.getUnlocalizedName());
|
||||
|
||||
//Wall-mounted Explosives
|
||||
GameRegistry.registerBlock(charge_dynamite, ItemBlockBase.class, charge_dynamite.getUnlocalizedName());
|
||||
|
||||
102
src/main/java/com/hbm/blocks/turret/TurretSentry.java
Normal file
@ -0,0 +1,102 @@
|
||||
package com.hbm.blocks.turret;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.tileentity.turret.TileEntityTurretSentry;
|
||||
|
||||
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockContainer;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class TurretSentry extends BlockContainer {
|
||||
|
||||
public TurretSentry() {
|
||||
super(Material.iron);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World world, int meta) {
|
||||
return new TileEntityTurretSentry();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
|
||||
|
||||
if(world.isRemote) {
|
||||
return true;
|
||||
} else if(!player.isSneaking()) {
|
||||
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
|
||||
return true;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpaqueCube() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalBlock() {
|
||||
return false;
|
||||
}
|
||||
|
||||
Random rand = new Random();
|
||||
|
||||
@Override
|
||||
public void breakBlock(World world, int x, int y, int z, Block b, int meta) {
|
||||
|
||||
TileEntityTurretSentry sentry = (TileEntityTurretSentry) world.getTileEntity(x, y, z);
|
||||
|
||||
if(sentry != null) {
|
||||
for(int i = 0; i < sentry.getSizeInventory(); ++i) {
|
||||
ItemStack itemstack = sentry.getStackInSlot(i);
|
||||
|
||||
if(itemstack != null) {
|
||||
float oX = this.rand.nextFloat() * 0.8F + 0.1F;
|
||||
float oY = this.rand.nextFloat() * 0.8F + 0.1F;
|
||||
float oZ = this.rand.nextFloat() * 0.8F + 0.1F;
|
||||
|
||||
while(itemstack.stackSize > 0) {
|
||||
int toDrop = this.rand.nextInt(21) + 10;
|
||||
|
||||
if(toDrop > itemstack.stackSize) {
|
||||
toDrop = itemstack.stackSize;
|
||||
}
|
||||
|
||||
itemstack.stackSize -= toDrop;
|
||||
EntityItem entityitem = new EntityItem(world, x + oX, y + oY, z + oZ, new ItemStack(itemstack.getItem(), toDrop, itemstack.getItemDamage()));
|
||||
|
||||
if(itemstack.hasTagCompound()) {
|
||||
entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy());
|
||||
}
|
||||
|
||||
float jump = 0.05F;
|
||||
entityitem.motionX = (float) this.rand.nextGaussian() * jump;
|
||||
entityitem.motionY = (float) this.rand.nextGaussian() * jump + 0.2F;
|
||||
entityitem.motionZ = (float) this.rand.nextGaussian() * jump;
|
||||
world.spawnEntityInWorld(entityitem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
world.func_147453_f(x, y, z, b);
|
||||
}
|
||||
|
||||
super.breakBlock(world, x, y, z, b, meta);
|
||||
}
|
||||
}
|
||||
@ -63,6 +63,9 @@ public class WeaponRecipes {
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.mp_chip_4, 1), new Object[] { "P", "C", "S", 'P', ModItems.plate_polymer, 'C', ModItems.circuit_targeting_tier4, 'S', ModBlocks.steel_scaffold });
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.mp_chip_5, 1), new Object[] { "P", "C", "S", 'P', ModItems.plate_polymer, 'C', ModItems.circuit_targeting_tier5, 'S', ModBlocks.steel_scaffold });
|
||||
|
||||
//Turrets
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.turret_sentry, 1), new Object[] { "PPL", " MD", " SC", 'P', STEEL.plate(), 'M', ModItems.motor, 'L', ModItems.mechanism_rifle_1, 'S', ModBlocks.steel_scaffold, 'C', ModItems.circuit_red_copper, 'D', ModItems.crt_display });
|
||||
|
||||
//Guns
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_rpg, 1), new Object[] { "SSW", " MW", 'S', ModItems.hull_small_steel, 'W', IRON.plate(), 'M', ModItems.mechanism_launcher_1 });
|
||||
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_panzerschreck, 1), new Object[] { "SSS", " MW", 'S', ModItems.hull_small_steel, 'W', CU.plate(), 'M', ModItems.mechanism_launcher_1 });
|
||||
|
||||
@ -15,11 +15,7 @@ public class NukeTab extends CreativeTabs {
|
||||
@Override
|
||||
public Item getTabIconItem() {
|
||||
|
||||
if(ModBlocks.float_bomb != null)
|
||||
{
|
||||
return Item.getItemFromBlock(ModBlocks.float_bomb);
|
||||
}
|
||||
|
||||
if(ModBlocks.nuke_man != null) return Item.getItemFromBlock(ModBlocks.nuke_man);
|
||||
return Items.iron_pickaxe;
|
||||
}
|
||||
|
||||
|
||||
@ -7,6 +7,7 @@ import com.hbm.entity.mob.ai.EntityAIMaskmanLasergun;
|
||||
import com.hbm.entity.mob.ai.EntityAIMaskmanMinigun;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.util.ArmorUtil;
|
||||
|
||||
import api.hbm.entity.IRadiationImmune;
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
@ -21,6 +22,7 @@ import net.minecraft.entity.monster.EntityMob;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.projectile.EntityEgg;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.EntityDamageSourceIndirect;
|
||||
import net.minecraft.world.World;
|
||||
@ -118,8 +120,12 @@ public class EntityMaskMan extends EntityMob implements IBossDisplayData, IRadia
|
||||
protected void dropFewItems(boolean bool, int i) {
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
ItemStack mask = new ItemStack(ModItems.gas_mask_m65);
|
||||
ArmorUtil.installGasMaskFilter(mask, new ItemStack(ModItems.gas_mask_filter_combo));
|
||||
|
||||
this.entityDropItem(mask, 0F);
|
||||
this.dropItem(ModItems.coin_maskman, 1);
|
||||
this.dropItem(ModItems.gas_mask_m65, 1);
|
||||
this.dropItem(ModItems.v1, 1);
|
||||
this.dropItem(Items.skull, 1);
|
||||
}
|
||||
|
||||
@ -1,10 +1,21 @@
|
||||
package com.hbm.handler;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.stream.JsonWriter;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.armor.ItemModCladding;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.potion.HbmPotion;
|
||||
import com.hbm.util.Compat;
|
||||
|
||||
@ -15,7 +26,7 @@ import net.minecraft.item.ItemStack;
|
||||
|
||||
public class HazmatRegistry {
|
||||
|
||||
public static void registerHazmats() {
|
||||
public static void initDefault() {
|
||||
|
||||
//assuming coefficient of 10
|
||||
//real coefficient turned out to be 5
|
||||
@ -249,4 +260,80 @@ public class HazmatRegistry {
|
||||
|
||||
}
|
||||
|
||||
public static final Gson gson = new Gson();
|
||||
public static void registerHazmats() {
|
||||
File folder = MainRegistry.configHbmDir;
|
||||
|
||||
File config = new File(folder.getAbsolutePath() + File.separatorChar + "hbmRadResist.json");
|
||||
File template = new File(folder.getAbsolutePath() + File.separatorChar + "_hbmRadResist.json");
|
||||
|
||||
initDefault();
|
||||
|
||||
if(!config.exists()) {
|
||||
writeDefault(template);
|
||||
} else {
|
||||
HashMap<Item, Double> conf = readConfig(config);
|
||||
|
||||
if(conf != null) {
|
||||
entries.clear();
|
||||
entries.putAll(conf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void writeDefault(File file) {
|
||||
|
||||
try {
|
||||
JsonWriter writer = new JsonWriter(new FileWriter(file));
|
||||
writer.setIndent(" "); //pretty formatting
|
||||
writer.beginObject(); //initial '{'
|
||||
writer.name("comment").value("Template file, remove the underscore ('_') from the name to enable the config.");
|
||||
writer.name("entries").beginArray(); //all recipes are stored in an array called "entries"
|
||||
|
||||
for(Entry<Item, Double> entry : entries.entrySet()) {
|
||||
writer.beginObject(); //begin object for a single recipe
|
||||
writer.name("item").value(Item.itemRegistry.getNameForObject(entry.getKey()));
|
||||
writer.name("resistance").value(entry.getValue());
|
||||
writer.endObject(); //end recipe object
|
||||
}
|
||||
|
||||
writer.endArray(); //end recipe array
|
||||
writer.endObject(); //final '}'
|
||||
writer.close();
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static HashMap<Item, Double> readConfig(File config) {
|
||||
|
||||
try {
|
||||
JsonObject json = gson.fromJson(new FileReader(config), JsonObject.class);
|
||||
JsonArray array = json.get("entries").getAsJsonArray();
|
||||
HashMap<Item, Double> conf = new HashMap();
|
||||
|
||||
for(JsonElement element : array) {
|
||||
JsonObject object = (JsonObject) element;
|
||||
|
||||
try {
|
||||
String name = object.get("item").getAsString();
|
||||
Item item = (Item) Item.itemRegistry.getObject(name);
|
||||
double resistance = object.get("resistance").getAsDouble();
|
||||
if(item != null) {
|
||||
conf.put(item, resistance);
|
||||
} else {
|
||||
MainRegistry.logger.error("Tried loading unknown item " + name + " for hazmat entry.");
|
||||
}
|
||||
} catch(Exception ex) {
|
||||
MainRegistry.logger.error("Encountered " + ex + " trying to read hazmat entry " + element.toString());
|
||||
}
|
||||
}
|
||||
return conf;
|
||||
|
||||
} catch(Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ import com.hbm.explosion.ExplosionNT;
|
||||
import com.hbm.explosion.ExplosionNT.ExAttrib;
|
||||
import com.hbm.inventory.recipes.CentrifugeRecipes;
|
||||
import com.hbm.inventory.recipes.CrystallizerRecipes;
|
||||
import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe;
|
||||
import com.hbm.inventory.recipes.ShredderRecipes;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.tool.IItemAbility;
|
||||
@ -439,11 +440,11 @@ public abstract class ToolAbility {
|
||||
block = Blocks.redstone_ore;
|
||||
|
||||
ItemStack stack = new ItemStack(block, 1, meta);
|
||||
ItemStack result = CrystallizerRecipes.getOutput(stack);
|
||||
CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack);
|
||||
|
||||
if(result != null) {
|
||||
world.setBlockToAir(x, y, z);
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy()));
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.output.copy()));
|
||||
player.getHeldItem().damageItem(1, player);
|
||||
}
|
||||
|
||||
|
||||
@ -2,7 +2,10 @@ package com.hbm.handler.imc;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.hbm.inventory.FluidStack;
|
||||
import com.hbm.inventory.RecipesCommon;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe;
|
||||
|
||||
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@ -10,7 +13,7 @@ import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
public class IMCCrystallizer extends IMCHandler {
|
||||
|
||||
public static HashMap<Object, ItemStack> buffer = new HashMap();
|
||||
public static HashMap<Object, CrystallizerRecipe> buffer = new HashMap();
|
||||
|
||||
@Override
|
||||
public void process(IMCMessage message) {
|
||||
@ -28,13 +31,24 @@ public class IMCCrystallizer extends IMCHandler {
|
||||
NBTTagCompound input = data.getCompoundTag("input");
|
||||
ItemStack in = ItemStack.loadItemStackFromNBT(input);
|
||||
|
||||
int time = data.getInteger("duration");
|
||||
FluidStack acid = new FluidStack(Fluids.fromID(data.getInteger("acid")), data.getInteger("amount"));
|
||||
|
||||
if(time <= 0)
|
||||
time = 600;
|
||||
|
||||
if(acid.type == Fluids.NONE)
|
||||
acid = new FluidStack(Fluids.ACID, 500);
|
||||
|
||||
CrystallizerRecipe recipe = new CrystallizerRecipe(out, time, acid);
|
||||
|
||||
if(in != null) {
|
||||
buffer.put(new RecipesCommon.ComparableStack(in), out);
|
||||
buffer.put(new RecipesCommon.ComparableStack(in), recipe);
|
||||
} else {
|
||||
String dict = data.getString("oredict");
|
||||
|
||||
if(!dict.isEmpty()) {
|
||||
buffer.put(dict, out);
|
||||
buffer.put(dict, recipe);
|
||||
} else {
|
||||
this.printError(message, "Input stack could not be read!");
|
||||
}
|
||||
|
||||
@ -20,9 +20,14 @@ package com.hbm.handler.imc;
|
||||
- Set another tag compound like the output called "output". This will make the input a fixed item.
|
||||
- Set a string called "oredict". This will make the input an ore dict entry and allow processing of genericized items.
|
||||
|
||||
[OPTIONAL]
|
||||
The input has a few parameters that can be added:
|
||||
- Setting an integer "acid" will change the acid requirement to the fluid with that ID, in this case "amount" also has to be set to determine the fluid amount in mB. The default uses 500mB of hydrogen peroxide.
|
||||
- Setting an integer "duration" will change the base process time of this recipe in ticks, the default is 600 (30s).
|
||||
|
||||
EXAMPLES:
|
||||
|
||||
Recipe with fixed item, acidizing an alloy chestplate into 8 ingots:
|
||||
Recipe with fixed item, acidizing an alloy chestplate into 8 ingots, taking 500 ticks and using 50mB of steam:
|
||||
NBTTagCompound msg0 = new NBTTagCompound();
|
||||
NBTTagCompound ing0 = new NBTTagCompound();
|
||||
new ItemStack(ModItems.alloy_plate).writeToNBT(ing0);
|
||||
@ -30,9 +35,12 @@ package com.hbm.handler.imc;
|
||||
NBTTagCompound out0 = new NBTTagCompound();
|
||||
new ItemStack(ModItems.ingot_advanced_alloy, 8).writeToNBT(out0);
|
||||
msg0.setTag("output", out0);
|
||||
msg0.setInteger("acid", 2);
|
||||
msg0.setInteger("amount", 50);
|
||||
msg0.setInteger("duration", 500);
|
||||
FMLInterModComms.sendMessage("hbm", "crystallizer", msg0);
|
||||
|
||||
Recipe with an ore dict item, acidizing all "plateSteel" into a steel ingot:
|
||||
Recipe with an ore dict item, acidizing all "plateSteel" into a steel ingot, with all optional values omitted:
|
||||
NBTTagCompound msg1 = new NBTTagCompound();
|
||||
msg1.setString("oredict", "plateSteel");
|
||||
NBTTagCompound out1 = new NBTTagCompound();
|
||||
|
||||
@ -1,191 +1,27 @@
|
||||
package com.hbm.handler.nei;
|
||||
|
||||
import java.awt.Rectangle;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.inventory.gui.GUICrystallizer;
|
||||
import com.hbm.inventory.recipes.CrystallizerRecipes;
|
||||
import com.hbm.inventory.recipes.MachineRecipes;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.machine.ItemFluidIcon;
|
||||
import com.hbm.tileentity.machine.TileEntityMachineCrystallizer;
|
||||
|
||||
import codechicken.nei.NEIServerUtils;
|
||||
import codechicken.nei.PositionedStack;
|
||||
import codechicken.nei.recipe.TemplateRecipeHandler;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
public class CrystallizerRecipeHandler extends NEIUniversalHandler {
|
||||
|
||||
public class CrystallizerRecipeHandler extends TemplateRecipeHandler {
|
||||
|
||||
public static ArrayList<Fuel> batteries;
|
||||
|
||||
public class RecipeSet extends TemplateRecipeHandler.CachedRecipe {
|
||||
PositionedStack input;
|
||||
PositionedStack acid;
|
||||
PositionedStack result;
|
||||
|
||||
public RecipeSet(Object input, ItemStack result) {
|
||||
this.input = new PositionedStack(input, 75, 24);
|
||||
this.acid = new PositionedStack(ItemFluidIcon.addQuantity(new ItemStack(ModItems.fluid_icon, 1, Fluids.ACID.getID()), TileEntityMachineCrystallizer.acidRequired), 39, 24);
|
||||
this.result = new PositionedStack(result, 135, 24);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PositionedStack> getIngredients() {
|
||||
return getCycledIngredients(cycleticks / 48, Arrays.asList(input, acid));
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionedStack getOtherStack() {
|
||||
return batteries.get((cycleticks / 48) % batteries.size()).stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionedStack getResult() {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Fuel {
|
||||
public Fuel(ItemStack ingred) {
|
||||
|
||||
this.stack = new PositionedStack(ingred, 3, 42, false);
|
||||
}
|
||||
|
||||
public PositionedStack stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRecipeName() {
|
||||
return "Ore Acidizer";
|
||||
public CrystallizerRecipeHandler() {
|
||||
super("Acidizer", ModBlocks.machine_crystallizer, CrystallizerRecipes.getRecipes());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGuiTexture() {
|
||||
return GUICrystallizer.texture.toString();
|
||||
public String getKey() {
|
||||
return "ntmCrystallizer";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadCraftingRecipes(String outputId, Object... results) {
|
||||
|
||||
if ((outputId.equals("hbm_crystallizer")) && getClass() == CrystallizerRecipeHandler.class) {
|
||||
|
||||
Map<Object, Object> recipes = CrystallizerRecipes.getRecipes();
|
||||
|
||||
for (Map.Entry<Object, Object> recipe : recipes.entrySet()) {
|
||||
|
||||
if(recipe.getKey() instanceof ItemStack && ((ItemStack)recipe.getKey()).getItem() == ModItems.scrap_plastic)
|
||||
continue;
|
||||
|
||||
this.arecipes.add(new RecipeSet(recipe.getKey(), (ItemStack)recipe.getValue()));
|
||||
}
|
||||
|
||||
} else {
|
||||
super.loadCraftingRecipes(outputId, results);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadCraftingRecipes(ItemStack result) {
|
||||
|
||||
Map<Object, Object> recipes = CrystallizerRecipes.getRecipes();
|
||||
|
||||
for (Map.Entry<Object, Object> recipe : recipes.entrySet()) {
|
||||
|
||||
if(NEIServerUtils.areStacksSameTypeCrafting((ItemStack)recipe.getValue(), result)) {
|
||||
|
||||
if(recipe.getKey() instanceof ItemStack && ((ItemStack)recipe.getKey()).getItem() == ModItems.scrap_plastic)
|
||||
continue;
|
||||
|
||||
this.arecipes.add(new RecipeSet(recipe.getKey(), (ItemStack)recipe.getValue()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadUsageRecipes(String inputId, Object... ingredients) {
|
||||
|
||||
if ((inputId.equals("hbm_crystallizer")) && getClass() == CrystallizerRecipeHandler.class) {
|
||||
|
||||
loadCraftingRecipes("hbm_crystallizer", new Object[0]);
|
||||
|
||||
} else {
|
||||
super.loadUsageRecipes(inputId, ingredients);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadUsageRecipes(ItemStack ingredient) {
|
||||
|
||||
if(ingredient.getItem() == ModItems.scrap_plastic)
|
||||
return;
|
||||
|
||||
Map<Object, Object> recipes = CrystallizerRecipes.getRecipes();
|
||||
|
||||
for (Map.Entry<Object, Object> recipe : recipes.entrySet()) {
|
||||
|
||||
if(NEIServerUtils.areStacksSameTypeCrafting(ingredient, ItemFluidIcon.addQuantity(
|
||||
new ItemStack(ModItems.fluid_icon, 1, Fluids.ACID.getID()), TileEntityMachineCrystallizer.acidRequired))) {
|
||||
|
||||
if(recipe.getKey() instanceof ItemStack) {
|
||||
this.arecipes.add(new RecipeSet(recipe.getKey(), (ItemStack)recipe.getValue()));
|
||||
|
||||
} else if (recipe.getKey() instanceof ArrayList) {
|
||||
for(Object o : (ArrayList)recipe.getKey()) {
|
||||
ItemStack stack = (ItemStack)o;
|
||||
this.arecipes.add(new RecipeSet(stack, (ItemStack) recipe.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
} else if(recipe.getKey() instanceof ItemStack) {
|
||||
|
||||
if (NEIServerUtils.areStacksSameTypeCrafting(ingredient, (ItemStack)recipe.getKey()))
|
||||
this.arecipes.add(new RecipeSet(recipe.getKey(), (ItemStack)recipe.getValue()));
|
||||
|
||||
} else if (recipe.getKey() instanceof ArrayList) {
|
||||
|
||||
for(Object o : (ArrayList)recipe.getKey()) {
|
||||
ItemStack stack = (ItemStack)o;
|
||||
|
||||
if (NEIServerUtils.areStacksSameTypeCrafting(ingredient, stack))
|
||||
this.arecipes.add(new RecipeSet(stack, (ItemStack) recipe.getValue()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends GuiContainer> getGuiClass() {
|
||||
return GUICrystallizer.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadTransferRects() {
|
||||
transferRects.add(new RecipeTransferRect(new Rectangle(104 - 5, 34 - 11, 24, 18), "hbm_crystallizer"));
|
||||
super.loadTransferRects();
|
||||
transferRectsGui.add(new RecipeTransferRect(new Rectangle(80 - 5, 47 - 11, 27, 12), "ntmCrystallizer"));
|
||||
guiGui.add(GUICrystallizer.class);
|
||||
RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawExtras(int recipe) {
|
||||
|
||||
drawProgressBar(99, 23, 192, 0, 22, 16, 600, 0);
|
||||
drawProgressBar(3, 6, 176, 0, 16, 34, 60, 7);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TemplateRecipeHandler newInstance() {
|
||||
|
||||
if(batteries == null)
|
||||
batteries = new ArrayList<Fuel>();
|
||||
|
||||
for(ItemStack i : MachineRecipes.instance().getBatteries()) {
|
||||
batteries.add(new Fuel(i));
|
||||
}
|
||||
return super.newInstance();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,8 +2,10 @@ package com.hbm.inventory.container;
|
||||
|
||||
import com.hbm.inventory.SlotMachineOutput;
|
||||
import com.hbm.inventory.SlotUpgrade;
|
||||
import com.hbm.items.machine.IItemFluidIdentifier;
|
||||
import com.hbm.tileentity.machine.TileEntityMachineCrystallizer;
|
||||
|
||||
import api.hbm.energy.IBatteryItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
@ -29,15 +31,17 @@ public class ContainerCrystallizer extends Container {
|
||||
//Upgrades
|
||||
this.addSlotToContainer(new SlotUpgrade(tedf, 5, 80, 18));
|
||||
this.addSlotToContainer(new SlotUpgrade(tedf, 6, 98, 18));
|
||||
//Fluid ID
|
||||
this.addSlotToContainer(new Slot(tedf, 7, 35, 72));
|
||||
|
||||
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, 84 + i * 18));
|
||||
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 122 + i * 18));
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < 9; i++) {
|
||||
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142));
|
||||
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 180));
|
||||
}
|
||||
}
|
||||
|
||||
@ -56,11 +60,20 @@ public class ContainerCrystallizer extends Container {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
|
||||
if(!this.mergeItemStack(var5, 0, 2, false))
|
||||
if(!this.mergeItemStack(var5, 3, 4, false))
|
||||
if(!this.mergeItemStack(var5, 5, 7, false))
|
||||
return null;
|
||||
|
||||
if(var3.getItem() instanceof IBatteryItem) {
|
||||
if(!this.mergeItemStack(var5, 1, 2, false)) {
|
||||
return null;
|
||||
}
|
||||
} else if(var3.getItem() instanceof IItemFluidIdentifier) {
|
||||
if(!this.mergeItemStack(var5, 7, 8, false)) {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
if(!this.mergeItemStack(var5, 0, 1, false)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(var5.stackSize == 0) {
|
||||
|
||||
@ -29,7 +29,7 @@ public class GUICrystallizer extends GuiInfoContainer {
|
||||
public void drawScreen(int mouseX, int mouseY, float f) {
|
||||
super.drawScreen(mouseX, mouseY, f);
|
||||
|
||||
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 34, acidomatic.power, acidomatic.maxPower);
|
||||
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 52, acidomatic.power, acidomatic.maxPower);
|
||||
acidomatic.tank.renderTankInfo(this, mouseX, mouseY, guiLeft + 35, guiTop + 18, 16, 52);
|
||||
|
||||
String[] upgradeText = new String[4];
|
||||
|
||||
20
src/main/java/com/hbm/inventory/gui/GUITurretSentry.java
Normal file
@ -0,0 +1,20 @@
|
||||
package com.hbm.inventory.gui;
|
||||
|
||||
import com.hbm.lib.RefStrings;
|
||||
import com.hbm.tileentity.turret.TileEntityTurretBaseNT;
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class GUITurretSentry extends GUITurretBase {
|
||||
|
||||
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/weapon/gui_turret_sentry.png");
|
||||
|
||||
public GUITurretSentry(InventoryPlayer invPlayer, TileEntityTurretBaseNT tedf) {
|
||||
super(invPlayer, tedf);
|
||||
}
|
||||
|
||||
protected ResourceLocation getTexture() {
|
||||
return texture;
|
||||
}
|
||||
}
|
||||
@ -448,6 +448,6 @@ public class CentrifugeRecipes extends SerializableRecipe {
|
||||
|
||||
@Override
|
||||
public String getComment() {
|
||||
return "Outputs have to be an array of four item stacks. The centrifuge can't handle recipes with a smaller output as of now.";
|
||||
return "Outputs have to be an array of up to four item stacks. Fewer aren't used by default recipes, but should work anyway.";
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,7 +2,6 @@ package com.hbm.inventory.recipes;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import static com.hbm.inventory.OreDictManager.*;
|
||||
@ -10,13 +9,18 @@ import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.handler.imc.IMCCrystallizer;
|
||||
import com.hbm.inventory.FluidStack;
|
||||
import com.hbm.inventory.RecipesCommon.ComparableStack;
|
||||
import com.hbm.inventory.RecipesCommon.OreDictStack;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.machine.ItemFluidIcon;
|
||||
import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre;
|
||||
import com.hbm.items.special.ItemPlasticScrap.ScrapType;
|
||||
import com.hbm.main.MainRegistry;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
@ -25,73 +29,76 @@ import net.minecraftforge.oredict.OreDictionary;
|
||||
public class CrystallizerRecipes {
|
||||
|
||||
//'Object' is either a ComparableStack or the key for the ore dict
|
||||
private static HashMap<Object, ItemStack> recipes = new HashMap();
|
||||
private static HashMap<Object, CrystallizerRecipe> recipes = new HashMap();
|
||||
|
||||
public static void register() {
|
||||
|
||||
recipes.put(COAL.ore(), new ItemStack(ModItems.crystal_coal));
|
||||
recipes.put(IRON.ore(), new ItemStack(ModItems.crystal_iron));
|
||||
recipes.put(GOLD.ore(), new ItemStack(ModItems.crystal_gold));
|
||||
recipes.put(REDSTONE.ore(), new ItemStack(ModItems.crystal_redstone));
|
||||
recipes.put(LAPIS.ore(), new ItemStack(ModItems.crystal_lapis));
|
||||
recipes.put(DIAMOND.ore(), new ItemStack(ModItems.crystal_diamond));
|
||||
recipes.put(U.ore(), new ItemStack(ModItems.crystal_uranium));
|
||||
recipes.put(TH232.ore(), new ItemStack(ModItems.crystal_thorium));
|
||||
recipes.put(PU.ore(), new ItemStack(ModItems.crystal_plutonium));
|
||||
recipes.put(TI.ore(), new ItemStack(ModItems.crystal_titanium));
|
||||
recipes.put(S.ore(), new ItemStack(ModItems.crystal_sulfur));
|
||||
recipes.put(KNO.ore(), new ItemStack(ModItems.crystal_niter));
|
||||
recipes.put(CU.ore(), new ItemStack(ModItems.crystal_copper));
|
||||
recipes.put(W.ore(), new ItemStack(ModItems.crystal_tungsten));
|
||||
recipes.put(AL.ore(), new ItemStack(ModItems.crystal_aluminium));
|
||||
recipes.put(F.ore(), new ItemStack(ModItems.crystal_fluorite));
|
||||
recipes.put(BE.ore(), new ItemStack(ModItems.crystal_beryllium));
|
||||
recipes.put(PB.ore(), new ItemStack(ModItems.crystal_lead));
|
||||
recipes.put(SA326.ore(), new ItemStack(ModItems.crystal_schrabidium));
|
||||
recipes.put(LI.ore(), new ItemStack(ModItems.crystal_lithium));
|
||||
recipes.put(STAR.ore(), new ItemStack(ModItems.crystal_starmetal));
|
||||
recipes.put(CO.ore(), new ItemStack(ModItems.crystal_cobalt));
|
||||
|
||||
recipes.put("oreRareEarth", new ItemStack(ModItems.crystal_rare));
|
||||
recipes.put("oreCinnabar", new ItemStack(ModItems.crystal_cinnebar));
|
||||
|
||||
recipes.put(new ComparableStack(ModBlocks.ore_nether_fire), new ItemStack(ModItems.crystal_phosphorus));
|
||||
recipes.put(new ComparableStack(ModBlocks.ore_tikite), new ItemStack(ModItems.crystal_trixite));
|
||||
recipes.put(new ComparableStack(ModBlocks.gravel_diamond), new ItemStack(ModItems.crystal_diamond));
|
||||
recipes.put(SRN.ingot(), new ItemStack(ModItems.crystal_schraranium));
|
||||
|
||||
recipes.put("sand", new ItemStack(ModItems.ingot_fiberglass));
|
||||
recipes.put(REDSTONE.block(), new ItemStack(ModItems.ingot_mercury));
|
||||
recipes.put(CINNABAR.crystal(), new ItemStack(ModItems.ingot_mercury, 3));
|
||||
recipes.put(BORAX.dust(), new ItemStack(ModItems.powder_boron_tiny, 3));
|
||||
recipes.put(COAL.block(), new ItemStack(ModBlocks.block_graphite));
|
||||
int baseTime = 600;
|
||||
int utilityTime = 100;
|
||||
FluidStack sulfur = new FluidStack(Fluids.SULFURIC_ACID, 500);
|
||||
|
||||
recipes.put(new ComparableStack(Blocks.cobblestone), new ItemStack(ModBlocks.reinforced_stone));
|
||||
recipes.put(new ComparableStack(ModBlocks.gravel_obsidian), new ItemStack(ModBlocks.brick_obsidian));
|
||||
recipes.put(new ComparableStack(Items.rotten_flesh), new ItemStack(Items.leather));
|
||||
recipes.put(new ComparableStack(ModItems.coal_infernal), new ItemStack(ModItems.solid_fuel));
|
||||
recipes.put(new ComparableStack(ModBlocks.stone_gneiss), new ItemStack(ModItems.powder_lithium));
|
||||
registerRecipe(COAL.ore(), new CrystallizerRecipe(ModItems.crystal_coal, baseTime));
|
||||
registerRecipe(IRON.ore(), new CrystallizerRecipe(ModItems.crystal_iron, baseTime));
|
||||
registerRecipe(GOLD.ore(), new CrystallizerRecipe(ModItems.crystal_gold, baseTime));
|
||||
registerRecipe(REDSTONE.ore(), new CrystallizerRecipe(ModItems.crystal_redstone, baseTime));
|
||||
registerRecipe(LAPIS.ore(), new CrystallizerRecipe(ModItems.crystal_lapis, baseTime));
|
||||
registerRecipe(DIAMOND.ore(), new CrystallizerRecipe(ModItems.crystal_diamond, baseTime));
|
||||
registerRecipe(U.ore(), new CrystallizerRecipe(ModItems.crystal_uranium, baseTime, sulfur));
|
||||
registerRecipe(TH232.ore(), new CrystallizerRecipe(ModItems.crystal_thorium, baseTime, sulfur));
|
||||
registerRecipe(PU.ore(), new CrystallizerRecipe(ModItems.crystal_plutonium, baseTime, sulfur));
|
||||
registerRecipe(TI.ore(), new CrystallizerRecipe(ModItems.crystal_titanium, baseTime, sulfur));
|
||||
registerRecipe(S.ore(), new CrystallizerRecipe(ModItems.crystal_sulfur, baseTime));
|
||||
registerRecipe(KNO.ore(), new CrystallizerRecipe(ModItems.crystal_niter, baseTime));
|
||||
registerRecipe(CU.ore(), new CrystallizerRecipe(ModItems.crystal_copper, baseTime));
|
||||
registerRecipe(W.ore(), new CrystallizerRecipe(ModItems.crystal_tungsten, baseTime, sulfur));
|
||||
registerRecipe(AL.ore(), new CrystallizerRecipe(ModItems.crystal_aluminium, baseTime));
|
||||
registerRecipe(F.ore(), new CrystallizerRecipe(ModItems.crystal_fluorite, baseTime));
|
||||
registerRecipe(BE.ore(), new CrystallizerRecipe(ModItems.crystal_beryllium, baseTime));
|
||||
registerRecipe(PB.ore(), new CrystallizerRecipe(ModItems.crystal_lead, baseTime));
|
||||
registerRecipe(SA326.ore(), new CrystallizerRecipe(ModItems.crystal_schrabidium, baseTime, sulfur));
|
||||
registerRecipe(LI.ore(), new CrystallizerRecipe(ModItems.crystal_lithium, baseTime, sulfur));
|
||||
registerRecipe(STAR.ore(), new CrystallizerRecipe(ModItems.crystal_starmetal, baseTime, sulfur));
|
||||
registerRecipe(CO.ore(), new CrystallizerRecipe(ModItems.crystal_cobalt, baseTime, sulfur));
|
||||
|
||||
recipes.put(DIAMOND.dust(), new ItemStack(Items.diamond));
|
||||
recipes.put(EMERALD.dust(), new ItemStack(Items.emerald));
|
||||
recipes.put(LAPIS.dust(), new ItemStack(Items.dye, 1, 4));
|
||||
recipes.put(new ComparableStack(ModItems.powder_semtex_mix), new ItemStack(ModItems.ingot_semtex));
|
||||
recipes.put(new ComparableStack(ModItems.powder_desh_ready), new ItemStack(ModItems.ingot_desh));
|
||||
recipes.put(new ComparableStack(ModItems.powder_meteorite), new ItemStack(ModItems.fragment_meteorite, 1));
|
||||
registerRecipe("oreRareEarth", new CrystallizerRecipe(ModItems.crystal_rare, baseTime, sulfur));
|
||||
registerRecipe("oreCinnabar", new CrystallizerRecipe(ModItems.crystal_cinnebar, baseTime));
|
||||
|
||||
recipes.put(new ComparableStack(ModItems.meteorite_sword_treated), new ItemStack(ModItems.meteorite_sword_etched, 1));
|
||||
registerRecipe(new ComparableStack(ModBlocks.ore_nether_fire), new CrystallizerRecipe(ModItems.crystal_phosphorus, baseTime));
|
||||
registerRecipe(new ComparableStack(ModBlocks.ore_tikite), new CrystallizerRecipe(ModItems.crystal_trixite, baseTime, sulfur));
|
||||
registerRecipe(new ComparableStack(ModBlocks.gravel_diamond), new CrystallizerRecipe(ModItems.crystal_diamond, baseTime));
|
||||
registerRecipe(SRN.ingot(), new CrystallizerRecipe(ModItems.crystal_schraranium, baseTime));
|
||||
|
||||
recipes.put(new ComparableStack(ModItems.powder_impure_osmiridium), new ItemStack(ModItems.crystal_osmiridium));
|
||||
registerRecipe("sand", new CrystallizerRecipe(ModItems.ingot_fiberglass, utilityTime));
|
||||
registerRecipe(REDSTONE.block(), new CrystallizerRecipe(ModItems.ingot_mercury, baseTime));
|
||||
registerRecipe(CINNABAR.crystal(), new CrystallizerRecipe(new ItemStack(ModItems.ingot_mercury, 3), baseTime));
|
||||
registerRecipe(BORAX.dust(), new CrystallizerRecipe(new ItemStack(ModItems.powder_boron_tiny, 3), baseTime, sulfur));
|
||||
registerRecipe(COAL.block(), new CrystallizerRecipe(ModBlocks.block_graphite, baseTime));
|
||||
|
||||
registerRecipe(new ComparableStack(Blocks.cobblestone), new CrystallizerRecipe(ModBlocks.reinforced_stone, utilityTime));
|
||||
registerRecipe(new ComparableStack(ModBlocks.gravel_obsidian), new CrystallizerRecipe(ModBlocks.brick_obsidian, utilityTime));
|
||||
registerRecipe(new ComparableStack(Items.rotten_flesh), new CrystallizerRecipe(Items.leather, utilityTime));
|
||||
registerRecipe(new ComparableStack(ModItems.coal_infernal), new CrystallizerRecipe(ModItems.solid_fuel, utilityTime));
|
||||
registerRecipe(new ComparableStack(ModBlocks.stone_gneiss), new CrystallizerRecipe(ModItems.powder_lithium, utilityTime));
|
||||
|
||||
registerRecipe(DIAMOND.dust(), new CrystallizerRecipe(Items.diamond, utilityTime));
|
||||
registerRecipe(EMERALD.dust(), new CrystallizerRecipe(Items.emerald, utilityTime));
|
||||
registerRecipe(LAPIS.dust(), new CrystallizerRecipe(new ItemStack(Items.dye, 1, 4), utilityTime));
|
||||
registerRecipe(new ComparableStack(ModItems.powder_semtex_mix), new CrystallizerRecipe(ModItems.ingot_semtex, baseTime));
|
||||
registerRecipe(new ComparableStack(ModItems.powder_desh_ready), new CrystallizerRecipe(ModItems.ingot_desh, baseTime));
|
||||
registerRecipe(new ComparableStack(ModItems.powder_meteorite), new CrystallizerRecipe(ModItems.fragment_meteorite, utilityTime));
|
||||
|
||||
registerRecipe(new ComparableStack(ModItems.meteorite_sword_treated), new CrystallizerRecipe(ModItems.meteorite_sword_etched, baseTime));
|
||||
registerRecipe(new ComparableStack(ModItems.powder_impure_osmiridium), new CrystallizerRecipe(ModItems.crystal_osmiridium, baseTime, new FluidStack(Fluids.SCHRABIDIC, 1_000)));
|
||||
|
||||
for(int i = 0; i < ScrapType.values().length; i++) {
|
||||
recipes.put(new ComparableStack(ModItems.scrap_plastic, 1, i), new ItemStack(ModItems.circuit_star_piece, 1, i));
|
||||
registerRecipe(new ComparableStack(ModItems.scrap_plastic, 1, i), new CrystallizerRecipe(new ItemStack(ModItems.circuit_star_piece, 1, i), baseTime));
|
||||
}
|
||||
|
||||
for(EnumBedrockOre ore : EnumBedrockOre.values()) {
|
||||
int i = ore.ordinal();
|
||||
|
||||
recipes.put(new ComparableStack(ModItems.ore_centrifuged, 1, i), new ItemStack(ModItems.ore_cleaned, 1, i));
|
||||
recipes.put(new ComparableStack(ModItems.ore_separated, 1, i), new ItemStack(ModItems.ore_purified, 1, i));
|
||||
registerRecipe(new ComparableStack(ModItems.ore_centrifuged, 1, i), new CrystallizerRecipe(new ItemStack(ModItems.ore_cleaned, 1, i), baseTime, sulfur));
|
||||
registerRecipe(new ComparableStack(ModItems.ore_separated, 1, i), new CrystallizerRecipe(new ItemStack(ModItems.ore_purified, 1, i), baseTime));
|
||||
}
|
||||
|
||||
List<ItemStack> quartz = OreDictionary.getOres("crystalCertusQuartz");
|
||||
@ -99,7 +106,7 @@ public class CrystallizerRecipes {
|
||||
if(quartz != null && !quartz.isEmpty()) {
|
||||
ItemStack qItem = quartz.get(0).copy();
|
||||
qItem.stackSize = 12;
|
||||
recipes.put("oreCertusQuartz", qItem);
|
||||
registerRecipe("oreCertusQuartz", new CrystallizerRecipe(qItem, baseTime));
|
||||
}
|
||||
|
||||
if(!IMCCrystallizer.buffer.isEmpty()) {
|
||||
@ -109,7 +116,7 @@ public class CrystallizerRecipes {
|
||||
}
|
||||
}
|
||||
|
||||
public static ItemStack getOutput(ItemStack stack) {
|
||||
public static CrystallizerRecipe getOutput(ItemStack stack) {
|
||||
|
||||
if(stack == null || stack.getItem() == null)
|
||||
return null;
|
||||
@ -117,30 +124,34 @@ public class CrystallizerRecipes {
|
||||
ComparableStack comp = new ComparableStack(stack.getItem(), 1, stack.getItemDamage());
|
||||
|
||||
if(recipes.containsKey(comp))
|
||||
return recipes.get(comp).copy();
|
||||
return recipes.get(comp);
|
||||
|
||||
String[] dictKeys = comp.getDictKeys();
|
||||
|
||||
for(String key : dictKeys) {
|
||||
|
||||
if(recipes.containsKey(key))
|
||||
return recipes.get(key).copy();
|
||||
return recipes.get(key);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Map<Object, Object> getRecipes() {
|
||||
public static HashMap getRecipes() {
|
||||
|
||||
Map<Object, Object> recipes = new HashMap<Object, Object>();
|
||||
HashMap<Object, Object> recipes = new HashMap<Object, Object>();
|
||||
|
||||
for(Entry<Object, ItemStack> entry : CrystallizerRecipes.recipes.entrySet()) {
|
||||
for(Entry<Object, CrystallizerRecipe> entry : CrystallizerRecipes.recipes.entrySet()) {
|
||||
|
||||
CrystallizerRecipe recipe = entry.getValue();
|
||||
|
||||
if(entry.getKey() instanceof String) {
|
||||
List<ItemStack> ingredients = OreDictionary.getOres((String)entry.getKey());
|
||||
recipes.put(ingredients, entry.getValue());
|
||||
OreDictStack stack = new OreDictStack((String) entry.getKey());
|
||||
recipes.put(new Object[] {ItemFluidIcon.make(recipe.acid), stack}, recipe.output);
|
||||
} else {
|
||||
recipes.put(((ComparableStack)entry.getKey()).toStack(), entry.getValue());
|
||||
ComparableStack stack = (ComparableStack) entry.getKey();
|
||||
if(stack.item == ModItems.scrap_plastic) continue;
|
||||
recipes.put(new Object[] {ItemFluidIcon.make(recipe.acid), stack}, recipe.output);
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,19 +159,20 @@ public class CrystallizerRecipes {
|
||||
}
|
||||
|
||||
// NYI
|
||||
public void registerRecipe(Object input, CrystallizerRecipe recipe) {
|
||||
//recipes.put(input, recipe);
|
||||
public static void registerRecipe(Object input, CrystallizerRecipe recipe) {
|
||||
recipes.put(input, recipe);
|
||||
}
|
||||
|
||||
// NYI
|
||||
public static class CrystallizerRecipe {
|
||||
public FluidStack acid;
|
||||
public int duration;
|
||||
public ItemStack output;
|
||||
|
||||
public CrystallizerRecipe(ItemStack output, int duration) {
|
||||
this(output, duration, null);
|
||||
}
|
||||
public CrystallizerRecipe(Block output, int duration) { this(new ItemStack(output), duration, new FluidStack(Fluids.ACID, 500)); }
|
||||
public CrystallizerRecipe(Item output, int duration) { this(new ItemStack(output), duration, new FluidStack(Fluids.ACID, 500)); }
|
||||
public CrystallizerRecipe(ItemStack output, int duration) { this(output, duration, new FluidStack(Fluids.ACID, 500)); }
|
||||
public CrystallizerRecipe(Block output, int duration, FluidStack acid) { this(new ItemStack(output), duration, acid); }
|
||||
public CrystallizerRecipe(Item output, int duration, FluidStack acid) { this(new ItemStack(output), duration, acid); }
|
||||
|
||||
public CrystallizerRecipe(ItemStack output, int duration, FluidStack acid) {
|
||||
this.output = output;
|
||||
|
||||
@ -60,6 +60,9 @@ public abstract class SerializableRecipe {
|
||||
}
|
||||
}
|
||||
|
||||
File info = new File(recDir.getAbsolutePath() + File.separatorChar + "REMOVE UNDERSCORE TO ENABLE RECIPE LOADING - RECIPES WILL RESET TO DEFAULT OTHERWISE");
|
||||
try { info.createNewFile(); } catch(IOException e) { }
|
||||
|
||||
MainRegistry.logger.info("Starting recipe init!");
|
||||
|
||||
for(SerializableRecipe recipe : recipeHandlers) {
|
||||
|
||||
@ -4,6 +4,7 @@ import java.util.List;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.blocks.generic.BlockBedrockOreTE.TileEntityBedrockOre;
|
||||
import com.hbm.config.WorldConfig;
|
||||
import com.hbm.entity.effect.EntityNukeTorex;
|
||||
import com.hbm.entity.logic.EntityNukeExplosionMK5;
|
||||
import com.hbm.entity.logic.EntityTomBlast;
|
||||
@ -14,9 +15,11 @@ import com.hbm.items.ModItems;
|
||||
import com.hbm.items.special.ItemBookLore;
|
||||
import com.hbm.items.special.ItemBookLore.BookLoreType;
|
||||
import com.hbm.items.special.ItemKitCustom;
|
||||
import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.saveddata.TomSaveData;
|
||||
import com.hbm.world.feature.OilSpot;
|
||||
import com.hbm.world.generator.DungeonToolbox;
|
||||
|
||||
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
@ -47,11 +50,11 @@ public class ItemWandD extends Item {
|
||||
|
||||
if(pos != null) {
|
||||
|
||||
/*TomSaveData data = TomSaveData.forWorld(world);
|
||||
TomSaveData data = TomSaveData.forWorld(world);
|
||||
data.impact = false;
|
||||
data.fire = 0F;
|
||||
data.dust = 0F;
|
||||
data.markDirty();*/
|
||||
data.markDirty();
|
||||
|
||||
/*EntityTomBlast tom = new EntityTomBlast(world);
|
||||
tom.posX = pos.blockX;
|
||||
@ -87,23 +90,7 @@ public class ItemWandD extends Item {
|
||||
entry.blocksDistanceThreshold = 1000;
|
||||
world.spawnEntityInWorld(EntityNukeExplosionMK5.statFacNoRad(world, 150, pos.blockX, pos.blockY + 1, pos.blockZ));*/
|
||||
|
||||
int x = pos.blockX;
|
||||
int z = pos.blockZ;
|
||||
int type = world.rand.nextInt(10);
|
||||
|
||||
for(int i = 0; i < 1; i++) {
|
||||
int ix = (int) Math.floor(x + world.rand.nextGaussian() * 0);
|
||||
int iz = (int) Math.floor(z + world.rand.nextGaussian() * 0);
|
||||
|
||||
world.setBlock(ix, 0, iz, ModBlocks.ore_bedrock);
|
||||
TileEntityBedrockOre ore = (TileEntityBedrockOre) world.getTileEntity(ix, 0, iz);
|
||||
ore.resource = new ItemStack(ModBlocks.stone_resource, 1, 2);
|
||||
ore.color = 0xCF6722;
|
||||
ore.shape = type;
|
||||
ore.acidRequirement = new FluidStack(Fluids.SULFURIC_ACID, 1000);
|
||||
world.markBlockForUpdate(ix, 0, iz);
|
||||
world.markTileEntityChunkModified(ix, 0, iz, ore);
|
||||
}
|
||||
//DungeonToolbox.generateBedrockOreWithChance(world, world.rand, pos.blockX, pos.blockZ, EnumBedrockOre.TITANIUM, new FluidStack(Fluids.SULFURIC_ACID, 500), 2, 1);
|
||||
|
||||
/*EntitySiegeTunneler tunneler = new EntitySiegeTunneler(world);
|
||||
tunneler.setPosition(pos.blockX, pos.blockY + 1, pos.blockZ);
|
||||
|
||||
@ -640,9 +640,12 @@ public class Library {
|
||||
}
|
||||
|
||||
public static boolean isObstructed(World world, double x, double y, double z, double a, double b, double c) {
|
||||
|
||||
MovingObjectPosition pos = world.rayTraceBlocks(Vec3.createVectorHelper(x, y, z), Vec3.createVectorHelper(a, b, c));
|
||||
|
||||
return pos != null;
|
||||
}
|
||||
|
||||
public static boolean isObstructedOpaque(World world, double x, double y, double z, double a, double b, double c) {
|
||||
MovingObjectPosition pos = world.func_147447_a(Vec3.createVectorHelper(x, y, z), Vec3.createVectorHelper(a, b, c), false, true, false);
|
||||
return pos != null;
|
||||
}
|
||||
|
||||
|
||||
@ -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 (4476)";
|
||||
public static final String VERSION = "1.0.27 BETA (4480)";
|
||||
//HBM's Beta Naming Convention:
|
||||
//V T (X)
|
||||
//V -> next release version
|
||||
|
||||
@ -192,6 +192,7 @@ public class ClientProxy extends ServerProxy {
|
||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTurretBrandon.class, new RenderTurretBrandon());
|
||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTurretArty.class, new RenderTurretArty());
|
||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTurretHIMARS.class, new RenderTurretHIMARS());
|
||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTurretSentry.class, new RenderTurretSentry());
|
||||
//mines
|
||||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLandmine.class, new RenderLandmine());
|
||||
//machines
|
||||
|
||||
@ -54,6 +54,7 @@ public class ResourceManager {
|
||||
public static final IModelCustom turret_brandon = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_brandon.obj"));
|
||||
public static final IModelCustom turret_arty = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_arty.obj")).asDisplayList(); // test!
|
||||
public static final IModelCustom turret_himars = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_himars.obj")).asDisplayList();
|
||||
public static final IModelCustom turret_sentry = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_sentry.obj"));
|
||||
|
||||
public static final IModelCustom turret_howard_damaged = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_howard_damaged.obj"));
|
||||
|
||||
@ -378,6 +379,7 @@ public class ResourceManager {
|
||||
public static final ResourceLocation turret_brandon_tex = new ResourceLocation(RefStrings.MODID, "textures/models/turrets/brandon.png");
|
||||
public static final ResourceLocation turret_arty_tex = new ResourceLocation(RefStrings.MODID, "textures/models/turrets/arty.png");
|
||||
public static final ResourceLocation turret_himars_tex = new ResourceLocation(RefStrings.MODID, "textures/models/turrets/himars.png");
|
||||
public static final ResourceLocation turret_sentry_tex = new ResourceLocation(RefStrings.MODID, "textures/models/turrets/sentry.png");
|
||||
|
||||
public static final ResourceLocation himars_standard_tex = new ResourceLocation(RefStrings.MODID, "textures/models/projectiles/himars_standard.png");
|
||||
public static final ResourceLocation himars_single_tex = new ResourceLocation(RefStrings.MODID, "textures/models/projectiles/himars_single.png");
|
||||
|
||||
@ -81,7 +81,7 @@ public class RenderCore extends TileEntitySpecialRenderer {
|
||||
public void renderOrb(TileEntityCore tile, double x, double y, double z) {
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
|
||||
//GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
|
||||
|
||||
int color = tile.color;
|
||||
|
||||
|
||||
@ -0,0 +1,84 @@
|
||||
package com.hbm.render.tileentity;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.main.ResourceManager;
|
||||
import com.hbm.render.item.ItemRenderBase;
|
||||
import com.hbm.tileentity.turret.TileEntityTurretSentry;
|
||||
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraftforge.client.IItemRenderer;
|
||||
|
||||
public class RenderTurretSentry extends TileEntitySpecialRenderer implements IItemRendererProvider {
|
||||
|
||||
@Override
|
||||
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) {
|
||||
|
||||
TileEntityTurretSentry turret = (TileEntityTurretSentry)te;
|
||||
Vec3 pos = turret.getHorizontalOffset();
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(x + pos.xCoord, y, z + pos.zCoord);
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
|
||||
bindTexture(ResourceManager.turret_sentry_tex);
|
||||
ResourceManager.turret_sentry.renderPart("Base");
|
||||
|
||||
double yaw = -Math.toDegrees(turret.lastRotationYaw + (turret.rotationYaw - turret.lastRotationYaw) * interp);
|
||||
double pitch = Math.toDegrees(turret.lastRotationPitch + (turret.rotationPitch - turret.lastRotationPitch) * interp);
|
||||
|
||||
GL11.glRotated(yaw, 0, 1, 0);
|
||||
ResourceManager.turret_sentry.renderPart("Pivot");
|
||||
|
||||
GL11.glTranslated(0, 1.25, 0);
|
||||
GL11.glRotated(-pitch, 1, 0, 0);
|
||||
GL11.glTranslated(0, -1.25, 0);
|
||||
ResourceManager.turret_sentry.renderPart("Body");
|
||||
ResourceManager.turret_sentry.renderPart("Drum");
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(0, 0, (turret.lastBarrelLeftPos + (turret.barrelLeftPos - turret.lastBarrelLeftPos) * interp) * -0.5);
|
||||
ResourceManager.turret_sentry.renderPart("BarrelL");
|
||||
GL11.glPopMatrix();
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslated(0, 0, (turret.lastBarrelRightPos + (turret.barrelRightPos - turret.lastBarrelRightPos) * interp) * -0.5);
|
||||
ResourceManager.turret_sentry.renderPart("BarrelR");
|
||||
GL11.glPopMatrix();
|
||||
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItemForRenderer() {
|
||||
return Item.getItemFromBlock(ModBlocks.turret_sentry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemRenderer getRenderer() {
|
||||
return new ItemRenderBase() {
|
||||
public void renderInventory() {
|
||||
GL11.glTranslated(0, -4, 0);
|
||||
GL11.glScaled(7, 7, 7);
|
||||
}
|
||||
public void renderCommon() {
|
||||
GL11.glRotated(90, 0, 1, 0);
|
||||
bindTexture(ResourceManager.turret_sentry_tex);
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
ResourceManager.turret_sentry.renderPart("Base");
|
||||
ResourceManager.turret_sentry.renderPart("Pivot");
|
||||
ResourceManager.turret_sentry.renderPart("Body");
|
||||
ResourceManager.turret_sentry.renderPart("Drum");
|
||||
ResourceManager.turret_sentry.renderPart("BarrelL");
|
||||
ResourceManager.turret_sentry.renderPart("BarrelR");
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
}};
|
||||
}
|
||||
}
|
||||
@ -240,6 +240,7 @@ public class TileMappings {
|
||||
put(TileEntityTurretBrandon.class, "tileentity_turret_brandon");
|
||||
put(TileEntityTurretArty.class, "tileentity_turret_arty");
|
||||
put(TileEntityTurretHIMARS.class, "tileentity_turret_himars");
|
||||
put(TileEntityTurretSentry.class, "tileentity_turret_sentry");
|
||||
}
|
||||
|
||||
private static void putMachines() {
|
||||
|
||||
@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.saveddata.TomSaveData;
|
||||
import com.hbm.tileentity.INBTPacketReceiver;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
|
||||
@ -53,7 +54,7 @@ public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidA
|
||||
|
||||
int light = this.worldObj.getSavedLightValue(EnumSkyBlock.Sky, this.xCoord, this.yCoord, this.zCoord);
|
||||
|
||||
if(MainRegistry.proxy.getImpactFire(worldObj) > 0 && light > 7) { // Make both steam and water evaporate during firestorms...
|
||||
if(TomSaveData.forWorld(worldObj).fire > 1e-5 && light > 7) { // Make both steam and water evaporate during firestorms...
|
||||
tanks[1].setFill(tanks[1].getFill() - convert);
|
||||
} else {
|
||||
tanks[1].setFill(tanks[1].getFill() + convert);
|
||||
|
||||
@ -21,6 +21,7 @@ import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingStep;
|
||||
import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingType;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.saveddata.TomSaveData;
|
||||
import com.hbm.tileentity.IConfigurableMachine;
|
||||
import com.hbm.tileentity.INBTPacketReceiver;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
@ -69,8 +70,8 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IFluid
|
||||
int lastHeat = this.heat;
|
||||
|
||||
int light = this.worldObj.getSavedLightValue(EnumSkyBlock.Sky, this.xCoord, this.yCoord, this.zCoord);
|
||||
if(light > 7 && MainRegistry.proxy.getImpactFire(worldObj) > 0) {
|
||||
this.heat += ((maxHeat - heat) * 0.5D); //constantly heat up 50% of the remaining heat buffer for rampant but diminishing heating
|
||||
if(light > 7 && TomSaveData.forWorld(worldObj).fire > 1e-5) {
|
||||
this.heat += ((maxHeat - heat) * 0.000005D); //constantly heat up 0.0005% of the remaining heat buffer for rampant but diminishing heating
|
||||
}
|
||||
|
||||
data.setInteger("heat", lastHeat);
|
||||
|
||||
@ -90,7 +90,7 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement
|
||||
return false;
|
||||
}
|
||||
|
||||
for(int i = 0; i < 4; i++) {
|
||||
for(int i = 0; i < Math.min(4, out.length); i++) {
|
||||
|
||||
//either the slot is null, the output is null or the output can be added to the existing slot
|
||||
if(slots[i + 2] == null)
|
||||
@ -111,7 +111,7 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement
|
||||
private void processItem() {
|
||||
ItemStack[] out = CentrifugeRecipes.getOutput(slots[0]);
|
||||
|
||||
for(int i = 0; i < 4; i++) {
|
||||
for(int i = 0; i < Math.min(4, out.length); i++) {
|
||||
|
||||
if(out[i] == null)
|
||||
continue;
|
||||
|
||||
@ -6,6 +6,7 @@ import com.hbm.inventory.fluid.FluidType;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.inventory.recipes.CrystallizerRecipes;
|
||||
import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.machine.ItemMachineUpgrade;
|
||||
import com.hbm.lib.Library;
|
||||
@ -28,7 +29,6 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme
|
||||
public long power;
|
||||
public static final long maxPower = 1000000;
|
||||
public static final int demand = 1000;
|
||||
public static final int acidRequired = 500;
|
||||
public short progress;
|
||||
public short duration = 600;
|
||||
|
||||
@ -38,8 +38,8 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme
|
||||
public FluidTank tank;
|
||||
|
||||
public TileEntityMachineCrystallizer() {
|
||||
super(7);
|
||||
tank = new FluidTank(Fluids.ACID, 8000, 0);
|
||||
super(8);
|
||||
tank = new FluidTank(Fluids.ACID, 8000);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -55,6 +55,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme
|
||||
this.updateConnections();
|
||||
|
||||
power = Library.chargeTEFromItems(slots, 1, power, maxPower);
|
||||
tank.setType(7, slots);
|
||||
tank.loadTank(3, 4, slots);
|
||||
|
||||
for(int i = 0; i < getCycleCount(); i++) {
|
||||
@ -66,7 +67,6 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme
|
||||
|
||||
if(progress > getDuration()) {
|
||||
progress = 0;
|
||||
tank.setFill(tank.getFill() - getRequiredAcid());
|
||||
processItem();
|
||||
|
||||
this.markDirty();
|
||||
@ -77,12 +77,11 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme
|
||||
}
|
||||
}
|
||||
|
||||
tank.updateTank(xCoord, yCoord, zCoord, this.worldObj.provider.dimensionId);
|
||||
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setShort("progress", progress);
|
||||
data.setShort("duration", getDuration());
|
||||
data.setLong("power", power);
|
||||
tank.writeToNBT(data, "t");
|
||||
this.networkPack(data, 25);
|
||||
} else {
|
||||
|
||||
@ -135,19 +134,24 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme
|
||||
this.power = data.getLong("power");
|
||||
this.progress = data.getShort("progress");
|
||||
this.duration = data.getShort("duration");
|
||||
this.tank.readFromNBT(data, "t");
|
||||
}
|
||||
|
||||
private void processItem() {
|
||||
|
||||
ItemStack result = CrystallizerRecipes.getOutput(slots[0]);
|
||||
CrystallizerRecipe result = CrystallizerRecipes.getOutput(slots[0]);
|
||||
|
||||
if(result == null) //never happens but you can't be sure enough
|
||||
return;
|
||||
|
||||
ItemStack stack = result.output.copy();
|
||||
|
||||
if(slots[2] == null)
|
||||
slots[2] = result;
|
||||
else if(slots[2].stackSize + result.stackSize <= slots[2].getMaxStackSize())
|
||||
slots[2].stackSize += result.stackSize;
|
||||
slots[2] = stack;
|
||||
else if(slots[2].stackSize + stack.stackSize <= slots[2].getMaxStackSize())
|
||||
slots[2].stackSize += stack.stackSize;
|
||||
|
||||
tank.setFill(tank.getFill() - result.acid.fill);
|
||||
|
||||
float freeChance = this.getFreeChance();
|
||||
|
||||
@ -164,41 +168,41 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme
|
||||
if(power < getPowerRequired())
|
||||
return false;
|
||||
|
||||
if(tank.getFill() < getRequiredAcid())
|
||||
return false;
|
||||
|
||||
ItemStack result = CrystallizerRecipes.getOutput(slots[0]);
|
||||
CrystallizerRecipe result = CrystallizerRecipes.getOutput(slots[0]);
|
||||
|
||||
//Or output?
|
||||
if(result == null)
|
||||
return false;
|
||||
|
||||
if(tank.getTankType() != result.acid.type) return false;
|
||||
if(tank.getFill() < result.acid.fill) return false;
|
||||
|
||||
ItemStack stack = result.output.copy();
|
||||
|
||||
//Does the output not match?
|
||||
if(slots[2] != null && (slots[2].getItem() != result.getItem() || slots[2].getItemDamage() != result.getItemDamage()))
|
||||
if(slots[2] != null && (slots[2].getItem() != stack.getItem() || slots[2].getItemDamage() != stack.getItemDamage()))
|
||||
return false;
|
||||
|
||||
//Or is the output slot already full?
|
||||
if(slots[2] != null && slots[2].stackSize + result.stackSize > slots[2].getMaxStackSize())
|
||||
if(slots[2] != null && slots[2].stackSize + stack.stackSize > slots[2].getMaxStackSize())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public int getRequiredAcid() {
|
||||
|
||||
int extra = 0;
|
||||
public int getRequiredAcid(int base) {
|
||||
|
||||
for(int i = 5; i <= 6; i++) {
|
||||
|
||||
if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_effect_1)
|
||||
extra += 1000;
|
||||
base *= 3;
|
||||
if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_effect_2)
|
||||
extra += 2000;
|
||||
base *= 4;
|
||||
if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_effect_3)
|
||||
extra += 3000;
|
||||
base *= 5;
|
||||
}
|
||||
|
||||
return acidRequired + Math.min(extra, 3000);
|
||||
return base;
|
||||
}
|
||||
|
||||
public float getFreeChance() {
|
||||
@ -221,6 +225,9 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme
|
||||
public short getDuration() {
|
||||
|
||||
float durationMod = 1;
|
||||
CrystallizerRecipe result = CrystallizerRecipes.getOutput(slots[0]);
|
||||
|
||||
int base = result != null ? result.duration : 600;
|
||||
|
||||
for(int i = 5; i <= 6; i++) {
|
||||
|
||||
@ -232,7 +239,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme
|
||||
durationMod -= 0.75F;
|
||||
}
|
||||
|
||||
return (short) (600 * Math.max(durationMod, 0.25F));
|
||||
return (short) Math.ceil((base * Math.max(durationMod, 0.25F)));
|
||||
}
|
||||
|
||||
public int getPowerRequired() {
|
||||
@ -277,21 +284,14 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme
|
||||
return (progress * i) / duration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFillForSync(int fill, int index) {
|
||||
tank.setFill(fill);
|
||||
}
|
||||
@Override public void setFillForSync(int fill, int index) { }
|
||||
@Override public void setTypeForSync(FluidType type, int index) { }
|
||||
|
||||
@Override
|
||||
public void setFluidFill(int fill, FluidType type) {
|
||||
tank.setFill(fill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTypeForSync(FluidType type, int index) {
|
||||
tank.setTankType(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFluidFill(FluidType type) {
|
||||
return tank.getFill();
|
||||
@ -336,8 +336,10 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int i, ItemStack itemStack) {
|
||||
|
||||
if(i == 0 && CrystallizerRecipes.getOutput(itemStack) != null)
|
||||
return true;
|
||||
CrystallizerRecipe recipe = CrystallizerRecipes.getOutput(itemStack);
|
||||
if(i == 0 && recipe != null) {
|
||||
return recipe.acid.type == tank.getTankType();
|
||||
}
|
||||
|
||||
if(i == 1 && itemStack.getItem() instanceof IBatteryItem)
|
||||
return true;
|
||||
|
||||
@ -14,6 +14,7 @@ import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.inventory.recipes.CentrifugeRecipes;
|
||||
import com.hbm.inventory.recipes.CrystallizerRecipes;
|
||||
import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe;
|
||||
import com.hbm.inventory.recipes.ShredderRecipes;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.items.machine.ItemMachineUpgrade;
|
||||
@ -253,9 +254,9 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen
|
||||
if(stack != null && stack.getItem() != null) {
|
||||
if(hasCrystallizer()) {
|
||||
|
||||
ItemStack result = CrystallizerRecipes.getOutput(stack);
|
||||
if(result != null && result.getItem() != ModItems.scrap) {
|
||||
worldObj.spawnEntityInWorld(new EntityItem(worldObj, targetX + 0.5, targetY + 0.5, targetZ + 0.5, result.copy()));
|
||||
CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack);
|
||||
if(result != null && result.output.getItem() != ModItems.scrap) {
|
||||
worldObj.spawnEntityInWorld(new EntityItem(worldObj, targetX + 0.5, targetY + 0.5, targetZ + 0.5, result.output.copy()));
|
||||
normal = false;
|
||||
}
|
||||
|
||||
|
||||
@ -59,6 +59,7 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements INB
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
this.power = Library.chargeTEFromItems(slots, 0, power, maxPower);
|
||||
tanks[2].setType(2, slots);
|
||||
|
||||
UpgradeManager.eval(slots, 3, 4);
|
||||
|
||||
@ -18,6 +18,7 @@ import com.hbm.main.MainRegistry;
|
||||
import com.hbm.packet.AuxParticlePacketNT;
|
||||
import com.hbm.packet.NBTPacket;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.saveddata.TomSaveData;
|
||||
import com.hbm.tileentity.INBTPacketReceiver;
|
||||
import com.hbm.tileentity.IOverpressurable;
|
||||
import com.hbm.tileentity.TileEntityLoadedBase;
|
||||
@ -227,8 +228,8 @@ public abstract class TileEntityRBMKBase extends TileEntityLoadedBase implements
|
||||
}
|
||||
|
||||
protected void coolPassively() {
|
||||
|
||||
if(MainRegistry.proxy.getImpactFire(worldObj) > 1e-5) {
|
||||
|
||||
if(TomSaveData.forWorld(worldObj).fire > 1e-5) {
|
||||
double light = this.worldObj.getSavedLightValue(EnumSkyBlock.Sky, this.xCoord, this.yCoord, this.zCoord) / 15D;
|
||||
if(heat < 20 + (480 * light)) {
|
||||
this.heat += this.passiveCooling() * 2;
|
||||
|
||||
@ -14,7 +14,7 @@ import com.hbm.inventory.fluid.trait.FT_Corrosive;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.inventory.fluid.tank.FluidTank;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.saveddata.TomSaveData;
|
||||
import com.hbm.tileentity.IPersistentNBT;
|
||||
import com.hbm.tileentity.TileEntityMachineBase;
|
||||
import com.hbm.util.fauxpointtwelve.DirPos;
|
||||
@ -208,7 +208,7 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc
|
||||
}
|
||||
|
||||
//For when Tom's firestorm hits a barrel full of water
|
||||
if(tank.getTankType() == Fluids.WATER && MainRegistry.proxy.getImpactFire(worldObj) > 0) {
|
||||
if(tank.getTankType() == Fluids.WATER && TomSaveData.forWorld(worldObj).fire > 1e-5) {
|
||||
int light = this.worldObj.getSavedLightValue(EnumSkyBlock.Sky, this.xCoord, this.yCoord, this.zCoord);
|
||||
|
||||
if(light > 7) {
|
||||
|
||||
@ -551,7 +551,7 @@ public abstract class TileEntityTurretBaseNT extends TileEntityMachineBase imple
|
||||
if(pitchDeg < -this.getTurretDepression() || pitchDeg > this.getTurretElevation())
|
||||
return false;
|
||||
|
||||
return !Library.isObstructed(worldObj, ent.xCoord, ent.yCoord, ent.zCoord, pos.xCoord, pos.yCoord, pos.zCoord);
|
||||
return !Library.isObstructedOpaque(worldObj, ent.xCoord, ent.yCoord, ent.zCoord, pos.xCoord, pos.yCoord, pos.zCoord);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -0,0 +1,237 @@
|
||||
package com.hbm.tileentity.turret;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.handler.BulletConfigSyncingUtil;
|
||||
import com.hbm.handler.BulletConfiguration;
|
||||
import com.hbm.inventory.container.ContainerTurretBase;
|
||||
import com.hbm.inventory.gui.GUITurretSentry;
|
||||
import com.hbm.packet.AuxParticlePacketNT;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
import com.hbm.tileentity.IGUIProvider;
|
||||
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileEntityTurretSentry extends TileEntityTurretBaseNT implements IGUIProvider {
|
||||
|
||||
private boolean didJustShootLeft = false;
|
||||
private boolean retractingLeft = false;
|
||||
public double barrelLeftPos = 0;
|
||||
public double lastBarrelLeftPos = 0;
|
||||
private boolean didJustShootRight = false;
|
||||
private boolean retractingRight = false;
|
||||
public double barrelRightPos = 0;
|
||||
public double lastBarrelRightPos = 0;
|
||||
|
||||
static List<Integer> configs = new ArrayList();
|
||||
|
||||
static {
|
||||
configs.add(BulletConfigSyncingUtil.R5_NORMAL);
|
||||
configs.add(BulletConfigSyncingUtil.R5_EXPLOSIVE);
|
||||
configs.add(BulletConfigSyncingUtil.R5_DU);
|
||||
configs.add(BulletConfigSyncingUtil.R5_STAR);
|
||||
configs.add(BulletConfigSyncingUtil.CHL_R5);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<Integer> getAmmoList() {
|
||||
return configs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "container.turretSentry";
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTurretDepression() {
|
||||
return 20D;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTurretElevation() {
|
||||
return 20D;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDecetorInterval() {
|
||||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDecetorRange() {
|
||||
return 24D;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDecetorGrace() {
|
||||
return 2D;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getMaxPower() {
|
||||
return 1_000;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getConsumption() {
|
||||
return 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getBarrelLength() {
|
||||
return 1.25D;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getAcceptableInaccuracy() {
|
||||
return 15;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasThermalVision() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vec3 getHorizontalOffset() {
|
||||
return Vec3.createVectorHelper(0.5, 0, 0.5);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
|
||||
if(worldObj.isRemote) {
|
||||
this.lastBarrelLeftPos = this.barrelLeftPos;
|
||||
this.lastBarrelRightPos = this.barrelRightPos;
|
||||
|
||||
float retractSpeed = 0.5F;
|
||||
float pushSpeed = 0.25F;
|
||||
|
||||
if(this.retractingLeft) {
|
||||
this.barrelLeftPos += retractSpeed;
|
||||
|
||||
if(this.barrelLeftPos >= 1) {
|
||||
this.retractingLeft = false;
|
||||
}
|
||||
|
||||
} else {
|
||||
this.barrelLeftPos -= pushSpeed;
|
||||
if(this.barrelLeftPos < 0) {
|
||||
this.barrelLeftPos = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(this.retractingRight) {
|
||||
this.barrelRightPos += retractSpeed;
|
||||
|
||||
if(this.barrelRightPos >= 1) {
|
||||
this.retractingRight = false;
|
||||
}
|
||||
|
||||
} else {
|
||||
this.barrelRightPos -= pushSpeed;
|
||||
if(this.barrelRightPos < 0) {
|
||||
this.barrelRightPos = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.updateEntity();
|
||||
}
|
||||
|
||||
boolean shotSide = false;
|
||||
int timer;
|
||||
|
||||
@Override
|
||||
public void updateFiringTick() {
|
||||
|
||||
timer++;
|
||||
|
||||
if(timer % 10 == 0) {
|
||||
|
||||
BulletConfiguration conf = this.getFirstConfigLoaded();
|
||||
|
||||
if(conf != null) {
|
||||
this.spawnBullet(conf);
|
||||
this.conusmeAmmo(conf.ammo);
|
||||
this.worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:turret.sentry_fire", 2.0F, 1.0F);
|
||||
|
||||
Vec3 pos = this.getTurretPos();
|
||||
Vec3 vec = Vec3.createVectorHelper(this.getBarrelLength(), 0, 0);
|
||||
vec.rotateAroundZ((float) -this.rotationPitch);
|
||||
vec.rotateAroundY((float) -(this.rotationYaw + Math.PI * 0.5));
|
||||
|
||||
Vec3 side = Vec3.createVectorHelper(0.125 * (shotSide ? 1 : -1), 0, 0);
|
||||
side.rotateAroundY((float) -(this.rotationYaw));
|
||||
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setString("type", "vanillaExt");
|
||||
data.setString("mode", "largeexplode");
|
||||
data.setFloat("size", 1F);
|
||||
data.setByte("count", (byte)1);
|
||||
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, pos.xCoord + vec.xCoord + side.xCoord, pos.yCoord + vec.yCoord, pos.zCoord + vec.zCoord + side.zCoord), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
||||
|
||||
if(shotSide) {
|
||||
this.didJustShootLeft = true;
|
||||
} else {
|
||||
this.didJustShootRight = true;
|
||||
}
|
||||
shotSide = !shotSide;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void seekNewTarget() {
|
||||
Entity lastTarget = this.target;
|
||||
super.seekNewTarget();
|
||||
|
||||
if(lastTarget != this.target && this.target != null) {
|
||||
worldObj.playSoundAtEntity(target, "hbm:turret.sentry_lockon", 2.0F, 1.5F);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected NBTTagCompound writePacket() {
|
||||
NBTTagCompound data = super.writePacket();
|
||||
if(didJustShootLeft) data.setBoolean("justShotLeft", didJustShootLeft);
|
||||
if(didJustShootRight) data.setBoolean("justShotRight", didJustShootRight);
|
||||
didJustShootLeft = false;
|
||||
didJustShootRight = false;
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void networkUnpack(NBTTagCompound nbt) {
|
||||
super.networkUnpack(nbt);
|
||||
if(nbt.getBoolean("justShotLeft")) this.retractingLeft = true;
|
||||
if(nbt.getBoolean("justShotRight")) this.retractingRight = true;
|
||||
}
|
||||
|
||||
protected void updateConnections() {
|
||||
this.trySubscribe(worldObj, xCoord, yCoord - 1, zCoord, ForgeDirection.DOWN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
return new ContainerTurretBase(player.inventory, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
return new GUITurretSentry(player.inventory, this);
|
||||
}
|
||||
}
|
||||
@ -99,7 +99,7 @@ public class DungeonToolbox {
|
||||
}
|
||||
|
||||
public static void generateBedrockOreWithChance(World world, Random rand, int chunkX, int chunkZ, EnumBedrockOre ore, FluidStack stack, int tier, int chance) {
|
||||
if(chance > 0 && rand.nextInt(chance) == 0) generateBedrockOre(world, rand, chunkX, chunkZ, ore, null, tier);
|
||||
if(chance > 0 && rand.nextInt(chance) == 0) generateBedrockOre(world, rand, chunkX, chunkZ, ore, stack, tier);
|
||||
}
|
||||
|
||||
public static void generateBedrockOre(World world, Random rand, int chunkX, int chunkZ, EnumBedrockOre ore, int tier) {
|
||||
|
||||
@ -396,6 +396,7 @@ container.turretHoward=Howard
|
||||
container.turretJeremy=Jeremy
|
||||
container.turretMaxwell=Maxwell
|
||||
container.turretRichard=Richard
|
||||
container.turretSentry=Brown
|
||||
container.turretTauon=Tauon
|
||||
container.uf6_tank=UF6 Tank
|
||||
container.wasteDrum=Abklingbecken-Trommel
|
||||
@ -4073,6 +4074,7 @@ tile.turret_maxwell.name=Hochenergie-MASER-Geschütz "Maxwell"
|
||||
tile.turret_rocket.name=Raketengeschütz
|
||||
tile.turret_richard.name=Raketenwerfergeschütz "Richard"
|
||||
tile.turret_spitfire.name=Geschütz für das ich noch keinen Namen habe [WIP]
|
||||
tile.turret_sentry.name=Selbstschussanlage "Brown"
|
||||
tile.turret_tau.name=Tauonengeschütz
|
||||
tile.turret_tauon.name=XVL1456-Prototypengeschütz "Tauon"
|
||||
tile.vacuum.name=Vakuum
|
||||
|
||||
@ -717,6 +717,7 @@ container.turretHoward=Howard
|
||||
container.turretJeremy=Jeremy
|
||||
container.turretMaxwell=Maxwell
|
||||
container.turretRichard=Richard
|
||||
container.turretSentry=Brown
|
||||
container.turretTauon=Tauon
|
||||
container.uf6_tank=UF6 Tank
|
||||
container.wasteDrum=Spent Fuel Pool Drum
|
||||
@ -2894,7 +2895,7 @@ item.pill_iodine.desc=Removes negative effects
|
||||
item.pill_herbal.name=Herbal Paste
|
||||
item.pill_herbal.desc=Effective treatment against lung disease and mild radiation poisoning$Comes with side effects
|
||||
item.pin.name=Bobby Pin
|
||||
item.pin.desc="*Unmodified* success rate of picking a standard lock is ~10%.
|
||||
item.pin.desc=Standard success rate of picking a regular lock is ~10%%.
|
||||
item.pipes_steel.name=Steel Pipes
|
||||
item.pipes_steel.desc=Uncrafting was omitted due to tax evasion.
|
||||
item.piston_selenium.name=Combustion Engine Piston
|
||||
@ -4654,6 +4655,7 @@ tile.turret_maxwell.name=High-Energy MASER Turret "Maxwell"
|
||||
tile.turret_rocket.name=Rocket Turret
|
||||
tile.turret_richard.name=Rocket Launcher Turret "Richard"
|
||||
tile.turret_spitfire.name=Turret I have no name for right now [WIP]
|
||||
tile.turret_sentry.name=Sentry Turret "Brown"
|
||||
tile.turret_tau.name=Tauon Turret
|
||||
tile.turret_tauon.name=XVL1456 Prototype Turret "Tauon"
|
||||
tile.vacuum.name=Vacuum
|
||||
|
||||
@ -221,7 +221,6 @@ book.rbmk.title8=碳化钨中子反射器
|
||||
book.rbmk.page8=反应堆中的 §l碳化钨中子反射器§r 将阻止中子的通过, 相反,中子将被反射回它们来自的燃料棒上. 这对于使用中子是有用的, 否则这些中子一旦离开反应堆就会被浪费掉.
|
||||
book.rbmk.title9=硼中子吸收器
|
||||
book.rbmk.page9=§l硼中子吸收器§r 只是阻挡中子. 被吸收的中子不会产生热量,会被有效地吸收. 这有助于防止燃料棒发生过度反应从而超出临界值.
|
||||
|
||||
book.rbmk.title10=石墨慢化剂
|
||||
book.rbmk.page10=§l石墨慢化剂§r 把穿过它的快中子转换成慢中子. 大多数核燃料反应释放出快中子, 而引起裂变需要慢中子, 所以强烈建议使用慢化剂.
|
||||
book.rbmk.title11=结构柱
|
||||
@ -313,52 +312,87 @@ book_lore.test.page.2=他在我怀里睡着时,我正在打字。我怎么才
|
||||
book_lore.test.page.3=3
|
||||
book_lore.test.page.4=4
|
||||
book_lore.test.page.5=5
|
||||
book_lore.book_iodine.name=Note
|
||||
book_lore.book_iodine.author=Dave
|
||||
book_lore.book_iodine.name=笔记
|
||||
book_lore.book_iodine.author=戴夫
|
||||
book_lore.book_iodine.page.1=alright you will not believe this, but old man weathervane finally managed to show up again since he left two weeks ago and what's more surprising is the fact that he actually decided to spill the beans on what they were doing in the canyon:
|
||||
book_lore.book_iodine.page.2=apparently the morons from R&D discovered a compound that is mostly inorganic, pretty much like a toxin in nature, but get this: the dying cells will reproduce said toxin and excrete it through the skin, creating an aerosol that is highly contagious.
|
||||
book_lore.book_iodine.page.3=it's just like a virus, but not a virus. the composition is weird, you can mix it in any household bottle but you do have to get the order right. the doc told me that the first ingredient which is just powdered iodine crystals goes into slot %d
|
||||
book_lore.book_phosphorous.name=Note
|
||||
book_lore.book_phosphorous.author=Dave
|
||||
book_lore.book_phosphorous.name=笔记
|
||||
book_lore.book_phosphorous.author=戴夫
|
||||
book_lore.book_phosphorous.page.1=heyo, it's me again. i assume you got my last memo, the doc wasn't too happy about it. i'll have to do this quick, the dunderheads from R&D are currently moaning again, probably over money. again. anyway, doc weathervane found that the second
|
||||
book_lore.book_phosphorous.page.2=ingredient is red phosphorous, whihc has to be mixed into slot %d
|
||||
book_lore.book_dust.name=Note
|
||||
book_lore.book_dust.author=Dave
|
||||
book_lore.book_dust.name=笔记
|
||||
book_lore.book_dust.author=戴夫
|
||||
book_lore.book_dust.page.1=the doc was furious when he found out that the R&D dorks kept the one remaining sample, ranting about gross negligence this and a doomsday scenario that. i told him to chill for a minute, getting all worked up isn't good for his blood pressure, not
|
||||
book_lore.book_dust.page.2=that he has much blood left to begin with. one of the R&D morons slipped some more info into last week's circular, they call their little concoction \"MKU\" whatever that means, and that it contains actual household lint. can you believe that? one of the most
|
||||
book_lore.book_dust.page.3=dangerous inventions of theirs and it contains dust. strangely they also mentioned that it goes into slot %d
|
||||
book_lore.book_mercury.name=Note
|
||||
book_lore.book_mercury.author=Dave
|
||||
book_lore.book_mercury.name=笔记
|
||||
book_lore.book_mercury.author=戴夫
|
||||
book_lore.book_mercury.page.1=well that settles that. not counting the vomitting blood part, the toxicological report mostly resembles that of mercury poisoning. why? because our little mix also contains mercury! i just wonder where all that stuff comes from when being
|
||||
book_lore.book_mercury.page.2=replicated by the body? whatever, the mercury goes into slot %d
|
||||
book_lore.book_flower.name=Note
|
||||
book_lore.book_flower.author=Dave
|
||||
book_lore.book_flower.name=笔记
|
||||
book_lore.book_flower.author=戴夫
|
||||
book_lore.book_flower.page.1=remember when i mentioned in my first memo that the compound is mostly anorganic? well guess what, the old man shared the fourth ingredient: ipomoea nil, a genus of flower. morning glory! it might be due to its low sulfur content, whatever might be the case,
|
||||
book_lore.book_flower.page.2=it does not work with other flowers. the morning glory goes into slot %d
|
||||
book_lore.book_syringe.name=Note
|
||||
book_lore.book_syringe.author=Dave
|
||||
book_lore.book_syringe.name=笔记
|
||||
book_lore.book_syringe.author=戴夫
|
||||
book_lore.book_syringe.page.1=a little addendum to my fifth message, obviously you have to store this MKU stuff in a container. the R&D nuts used regular metal syringes that they got from medical. surplus ware i presume, they got thousands of needles just lying around. the metal
|
||||
book_lore.book_syringe.page.2=syringe goes into slot %d
|
||||
book_lore.resignation_note.name=Letter of Resignation
|
||||
book_lore.resignation_note.author=Kosma
|
||||
book_lore.resignation_note.name=辞职信
|
||||
book_lore.resignation_note.author=科斯马
|
||||
book_lore.resignation_note.page.1=Management downsized our department again yesterday. Those idiots only have themselves to blame, I don't know what they were expecting after that fiasco. Who the hell leaks that sort of information? We're losing millions and
|
||||
book_lore.resignation_note.page.2=it's ME who's the one out of a job now. I'M the one being asked to resign. I hope you asshats finally learn from your overabundance of mistakes and take that stick out of your ass.
|
||||
book_lore.resignation_note.page.3=I'm not coming back on Friday. Just send the paycheck.
|
||||
book_lore.memo_stocks.name=Intracorporate Memorandum
|
||||
book_lore.memo_stocks.name=公司内部备忘录
|
||||
book_lore.memo_stocks.page.1=Investor Relations - $ $ There's been some glaring discrepancies in the figures provided for the latest quarterly report. It would be prudent for the financial department to make some adjustments, so there won't be any concern.
|
||||
book_lore.memo_schrab_gsa.name=Internal Memorandum
|
||||
book_lore.memo_schrab_gsa.name=内部备忘录
|
||||
book_lore.memo_schrab_gsa.page.1=Contract Management - $ $ Legal has made a breakthrough with the DLA. They've awarded us with a 45 BILLION GSA Schedule for further procurement and research of saralloy. At current estimates, that would be at minimum
|
||||
book_lore.memo_schrab_gsa.page.2=a 40%% profit on related operations, let alone the possibility of future contracts. Due to the confidential nature, all fiscal evidence is to remain private.
|
||||
book_lore.memo_schrab_rd.name=Internal Memorandum
|
||||
book_lore.memo_schrab_rd.name=内部备忘录
|
||||
book_lore.memo_schrab_rd.page.1=Research & Development - $ $ Our main production method of saralloy has been through the new particle accelerator. However, the energy costs are exorbitantly high compared to the amount of output.
|
||||
book_lore.memo_schrab_rd.page.2=Doctor Schrabauer, however, has discovered a new interaction - called "Strange Lepton Oscillation" - that could significantly reduce costs. Through a not entirely understood process, supplied electrons are transmuted into extremely
|
||||
book_lore.memo_schrab_rd.page.3=high-energy photons, through a strange charm. This is an extreme exception to many established particle conversion laws, but preliminary experiments have proved that these protons transmute into up and down quarks, eventually creating saralloy.
|
||||
book_lore.memo_schrab_rd.page.4=Strangely, the prototype requires Tungsten alloyed with small amounts of saralloy. In addition, a special capacitor is required to negate the leftover positive charge.
|
||||
book_lore.memo_schrab_nuke.name=Research Report
|
||||
book_lore.memo_schrab_nuke.name=研究报告
|
||||
book_lore.memo_schrab_nuke.author=Doctor Schrabauer
|
||||
book_lore.memo_schrab_nuke.page.1=Our most recent investigation led us to the effects of nuclear explosions on materials. Thanks to our grant money, we *accidentally* tested our theory on direct saralloy synthesis from uranium.
|
||||
book_lore.memo_schrab_nuke.page.2=Only our cyclotron has actually created saralloy previously. However, at our underground shot at Everwerpen, miniscule traces of saralloy were found in uranium ore at the site. All pure, metallic uranium nearby had fissioned.
|
||||
book_lore.memo_schrab_nuke.page.3=As such, given enough uranium ore concentrated around an explosive, or perhaps even a dirty bomb rich in waste containing fissionable material, one could hypothetically create enough saralloy to collect manually.
|
||||
book_lore.insanity_1.name=Torn Page
|
||||
book_lore.insanity_1.author=D Ferguson
|
||||
book_lore.insanity_1.page.1=August 6th $ $ Months, no, years worth of dicking about wrestling with investors and operating the greatest energy hog in the northern hemisphere has finally paid off.
|
||||
book_lore.insanity_1.page.2=While we aren't entirely sure what exactly we found - given we ran gigavolt collisions on particles that were still poorly documented - the results couldn't have been more exciting.
|
||||
book_lore.insanity_1.page.3=We haven't found a name for whatever it is we've found, nor are we sure if we're looking at a new type of particle, a wormhole leading into another dimension, or satan's anus, but I'm sure our PR people can come up with something.
|
||||
book_lore.insanity_2.name=Torn Page
|
||||
book_lore.insanity_2.author=D Ferguson
|
||||
book_lore.insanity_2.page.1=August 8th $ $ We've kept "The Thing" (yes that's what we call it for now) in magnetic isolation for the past days. Spectroscopy tests ended up breaking our spectrometer, but we managed to gain some useful data.
|
||||
book_lore.insanity_2.page.2=For starters, this thing glows like a christmas tree, radiation photons of about every wavelength you could think of enveloped by a powerful infrared corona. The logical conclusion is that looking at it with your naked
|
||||
book_lore.insanity_2.page.3=eye would most likely kill you. Now that begs the question: How can a particle this tiny radiate such immense energy? What are you hiding, little man?
|
||||
book_lore.insanity_3.name=Torn Page
|
||||
book_lore.insanity_3.author=D Ferguson
|
||||
book_lore.insanity_3.page.1=August 22nd $ $ I haven't slept right in days. Doc said he couldn't find anything. Been on all sorts of medication now, but the headaches only get worse. Lab boys suspect it might be contamination from the incident two weeks ago.
|
||||
book_lore.insanity_3.page.2=Doc said it's not that likely, ARS is different. I might need to take some time off if this continues. The Thing is still in containment, the lab boys speculate if the field goes down, the entire complex turns into a mushroom cloud.
|
||||
book_lore.insanity_3.page.3=I'm not sure how administration can keep this calm, but i don't get paid enough to waste thoughts on that.
|
||||
book_lore.insanity_4.name=Torn Page
|
||||
book_lore.insanity_4.author=D Ferguson
|
||||
book_lore.insanity_4.page.1=August 28th $ $ They denied my request for leave and I've been pushing through the past few days. Headaches are getting worse. I'm not the only one who's feeling it, either. Some of the lab boys are in a similar situation.
|
||||
book_lore.insanity_4.page.2=All the while The Thing has left the complex - GOOD. Some suits came in yesterday and had it shipped off, god knows where. One of the lab boys, Zachary, said they're probably burying the containment vessel in the desert, slowly
|
||||
book_lore.insanity_4.page.3=trying to "fizzle out" The Thing far off from civilization. I say let's shoot it into space. Needless to say, our investors cut all funding for the time being. I should start looking for another job.
|
||||
book_lore.insanity_5.name=Torn Page
|
||||
book_lore.insanity_5.author=D Ferguson
|
||||
book_lore.insanity_5.page.1=September 11th $ $ I'm having this re-occurring nightmare. I'm walking around in an open space and there's these people everywhere, people in rubber suits and freakishly deformed faces. It's always the same nightmare,
|
||||
book_lore.insanity_5.page.2=and one of the guys from the lab I've spoken with lately has had the same dream. Meanwhile my post has been rather boring, the accelerator has been shut down, all ongoing projects are on halt and our budget is slowly melting away.
|
||||
book_lore.insanity_5.page.3=Something is telling me that The Thing is still out there somewhere. I can feel it.
|
||||
book_lore.insanity_6.name=Torn Page
|
||||
book_lore.insanity_6.author=D Ferguson
|
||||
book_lore.insanity_6.page.1=October 3rd $ $ Half the staff is dead, most of the rest is in the ICU. My condition hasn't changed in the past weeks, for better or worse.
|
||||
book_lore.insanity_6.page.2=Reality is starting to feel less and less real however. Sometimes I look up into the sky at night and hallucinate that thing we discovered all those weeks ago.
|
||||
book_lore.insanity_6.page.3=That same brilliant sheen of crimson that our spectrometer spat out. My doc says it's delirium and stress caused by the incident, and perhaps hes right, but the meds aren't working at all.
|
||||
book_lore.insanity_7.name=Torn Page
|
||||
book_lore.insanity_7.author=D Ferguson
|
||||
book_lore.insanity_7.page.1=December 12th $ $ I've been out of a job, but to be honest I'm somewhat thankful about it. My old workplace has gone up in flames - or so they say.
|
||||
book_lore.insanity_7.page.2=The seismological observatory a couple miles south recorded constant earthquakes for days on end, not that anyone else would have noticed this deep in the desert.
|
||||
book_lore.insanity_7.page.3=I have concluded that this place was cursed, making everyone sick and then descending into hell like some sort of Edgar Allan Poe story. Good riddance.
|
||||
cannery.f1=[按F1键获取帮助]
|
||||
cannery.centrifuge=气体离心机
|
||||
cannery.centrifuge.0=气体离心机可以使用通用流体管道传输流体。
|
||||
@ -545,6 +579,7 @@ container.fluidtank=储罐
|
||||
container.fileCabinet=文件柜
|
||||
container.forceField=力场发生器
|
||||
container.frackingTower=水力压裂塔
|
||||
container.furnaceCombination=复式炼焦炉
|
||||
container.furnaceIron=铁炉
|
||||
container.furnaceSteel=钢炉
|
||||
container.fusionMultiblock=大型聚变反应堆
|
||||
@ -554,6 +589,7 @@ container.gasFlare=高架火炬
|
||||
container.generator=研究型反应堆
|
||||
container.hadron=粒子加速器
|
||||
container.heaterFirebox=燃烧室
|
||||
container.heaterHeatex=热交换器
|
||||
container.heaterOilburner=流体燃烧器
|
||||
container.heaterOven=加热炉
|
||||
container.iGenerator=工业发电机
|
||||
@ -570,6 +606,7 @@ container.machineFEL=FEL自由电子激光器
|
||||
container.machineITER=聚变反应堆
|
||||
container.machineLargeTurbine=工业汽轮机
|
||||
container.machineLiquefactor=液化机
|
||||
container.machineMixer=工业搅拌机
|
||||
container.machineRefinery=炼油厂
|
||||
container.machineSelenium=星型发动机
|
||||
container.machineShredder=粉碎机
|
||||
@ -647,6 +684,17 @@ container.uf6_tank=六氟化铀储罐
|
||||
container.wasteDrum=乏燃料池
|
||||
container.watzPowerplant=Watz发电厂
|
||||
container.zirnox=锆诺克斯核反应堆
|
||||
crucible.aa=高级合金生产
|
||||
crucible.ferro=铀铁合金生产
|
||||
crucible.hematite=赤铁矿炼铁
|
||||
crucible.hss=高速钢生产
|
||||
crucible.malachite=孔雀石炼铜
|
||||
crucible.redcopper=紫铜生产
|
||||
crucible.steel=钢铁生产
|
||||
crucible.steelMeteoric=陨铁炼钢
|
||||
crucible.steelPig=生铁炼钢
|
||||
crucible.steelWrought=锻铁炼钢
|
||||
crucible.tcalloy=锝钢合金生产
|
||||
death.attack.acid=%1$s 掉进了酸里
|
||||
death.attack.acidPlayer=%1$s 被 %2$s 溶解
|
||||
death.attack.ams=%1$s 沐浴在尚未被人类科学命名的致命粒子中
|
||||
@ -703,9 +751,7 @@ death.attack.taint=%1$s 死于恶性肿瘤
|
||||
death.attack.tau=%1$s 被 %2$s 用带负电荷的陶子射穿
|
||||
death.attack.tauBlast=%1$s 对XVL1456充能时间过长,被炸成碎片
|
||||
death.attack.teleporter=%1$s 被传送到虚空
|
||||
desc.item.pileRod=§e使用钻孔石墨插入$§E使用螺丝刀拔出$
|
||||
|
||||
|
||||
desc.item.pileRod=§e使用钻孔石墨插入$§E使用螺丝刀拔出$
|
||||
desc.item.rtgDecay=衰变为:%s
|
||||
desc.item.rtgHeat=功率级别:%s
|
||||
desc.item.wasteCooling=在乏燃料池中冷却
|
||||
@ -836,6 +882,7 @@ hbmfluid.biofuel=生物燃料
|
||||
hbmfluid.biogas=沼气
|
||||
hbmfluid.bitumen=沥青
|
||||
hbmfluid.carbondioxide=二氧化碳
|
||||
hbmfluid.coalcreosote=煤焦杂酚油
|
||||
hbmfluid.coalgas=煤汽油
|
||||
hbmfluid.coalgas_leaded=含铅煤汽油
|
||||
hbmfluid.coaloil=煤液化油
|
||||
@ -891,6 +938,7 @@ hbmfluid.reclaimed=再生油
|
||||
hbmfluid.salient=绿色液体
|
||||
hbmfluid.sas3=三硫化Sa
|
||||
hbmfluid.schrabidic=Sa酸
|
||||
hbmfluid.seedslurry=播种浆料
|
||||
hbmfluid.smear=工业油
|
||||
hbmfluid.spentsteam=低压蒸汽
|
||||
hbmfluid.steam=蒸汽
|
||||
@ -904,6 +952,7 @@ hbmfluid.wastefluid=液态核废料
|
||||
hbmfluid.wastegas=气态核废料
|
||||
hbmfluid.water=水
|
||||
hbmfluid.watz=毒泥浆
|
||||
hbmfluid.woodoil=木油
|
||||
hbmfluid.xenon=氙气
|
||||
hbmfluid.xpjuice=经验汁
|
||||
hbmpseudofluid.none=空
|
||||
@ -958,12 +1007,14 @@ hbmmat.lignite=褐煤
|
||||
hbmmat.lithium=锂
|
||||
hbmmat.magnetizedtungsten=磁化钨
|
||||
hbmmat.malachite=孔雀石
|
||||
hbmmat.meteoriciron=陨铁
|
||||
hbmmat.mingrade=工业级铜
|
||||
hbmmat.neptunium237=镎-237
|
||||
hbmmat.niobium=铌
|
||||
hbmmat.obsidian=黑曜岩
|
||||
hbmmat.osmiridium=铱锇合金
|
||||
hbmmat.petcoke=石油焦炭
|
||||
hbmmat.pigiron=生铁
|
||||
hbmmat.plutonium=钚
|
||||
hbmmat.plutonium238=钚-238
|
||||
hbmmat.plutonium239=钚-239
|
||||
@ -999,6 +1050,7 @@ hbmmat.uranium235=铀-235
|
||||
hbmmat.uranium238=铀-238
|
||||
hbmmat.whitephosphorus=白磷
|
||||
hbmmat.workersalloy=Desh
|
||||
hbmmat.wroughtiron=锻铁
|
||||
matshape.block=%s 块
|
||||
matshape.blocks=%s 块
|
||||
matshape.ingot=%s 锭
|
||||
@ -1017,6 +1069,7 @@ info.template_out=输出:
|
||||
info.template_out_p=输出:
|
||||
info.template_seconds=秒
|
||||
info.template_time=生产耗时:
|
||||
item.acetylene_torch.name=乙炔焊罐
|
||||
item.ajr_boots.name=AJR 动力装甲靴子
|
||||
item.ajr_helmet.name=AJR 动力装甲头盔
|
||||
item.ajr_legs.name=AJR 动力装甲护腿
|
||||
@ -1134,9 +1187,9 @@ item.ammo_arty_phosphorus.name=16英寸磷炮弹
|
||||
item.ammo_arty_phosphorus_multi.name=16英寸多弹头磷炮弹
|
||||
item.ammo_cell.name=能量单元
|
||||
item.ammo_container.name=万能弹药盒
|
||||
item.ammo_dart.name=塑料镖(凋零)
|
||||
item.ammo_dart.name=塑料镖[凋零]
|
||||
item.ammo_dart_nerf.name=NERF 飞镖
|
||||
item.ammo_dart_nuclear.name=塑料镖(定时炸药)
|
||||
item.ammo_dart_nuclear.name=塑料镖[定时炸药]
|
||||
item.ammo_dgk.name=双联守门员近防系统200发弹药
|
||||
item.ammo_fireext.name=灭火器 水罐
|
||||
item.ammo_fireext_foam.name=灭火器 泡沫罐
|
||||
@ -1189,7 +1242,6 @@ item.ammo_rocket_sleek.name=84mm火箭弹[IF-R&D]
|
||||
item.ammo_rocket_toxic.name=84mm火箭弹[化学]
|
||||
item.ammo_shell.name=240mm炮弹
|
||||
item.ammo_shell_apfsds_du.name=240mm 贫铀尾翼稳定脱壳穿甲弹
|
||||
|
||||
item.ammo_shell_apfsds_t.name=240mm 钨心尾翼稳定脱壳穿甲弹
|
||||
item.ammo_shell_explosive.name=240mm 高爆炮弹
|
||||
item.ammo_shell_w9.name=240mm W9核子炮弹
|
||||
@ -1399,6 +1451,7 @@ item.blades_iron.name=铁制刀片
|
||||
item.blades_schrabidium.name=Sa326刀片
|
||||
item.blades_steel.name=钢制刀片
|
||||
item.blades_titanium.name=钛制刀片
|
||||
item.blowtorch.name=喷灯
|
||||
item.board_copper.name=铜片
|
||||
item.bobmazon_hidden.name=隐藏目录
|
||||
item.bobmazon_machines.name=Bobmazon: 方块和机器
|
||||
@ -1433,7 +1486,9 @@ item.boy_kit.name=小男孩 套件
|
||||
item.boy_propellant.name=炸药
|
||||
item.boy_shielding.name=中子屏蔽罩
|
||||
item.boy_target.name=次临界铀-235标靶
|
||||
item.briquette_lignite.name=褐煤煤球
|
||||
item.briquette.coal.name=煤球
|
||||
item.briquette.lignite.name=褐煤煤球
|
||||
item.briquette.wood.name=木屑球
|
||||
item.bucket_acid.name=一桶酸
|
||||
item.bucket_mud.name=一桶毒泥
|
||||
item.bucket_schrabidic_acid.name=一桶Sa酸
|
||||
@ -1555,6 +1610,7 @@ item.chernobylsign.name=辐射警告标志战斧
|
||||
item.chlorine_pinwheel.name=氯气转轮
|
||||
item.chlorophyte_pickaxe.name=叶绿镐
|
||||
item.chocolate.name=“我是-镭牌”巧克力
|
||||
item.chocolate.desc=镭巧克力?我很确定这是冰毒。
|
||||
item.chocolate_milk.name=巧克力牛奶
|
||||
item.chopper.name=猎人直升机
|
||||
item.chopper_blades.name=猎人直升机旋翼
|
||||
@ -1756,6 +1812,7 @@ item.debris_metal.name=断裂金属棒
|
||||
item.debris_shrapnel.name=走道碎片
|
||||
item.definitelyfood.name=完全不脏牌军粮
|
||||
item.defuser.name=高科技拆弹装置
|
||||
item.defuser_gold.name=黄金剪线钳
|
||||
item.demon_core_closed.name=封闭的恶魔核心
|
||||
item.demon_core_open.name=打开的恶魔核心
|
||||
item.desh_axe.name=工人合金斧
|
||||
@ -1791,6 +1848,12 @@ item.door_bunker.name=仓门
|
||||
item.door_metal.name=金属门
|
||||
item.door_office.name=办公室门
|
||||
item.dosimeter.name=剂量计
|
||||
item.drillbit_desh.name=Desh钻头
|
||||
item.drillbit_desh_diamond.name=Desh钻头(镶钻)
|
||||
item.drillbit_hss.name=高速钢钻头
|
||||
item.drillbit_hss_diamond.name=高速钢钻头(镶钻)
|
||||
item.drillbit_steel.name=钢钻头
|
||||
item.drillbit_steel_diamond.name=钢钻头(镶钻)
|
||||
item.drill_titanium.name=钛钻头
|
||||
item.drax.name=采掘钻
|
||||
item.drax_mk2.name=强化型采掘钻
|
||||
@ -1845,6 +1908,7 @@ item.fins_quad_titanium.name=小型钛翼
|
||||
item.fins_small_steel.name=小型钢栅格翼
|
||||
item.fins_tri_steel.name=大型钢翼
|
||||
item.five_htp.name=5-羟色胺药丸
|
||||
item.five_htp.desc=移除所有迪伽马辐射,并获得10分钟稳定效果
|
||||
item.flame_conspiracy.name=阴谋论
|
||||
item.flame_conspiracy.desc=钢梁不能熔化喷气燃料!
|
||||
item.flame_opinion.name=个人观点
|
||||
@ -1877,6 +1941,7 @@ item.fluid_tank_lead_full.name=危险品罐:
|
||||
item.fluorite.name=氟石粉
|
||||
item.flywheel_beryllium.name=铍制飞轮
|
||||
item.fmn.name=氟硝西泮片
|
||||
item.fmn.desc=移除2000mDRX以上的所有迪伽马辐射
|
||||
item.folly_bullet.name=128mm星辉弹头
|
||||
item.folly_bullet_du.name=128mm贫铀弹头
|
||||
item.folly_bullet_nuclear.name=128mm核弹头
|
||||
@ -1919,6 +1984,7 @@ item.gas_mask_m65.name=M65-Z防毒面具
|
||||
item.gas_mask_mono.name=防一氧化碳面罩
|
||||
item.gas_mask_olde.name=皮革防毒面具
|
||||
item.gas_petroleum.name=石油气罐
|
||||
item.gas_tester.name=气体传感器
|
||||
item.gear_large.name=大型齿轮
|
||||
item.gear_large_steel.name=大型钢齿轮
|
||||
item.geiger_counter.name=手持盖革计数器
|
||||
@ -2226,7 +2292,6 @@ item.ingot_smore.name=S'more 锭
|
||||
item.ingot_solinium.name=Sa327锭
|
||||
item.ingot_sr90.name=锶-90锭
|
||||
item.ingot_starmetal.name=§9星辉锭§r
|
||||
|
||||
item.ingot_steel.name=钢锭
|
||||
item.ingot_steel_dusted.name=粉末钢锭
|
||||
item.ingot_tantalium.name=钽锭
|
||||
@ -2647,6 +2712,21 @@ item.oil_detector.noOil=未发现油田
|
||||
item.oil_tar.coal.name=煤焦油
|
||||
item.oil_tar.crude.name=焦油
|
||||
item.oil_tar.crack.name=裂化焦油
|
||||
item.oil_tar.wood.name=木馏油
|
||||
item.ore.asbestos=石棉
|
||||
item.ore.borax=硼砂
|
||||
item.ore.copper=铜
|
||||
item.ore.gold=金
|
||||
item.ore.iron=铁
|
||||
item.ore.niobium=铌
|
||||
item.ore.titanium=钛
|
||||
item.ore.tungsten=钨
|
||||
item.ore_bedrock.name=基岩%s矿
|
||||
item.ore_centrifuged.name=离心%s矿
|
||||
item.ore_cleaned.name=清洁%s矿
|
||||
item.ore_enriched.name=富集%s矿
|
||||
item.ore_purified.name=净化%s矿
|
||||
item.ore_separated.name=分离%s矿
|
||||
item.overfuse.name=奇异螺丝刀
|
||||
item.overfuse.desc=说啥?
|
||||
item.oxy_mask.name=氧气面罩
|
||||
@ -2755,14 +2835,20 @@ item.pile_rod_source.desc=§d[中子源棒]
|
||||
item.pile_rod_uranium.name=芝加哥反应堆 铀棒
|
||||
item.pile_rod_uranium.desc=§a[可反应核燃料]$§e使用手钻取堆芯样本
|
||||
item.pill_iodine.name=碘丸
|
||||
item.pill_iodine.desc=消除负面buff
|
||||
item.pill_herbal.name=草药膏
|
||||
item.pill_herbal.desc=有效治疗肺部疾病和轻度辐射中毒$有副作用
|
||||
item.pin.name=发夹
|
||||
item.pin.desc=“*未修改*撬开标准锁的成功率约为10%。
|
||||
item.pipes_steel.name=钢管
|
||||
item.pipes_steel.desc=为了避免合成冲突,所以造价如此高昂
|
||||
item.pirfenidone.name=吡咯菲酮
|
||||
item.piston_selenium.name=星型发动机活塞
|
||||
item.piston_set_desh.name=Desh活塞组
|
||||
item.piston_set_dura.name=高速钢活塞组
|
||||
item.piston_set_starmetal.name=星辉活塞组
|
||||
item.piston_set_steel.name=钢活塞组
|
||||
item.plan_c.name=C计划
|
||||
item.plan_c.desc=致死
|
||||
item.plant_item.rope.name=麻绳
|
||||
item.plant_item.tobacco.name=烟叶
|
||||
item.plate_advanced_alloy.name=高级合金板
|
||||
@ -2924,6 +3010,7 @@ item.radaway.name=消辐宁
|
||||
item.radaway_flush.name=超级消辐宁
|
||||
item.radaway_strong.name=强效消辐宁
|
||||
item.radx.name=防辐射药
|
||||
item.radx.desc=在3分钟内增加0.2(37%)的抗辐射能力
|
||||
item.rag.name=布
|
||||
item.rag_damp.name=湿布
|
||||
item.rag_piss.name=沾有尿的布
|
||||
@ -3268,6 +3355,7 @@ item.singularity_counter_resonant.name=可控反振谐奇点
|
||||
item.singularity_spark.name=Spark奇点
|
||||
item.singularity_super_heated.name=超热共振奇点
|
||||
item.siox.name=SiOX抗癌药物
|
||||
item.siox.desc=使用石棉的力量逆转间皮瘤!
|
||||
item.siren_track.name=警报声轨
|
||||
item.smashing_hammer.name=粉碎锤
|
||||
item.solid_fuel.name=固体燃料
|
||||
@ -3529,6 +3617,7 @@ item.wrench.name=管道扳手
|
||||
item.wrench_archineer.name=Archineer扳手
|
||||
item.wrench_flipped.name=刺刀扳手
|
||||
item.xanax.name=NAXA 抗迪伽马药物
|
||||
item.xanax.desc=移除500mDRX迪伽马辐射
|
||||
item.zirconium_legs.name=锆质护腿
|
||||
itemGroup.tabBlocks=HBM 矿石和方块
|
||||
itemGroup.tabConsumable=HBM 食物和装备
|
||||
@ -3664,6 +3753,9 @@ tile.block_cap_sparkle.name=核子可乐瓶盖方块
|
||||
tile.block_cap_star.name=夕阳沙士星星瓶盖方块
|
||||
tile.block_cap_sunset.name=夕阳沙士瓶盖方块
|
||||
tile.block_cobalt.name=钴块
|
||||
tile.block_coke.coal.name=煤焦炭块
|
||||
tile.block_coke.lignite.name=褐煤焦炭块
|
||||
tile.block_coke.petroleum.name=石油焦炭块
|
||||
tile.block_coltan.name=钽块
|
||||
tile.block_combine_steel.name=CMB钢块
|
||||
tile.block_copper.name=铜块
|
||||
@ -3939,8 +4031,8 @@ tile.dirt_dead.name=泥渣
|
||||
tile.dirt_oily.name=油泥
|
||||
tile.drill_pipe.name=钻杆
|
||||
tile.door_bunker.name=仓门
|
||||
tile.door_office.name=办公室门
|
||||
tile.door_metal.name=金属门
|
||||
tile.door_office.name=办公室门
|
||||
tile.ducrete.name=高密度贫铀混凝土瓷砖
|
||||
tile.ducrete_stairs.name=高密度贫铀混凝土瓷砖楼梯
|
||||
tile.ducrete_smooth.name=高密度贫铀混凝土
|
||||
@ -3973,7 +4065,10 @@ tile.flame_war.name=盒中论战
|
||||
tile.float_bomb.name=悬浮炸弹
|
||||
tile.fluid_duct.name=通用流体管道
|
||||
tile.fluid_duct_box.name=通用流体管道(方形)
|
||||
tile.fluid_duct_gauge.name=流量计管
|
||||
tile.fluid_duct_gauge.desc=显示每个游戏刻在管网有多少流体移动的管道$由桶或罐连接的分离网络被视为一个共享网络。
|
||||
tile.fluid_duct_neo.name=通用流体管道
|
||||
tile.fluid_duct_paintable.name=可喷漆涂层通用流体导管
|
||||
tile.fluid_duct_solid.name=带涂层的通用流体导管
|
||||
tile.foam_layer.name=泡沫层
|
||||
tile.foundry_basin.name=铸造水池
|
||||
@ -3986,6 +4081,8 @@ tile.frozen_dirt.name=冰冻土
|
||||
tile.frozen_grass.name=冰冻草
|
||||
tile.frozen_log.name=冰冻原木
|
||||
tile.frozen_planks.name=冰冻木板
|
||||
tile.furnace_combination.name=复式炼焦炉
|
||||
tile.furnace_combination.desc=一种可以生产木炭和煤焦炭的大熔炉$产生流体副产品$传热速率:ΔT*0.25 TU/T
|
||||
tile.furnace_iron.name=铁炉
|
||||
tile.furnace_iron.desc=更大、效率更高的炉子,在闲置时不会浪费燃料。
|
||||
tile.furnace_steel.name=钢炉
|
||||
@ -4059,6 +4156,8 @@ tile.heater_electric.name=电加热器
|
||||
tile.heater_electric.desc=利用电能产生热量$以85%的效率接受来自底部的热量$可使用螺丝刀进行配置。
|
||||
tile.heater_firebox.name=燃烧室
|
||||
tile.heater_firebox.desc=燃烧固体燃料以产生热量。
|
||||
tile.heater_heatex.name=换热加热器
|
||||
tile.heater_heatex.desc=从热流体中产生热量。
|
||||
tile.heater_oilburner.name=流体燃烧器
|
||||
tile.heater_oilburner.desc=燃烧可燃液体产生热量。
|
||||
tile.heater_oven.name=加热炉
|
||||
@ -4110,6 +4209,7 @@ tile.machine_chungus.desc=效率: 85%%
|
||||
tile.machine_coal_off.name=火力发电机
|
||||
tile.machine_coal_on.name=火力发电机
|
||||
tile.machine_combine_factory.name=CMB炼钢炉
|
||||
tile.machine_combustion_engine.name=工业内燃机
|
||||
tile.machine_condenser.name=蒸汽冷凝器
|
||||
tile.machine_controller.name=反应堆遥控模块
|
||||
tile.machine_converter_he_rf.name=HE→RF转换器
|
||||
@ -4130,6 +4230,7 @@ tile.machine_drill.name=自动采矿钻机
|
||||
tile.machine_electric_furnace_off.name=电炉
|
||||
tile.machine_electric_furnace_on.name=电炉
|
||||
tile.machine_epress.name=电动锻压机
|
||||
tile.machine_excavator.name=大型采矿钻机
|
||||
tile.machine_fel.name=FEL自由电子激光器
|
||||
tile.machine_fensu.name=FEnSU飞轮储能系统
|
||||
tile.machine_flare.name=高架火炬
|
||||
@ -4151,6 +4252,7 @@ tile.machine_microwave.name=微波炉
|
||||
tile.machine_mining_laser.name=采矿激光
|
||||
tile.machine_minirtg.name=放射性同位素电池
|
||||
tile.machine_missile_assembly.name=导弹装配台
|
||||
tile.machine_mixer.name=工业搅拌机
|
||||
tile.machine_nuke_furnace_off.name=核熔炉
|
||||
tile.machine_nuke_furnace_on.name=核熔炉
|
||||
tile.machine_orbus.name=重型磁约束储罐
|
||||
@ -4248,6 +4350,7 @@ tile.ore_alexandrite.name=亚历山大变石矿
|
||||
tile.ore_aluminium.name=铝矿石
|
||||
tile.ore_asbestos.name=石棉矿
|
||||
tile.ore_australium.name=奥斯矿石
|
||||
tile.ore_bedrock.name=基岩矿石
|
||||
tile.ore_bedrock_coltan.name=基岩钶钽铁矿
|
||||
tile.ore_bedrock_oil.name=基岩油层
|
||||
tile.ore_beryllium.name=铍矿石
|
||||
@ -4321,7 +4424,7 @@ tile.pink_slab.name=粉色木半砖
|
||||
tile.pink_stairs.name=粉色木台阶
|
||||
tile.plant_dead.name=死亡植物
|
||||
tile.plant_flower.foxglove.name=毛地黄
|
||||
tile.plant_flower.nightshade.name=致命茄
|
||||
tile.plant_flower.nightshade.name=颠茄
|
||||
tile.plant_flower.tobacco.name=烟草
|
||||
tile.plant_flower.weed.name=大麻
|
||||
tile.plant_reeds.name=芦苇
|
||||
@ -4376,6 +4479,7 @@ tile.reactor_inserter.name=反应堆燃料插入器
|
||||
tile.red_barrel.name=炸药桶
|
||||
tile.red_cable.name=紫铜电线
|
||||
tile.red_cable_classic.name=紫铜电缆(经典型)
|
||||
tile.red_cable_paintable.name=可涂漆紫铜线
|
||||
tile.red_connector.name=电力连接器
|
||||
tile.red_pylon.name=电线杆
|
||||
tile.red_pylon_large.name=大型输电塔
|
||||
@ -4536,7 +4640,7 @@ trait.rbmk.depletion=燃料消耗: %s
|
||||
trait.rbmk.diffusion=扩散度: %s
|
||||
trait.rbmk.fluxFunc=中子放射函数: %s
|
||||
trait.rbmk.funcType=中子放射函数类型: %s
|
||||
trait.rbmk.heat=满功率时每刻产生的热量: %s
|
||||
trait.rbmk.heat=每接受一个中子产生的热量: %s
|
||||
trait.rbmk.melt=熔点: %s
|
||||
trait.rbmk.neutron.any=所有中子
|
||||
trait.rbmk.neutron.fast=快中子
|
||||
@ -4553,7 +4657,7 @@ trait.rbmx.depletion=衰变: %s
|
||||
trait.rbmx.diffusion=能量潮涌: %s
|
||||
trait.rbmx.fluxFunc=F迪伽马粒子放射函数: %s
|
||||
trait.rbmx.funcType=F迪伽马粒子放射函数类型: %s
|
||||
trait.rbmx.heat=满功率时每刻产生的热量: %s
|
||||
trait.rbmx.heat=满功率下每刻产生的热量: %s
|
||||
trait.rbmx.melt=崩溃深度: %s
|
||||
trait.rbmk.neutron.any.x=所有非欧几里德形时空平面
|
||||
trait.rbmk.neutron.fast.x=椭圆非欧几里德形时空平面
|
||||
|
||||
2533
src/main/resources/assets/hbm/models/turrets/turret_sentry.obj
Normal file
@ -180,6 +180,8 @@
|
||||
"turret.richard_fire": {"category": "block", "sounds": [{"name": "turret/richard_fire", "stream": false}]},
|
||||
"turret.howard_fire": {"category": "block", "sounds": [{"name": "turret/howard_fire", "stream": false}]},
|
||||
"turret.howard_reload": {"category": "block", "sounds": [{"name": "turret/howard_reload", "stream": false}]},
|
||||
"turret.sentry_fire": {"category": "block", "sounds": [{"name": "turret/sentry_fire", "stream": false}]},
|
||||
"turret.sentry_lockon": {"category": "block", "sounds": [{"name": "turret/sentry_lockon", "stream": false}]},
|
||||
"turret.mortarWhistle": {"category": "block", "sounds": [{"name": "weapon/mortarWhistle", "stream": false}]},
|
||||
|
||||
"entity.chopperFlyingLoop": {"category": "hostile", "sounds": [{"name": "entity/chopperFlyingLoop", "stream": true}]},
|
||||
|
||||
BIN
src/main/resources/assets/hbm/sounds/turret/sentry_fire.ogg
Normal file
BIN
src/main/resources/assets/hbm/sounds/turret/sentry_lockon.ogg
Normal file
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
BIN
src/main/resources/assets/hbm/textures/items/ammo_5mm_alt.png
Normal file
|
After Width: | Height: | Size: 474 B |
BIN
src/main/resources/assets/hbm/textures/items/ammo_5mm_alt2.png
Normal file
|
After Width: | Height: | Size: 485 B |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 927 B After Width: | Height: | Size: 752 B |
BIN
src/main/resources/assets/hbm/textures/models/turrets/sentry.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
@ -3,7 +3,7 @@
|
||||
"modid": "hbm",
|
||||
"name": "Hbm's Nuclear Tech",
|
||||
"description": "A mod that adds weapons, nuclear themed stuff and machines",
|
||||
"version":"1.0.27_X4476",
|
||||
"version":"1.0.27_X4480",
|
||||
"mcversion": "1.7.10",
|
||||
"url": "",
|
||||
"updateUrl": "",
|
||||
|
||||