the new, the old, the mold

This commit is contained in:
Bob 2023-01-15 20:23:09 +01:00
parent c9cef35acf
commit 7f64b418fd
52 changed files with 3452 additions and 382 deletions

View File

@ -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) {

View File

@ -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;

View File

@ -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());

View 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);
}
}

View File

@ -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 });

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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!");
}

View File

@ -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();

View File

@ -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();
}
}

View File

@ -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) {

View File

@ -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];

View 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;
}
}

View File

@ -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.";
}
}

View File

@ -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;

View File

@ -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) {

View File

@ -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);

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -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");

View File

@ -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;

View File

@ -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);
}};
}
}

View File

@ -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() {

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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);

View File

@ -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;

View File

@ -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) {

View File

@ -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);
}
/**

View File

@ -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);
}
}

View File

@ -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) {

View File

@ -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

View File

@ -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

View File

@ -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.237%)的抗辐射能力
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=椭圆非欧几里德形时空平面

File diff suppressed because it is too large Load Diff

View 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}]},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 927 B

After

Width:  |  Height:  |  Size: 752 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -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": "",