Merge branch 'HbmMods:master' into OC_bugfix

This commit is contained in:
BallOfEnergy 2024-07-02 02:44:50 -05:00 committed by GitHub
commit 604849c3a7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
61 changed files with 2476 additions and 718 deletions

View File

@ -1,26 +1,12 @@
## Changed
* Updated boxducts
* All boxducts are now way cleaner, only having bolts on intersections, with straight parts only having very light seams
* Intersections now have unique textures for each size
* Copper boxducts now have a much nicer color gradient
* Exhaust pipes now have a more rusted appearance
* Added an alternate recipe for blank upgrades using integrated circuits and polymer instead of analog circuits
* Update the soyuz and orbital module recipes
* Simplified the recipes, fewer microcrafting parts
* Both now use low-density elements which are made from aluminium/titanium, fiberglass and hard plastic
* Both now make use of more advanced electronics, although in smaller numbers
* Removed the recipes for the satellite deco blocks, those will be phased out soon. Existing deco blocks can still be crafted back into functional satellites
* Moved the satellite recipes to the welder, the attachment is now welded onto the common satellite body
* Simplified the satellite recipes, adjusted cost based on utility (depth scanner, death ray and resonator are more expensive than the mapper/radar)
* CTRL + ALT view now shows the item's internal name and domain
* Adjusted Mekanism compat
* Decreased crafting complexity and time for the digiminer assembler recipe
* Replaced recipes for the wind turbine and atomic disassembler
* Added a config option for toggling Mekanism compat
* Added recipe caching to the combinator funnel, meaning it no longer has to iterate over the entire recipe list all the time for compression/automation, this should improve performance by a fair bit
* Diodes now use silicon nuggets instead of nether quartz
* Aluminium wire's coloring is now consistent with the ingot
## Added
* Acidizer Input Partitioner
* Buffers inputs for the ore acidizer and releases the exact amount needed to complete an operation
* This allows easy automation of acidizers accepting multiple types which have higher input requirements
* By simply shoving items into the acidizer all at once, there is a high likelyhood of the acidizer to clog, as the remaining input is no longer sufficient
* The partitioner only has 9 slots for ingredients, for more types it's necessary to sort the items and use multiple partitioners
* The partitioner has 9 additional slots for invalid items that cannot be processed via acidizer, those can be ejected via hopper IO
* An inline conveyor machine similar to the splitter, receives items from conveyors (but not from ejectors directly) and outputs them on its built-in conveyor belt
## Fixed
* Fixed crash caused by PRISM updating unloaded worlds
* Hopefully fixed another crash caused by PRISM (reproduction was unreliable and sporadic, not confirmed)
## Changed
* The mandatory washing step for bedrock ore byproducts now needs 4 items for sulfuric, 12 for dissolved and 24 for cleaned byproducts (isntead of just one)
* This should offset the exponentially increasing amount of byproduct created from processing bedrock ore which ends up being far greater than the primary product

View File

@ -1,6 +1,6 @@
mod_version=1.0.27
# Empty build number makes a release type
mod_build_number=5000
mod_build_number=5012
credits=HbMinecraft,\
\ rodolphito (explosion algorithms),\

View File

@ -526,7 +526,6 @@ public class ModBlocks {
public static Block lox_barrel;
public static Block taint_barrel;
public static Block crashed_balefire;
public static Block rejuvinator;
public static Block fireworks;
public static Block dynamite;
public static Block tnt;
@ -591,6 +590,7 @@ public class ModBlocks {
public static Block spikes;
public static Block charger;
public static Block floodlight;
public static Block tesla;
@ -791,6 +791,7 @@ public class ModBlocks {
public static Block crane_boxer;
public static Block crane_unboxer;
public static Block crane_splitter;
public static Block crane_partitioner;
public static Block drone_waypoint;
public static Block drone_crate;
@ -1491,6 +1492,7 @@ public class ModBlocks {
spotlight_halogen = new Spotlight(Material.iron, 32, LightType.HALOGEN, true).setBlockName("spotlight_halogen").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":flood_lamp");
spotlight_halogen_off = new Spotlight(Material.iron, 32, LightType.HALOGEN, false).setBlockName("spotlight_halogen_off").setBlockTextureName(RefStrings.MODID + ":flood_lamp_off");
spotlight_beam = new SpotlightBeam().setBlockName("spotlight_beam");
floodlight = new Floodlight(Material.iron).setBlockName("floodlight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone");
concrete_smooth = new BlockRadResistant(Material.rock).setBlockName("concrete_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(140.0F).setBlockTextureName(RefStrings.MODID + ":concrete");
@ -1911,6 +1913,7 @@ public class ModBlocks {
crane_boxer = new CraneBoxer().setBlockName("crane_boxer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
crane_unboxer = new CraneUnboxer().setBlockName("crane_unboxer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
crane_splitter = new CraneSplitter().setBlockName("crane_splitter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":crane_side");
crane_partitioner = new CranePartitioner().setBlockName("crane_partitioner").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":crane_side");
fan = new MachineFan().setBlockName("fan").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
piston_inserter = new PistonInserter().setBlockName("piston_inserter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
@ -2717,6 +2720,7 @@ public class ModBlocks {
//Charger
GameRegistry.registerBlock(charger, charger.getUnlocalizedName());
//GameRegistry.registerBlock(floodlight, floodlight.getUnlocalizedName());
//Decoration Blocks
GameRegistry.registerBlock(block_meteor, block_meteor.getUnlocalizedName());
@ -2892,7 +2896,6 @@ public class ModBlocks {
GameRegistry.registerBlock(therm_endo, therm_endo.getUnlocalizedName());
GameRegistry.registerBlock(therm_exo, therm_exo.getUnlocalizedName());
GameRegistry.registerBlock(emp_bomb, emp_bomb.getUnlocalizedName());
//GameRegistry.registerBlock(rejuvinator, rejuvinator.getUnlocalizedName());
GameRegistry.registerBlock(det_cord, det_cord.getUnlocalizedName());
GameRegistry.registerBlock(det_charge, det_charge.getUnlocalizedName());
GameRegistry.registerBlock(det_nuke, det_nuke.getUnlocalizedName());
@ -3162,6 +3165,7 @@ public class ModBlocks {
register(conveyor_chute);
register(conveyor_lift);
register(crane_splitter);
register(crane_partitioner);
register(drone_waypoint);
register(drone_crate);
register(drone_waypoint_request);

View File

@ -0,0 +1,26 @@
package com.hbm.blocks.machine;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class Floodlight extends BlockContainer {
public Floodlight(Material mat) {
super(mat);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityFloodlight();
}
@Override public int getRenderType() { return -1; }
@Override public boolean isOpaqueCube() { return false; }
@Override public boolean renderAsNormalBlock() { return false; }
public static class TileEntityFloodlight extends TileEntity {
}
}

View File

@ -1,12 +1,15 @@
package com.hbm.blocks.machine;
import com.hbm.blocks.BlockDummyable;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityMachineOreSlopper;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineOreSlopper extends BlockDummyable {
@ -17,6 +20,7 @@ public class MachineOreSlopper extends BlockDummyable {
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityMachineOreSlopper();
if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid();
return null;
}
@ -32,6 +36,40 @@ public class MachineOreSlopper extends BlockDummyable {
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
this.bounding.clear();
//Base
this.bounding.add(AxisAlignedBB.getBoundingBox(-3.5, 0, -1.5, 3.5, 1, 1.5));
//Slop bucket
this.bounding.add(AxisAlignedBB.getBoundingBox(0.5, 1, -1.5, 3.5, 3.25, 1.5));
//Shredder
this.bounding.add(AxisAlignedBB.getBoundingBox(-2.25, 1, -1.5, 0.25, 3.25, -0.75));
this.bounding.add(AxisAlignedBB.getBoundingBox(-2.25, 1, 0.75, 0.25, 3.25, 1.5));
this.bounding.add(AxisAlignedBB.getBoundingBox(-2.25, 1, -1.5, -2, 3.25, 1.5));
this.bounding.add(AxisAlignedBB.getBoundingBox(0, 1, -1.5, 0.25, 3.25, 1.5));
this.bounding.add(AxisAlignedBB.getBoundingBox(-2, 1, -0.75, 0, 2, 0.75));
//Outlet
this.bounding.add(AxisAlignedBB.getBoundingBox(-3.25, 1, -1, -2.25, 3, 1));
return standardOpenBehavior(world, x, y, z, player, side);
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
x += dir.offsetX * o;
z += dir.offsetZ * o;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
this.makeExtra(world, x + dir.offsetX * 3, y, z + dir.offsetZ * 3);
this.makeExtra(world, x - dir.offsetX * 3, y, z - dir.offsetZ * 3);
this.makeExtra(world, x + rot.offsetX, y, z + rot.offsetZ);
this.makeExtra(world, x - rot.offsetX, y, z - rot.offsetZ);
this.makeExtra(world, x + dir.offsetX * 2 + rot.offsetX, y, z + dir.offsetZ * 2 + rot.offsetZ);
this.makeExtra(world, x + dir.offsetX * 2 - rot.offsetX, y, z + dir.offsetZ * 2 - rot.offsetZ);
this.makeExtra(world, x - dir.offsetX * 2 + rot.offsetX, y, z - dir.offsetZ * 2 + rot.offsetZ);
this.makeExtra(world, x - dir.offsetX * 2 - rot.offsetX, y, z - dir.offsetZ * 2 - rot.offsetZ);
}
}

View File

@ -1,15 +1,23 @@
package com.hbm.blocks.machine;
import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ILookOverlay;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntitySolarBoiler;
import com.hbm.util.I18nUtil;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineSolarBoiler extends BlockDummyable {
public class MachineSolarBoiler extends BlockDummyable implements ILookOverlay {
public MachineSolarBoiler(Material mat) {
super(mat);
@ -45,4 +53,28 @@ public class MachineSolarBoiler extends BlockDummyable {
this.makeExtra(world, x, y + 2, z);
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
int[] pos = findCore(world, x, y, z);
if(pos == null)
return;
TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]);
if(!(te instanceof TileEntitySolarBoiler))
return;
TileEntitySolarBoiler boiler = (TileEntitySolarBoiler) te;
List<String> text = new ArrayList<>();
FluidTank[] tanks = boiler.getAllTanks();
for(int i = 0; i < tanks.length; i++)
text.add((i < 1 ? (EnumChatFormatting.GREEN + "-> ") : (EnumChatFormatting.RED + "<- ")) + EnumChatFormatting.RESET + tanks[i].getTankType().getLocalizedName() + ": " + tanks[i].getFill() + "/" + tanks[i].getMaxFill() + "mB");
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
}
}

View File

@ -0,0 +1,237 @@
package com.hbm.blocks.network;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.entity.item.EntityMovingItem;
import com.hbm.inventory.recipes.CrystallizerRecipes;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.util.InventoryUtil;
import api.hbm.conveyor.IConveyorBelt;
import api.hbm.conveyor.IConveyorItem;
import api.hbm.conveyor.IConveyorPackage;
import api.hbm.conveyor.IEnterableBlock;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class CranePartitioner extends BlockContainer implements IConveyorBelt, IEnterableBlock, ITooltipProvider {
@SideOnly(Side.CLIENT) public IIcon iconTop;
@SideOnly(Side.CLIENT) public IIcon iconBack;
@SideOnly(Side.CLIENT) public IIcon iconBelt;
@SideOnly(Side.CLIENT) public IIcon iconInner;
@SideOnly(Side.CLIENT) public IIcon iconInnerSide;
public CranePartitioner() {
super(Material.iron);
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
super.registerBlockIcons(iconRegister);
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":crane_top");
this.iconBack = iconRegister.registerIcon(RefStrings.MODID + ":crane_partitioner_back");
this.iconBelt = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_belt");
this.iconInner = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_inner");
this.iconInnerSide = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_inner_side");
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityCranePartitioner();
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) {
int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2);
if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2);
if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2);
if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2);
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.75F, 1.0F);
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override public int getRenderType() { return renderID; }
@Override public boolean isOpaqueCube() { return false; }
@Override public boolean renderAsNormalBlock() { return false; }
@Override public boolean canItemEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity) { return getTravelDirection(world, x, y, z, null) == dir; }
@Override public boolean canPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { return false; }
@Override public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { }
@Override
public boolean canItemStay(World world, int x, int y, int z, Vec3 itemPos) {
return true;
}
@Override
public Vec3 getTravelLocation(World world, int x, int y, int z, Vec3 itemPos, double speed) {
ForgeDirection dir = this.getTravelDirection(world, x, y, z, itemPos);
Vec3 snap = this.getClosestSnappingPosition(world, x, y, z, itemPos);
Vec3 dest = Vec3.createVectorHelper(snap.xCoord - dir.offsetX * speed, snap.yCoord - dir.offsetY * speed, snap.zCoord - dir.offsetZ * speed);
Vec3 motion = Vec3.createVectorHelper((dest.xCoord - itemPos.xCoord), (dest.yCoord - itemPos.yCoord), (dest.zCoord - itemPos.zCoord));
double len = motion.lengthVector();
Vec3 ret = Vec3.createVectorHelper(itemPos.xCoord + motion.xCoord / len * speed, itemPos.yCoord + motion.yCoord / len * speed, itemPos.zCoord + motion.zCoord / len * speed);
return ret;
}
@Override
public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) {
ForgeDirection dir = this.getTravelDirection(world, x, y, z, itemPos);
itemPos.xCoord = MathHelper.clamp_double(itemPos.xCoord, x, x + 1);
itemPos.zCoord = MathHelper.clamp_double(itemPos.zCoord, z, z + 1);
double posX = x + 0.5;
double posZ = z + 0.5;
if(dir.offsetX != 0) posX = itemPos.xCoord;
if(dir.offsetZ != 0) posZ = itemPos.zCoord;
return Vec3.createVectorHelper(posX, y + 0.25, posZ);
}
public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos) {
int meta = world.getBlockMetadata(x, y, z);
return ForgeDirection.getOrientation(meta);
}
@Override
public void onItemEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity) {
TileEntityCranePartitioner partitioner = (TileEntityCranePartitioner) world.getTileEntity(x, y, z);
ItemStack stack = entity.getItemStack();
ItemStack remainder = null;
if(CrystallizerRecipes.getAmount(stack) > 0) {
remainder = InventoryUtil.tryAddItemToInventory(partitioner, 0, 8, stack);
} else {
remainder = InventoryUtil.tryAddItemToInventory(partitioner, 9, 17, stack);
}
if(remainder != null) {
EntityItem item = new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, remainder.copy());
world.spawnEntityInWorld(item);
}
}
public static class TileEntityCranePartitioner extends TileEntityMachineBase {
public TileEntityCranePartitioner() {
super(18);
}
@Override public String getName() { return "container.partitioner"; }
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
List<ItemStack> stacks = new ArrayList();
for(int i = 0; i < 9; i++) if(slots[i] != null) stacks.add(slots[i]);
stacks.sort(stackSizeComparator);
boolean markDirty = false;
for(ItemStack stack : stacks) {
int amount = CrystallizerRecipes.getAmount(stack);
while(stack.stackSize >= amount) {
ItemStack entityStack = stack.copy();
entityStack.stackSize = amount;
stack.stackSize -= amount;
EntityMovingItem item = new EntityMovingItem(worldObj);
item.setItemStack(entityStack);
item.setPosition(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5);
worldObj.spawnEntityInWorld(item);
}
}
for(int i = 0; i < 9; i++) if(slots[i] != null && slots[i].stackSize <= 0) slots[i] = null;
if(markDirty) this.markDirty();
}
}
public static Comparator<ItemStack> stackSizeComparator = new Comparator<ItemStack>() {
@Override
public int compare(ItemStack o1, ItemStack o2) {
return (int) Math.signum(o1.stackSize - o2.stackSize);
}
};
@Override
public boolean canExtractItem(int slot, ItemStack stack, int side) {
return slot >= 9;
}
@Override
public boolean isItemValidForSlot(int i, ItemStack stack) {
return i <= 8 && CrystallizerRecipes.getAmount(stack) >= 1;
}
@Override
public int[] getAccessibleSlotsFromSide(int side) {
return new int[] { 0, 1, 2, 3, 4, 5, 6 ,7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
private final Random dropRandom = new Random();
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
TileEntity tile = world.getTileEntity(x, y, z);
if(tile instanceof IInventory) {
IInventory battery = (IInventory) tile;
for(int i = 0; i < battery.getSizeInventory(); ++i) {
ItemStack itemstack = battery.getStackInSlot(i);
if(itemstack != null) {
float f = this.dropRandom.nextFloat() * 0.8F + 0.1F;
float f1 = this.dropRandom.nextFloat() * 0.8F + 0.1F;
float f2 = this.dropRandom.nextFloat() * 0.8F + 0.1F;
while(itemstack.stackSize > 0) {
int j1 = this.dropRandom.nextInt(21) + 10;
if(j1 > itemstack.stackSize) j1 = itemstack.stackSize;
itemstack.stackSize -= j1;
EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
if(itemstack.hasTagCompound()) entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy());
float f3 = 0.05F;
entityitem.motionX = (float) this.dropRandom.nextGaussian() * f3;
entityitem.motionY = (float) this.dropRandom.nextGaussian() * f3 + 0.2F;
entityitem.motionZ = (float) this.dropRandom.nextGaussian() * f3;
world.spawnEntityInWorld(entityitem);
}
}
}
world.func_147453_f(x, y, z, block);
}
super.breakBlock(world, x, y, z, block, meta);
}
}

View File

@ -33,6 +33,7 @@ public class WorldConfig {
public static int bedrockOilSpawn = 200;
public static int meteoriteSpawn = 500;
public static boolean newBedrockOres = true;
public static int bedrockIronSpawn = 100;
public static int bedrockCopperSpawn = 200;
public static int bedrockBoraxSpawn = 50;
@ -154,6 +155,7 @@ public class WorldConfig {
bedrockOilSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.22_bedrockOilSpawnRate", "Spawns a bedrock oil node every nTH chunk", 200);
meteoriteSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.23_meteoriteSpawnRate", "Spawns a fallen meteorite every nTH chunk", 200);
newBedrockOres = CommonConfig.createConfigBool(config, CATEGORY_OREGEN, "2.NB_newBedrockOres", "Enables the newer genreric bedrock ores", true);
bedrockIronSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B00_bedrockIronWeight", "Spawn weight for iron bedrock ore", 100);
bedrockCopperSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B01_bedrockCopperWeight", "Spawn weight for copper bedrock ore", 200);
bedrockBoraxSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B02_bedrockBoraxWeight", "Spawn weight for borax bedrock ore", 50);

View File

@ -33,6 +33,7 @@ public class PowderRecipes {
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_semtex_mix, 1), new Object[] { ModItems.solid_fuel, ModItems.ballistite, KNO.dust() });
CraftingManager.addShapelessAuto(new ItemStack(Items.clay_ball, 4), new Object[] { KEY_SAND, ModItems.dust, ModItems.dust, Fluids.WATER.getDict(1_000) });
CraftingManager.addShapelessAuto(new ItemStack(Items.clay_ball, 4), new Object[] { Blocks.clay }); //clay uncrafting because placing and breaking it isn't worth anyone's time
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_cement, 4), new Object[] { LIMESTONE.dust(), Items.clay_ball, Items.clay_ball, Items.clay_ball });
//Other
CraftingManager.addShapelessAuto(new ItemStack(ModItems.ingot_steel_dusted, 1), new Object[] { STEEL.ingot(), COAL.dust() });
@ -67,6 +68,7 @@ public class PowderRecipes {
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_flux, 2), new Object[] { COAL.dust(), KEY_SAND });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_flux, 4), new Object[] { F.dust(), KEY_SAND });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_flux, 8), new Object[] { PB.dust(), S.dust(), KEY_SAND });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_flux, 12), new Object[] { LIMESTONE.dust(), KEY_SAND });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_flux, 12), new Object[] { CA.dust(), KEY_SAND });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_flux, 16), new Object[] { BORAX.dust(), KEY_SAND });

View File

@ -131,7 +131,7 @@ public class ToolRecipes {
CraftingManager.addShapelessAuto(new ItemStack(ModBlocks.geiger), new Object[] { ModItems.geiger_counter });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.digamma_diagnostic), new Object[] { ModItems.geiger_counter, PO210.billet(), ASBESTOS.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pollution_detector, 1), new Object[] { "SFS", "SCS", " S ", 'S', STEEL.plate(), 'F', ModItems.filter_coal, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.ore_density_scanner, 1), new Object[] { "VVV", "CSC", "GGG", " S ", 'V', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR), 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_CHASSIS), 'G', GOLD.plate() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.ore_density_scanner, 1), new Object[] { "VVV", "CSC", "GGG", 'V', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CAPACITOR), 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_CHASSIS), 'G', GOLD.plate() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.defuser, 1), new Object[] { " PS", "P P", " P ", 'P', ANY_PLASTIC.ingot(), 'S', STEEL.plate() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.coltan_tool, 1), new Object[] { "ACA", "CXC", "ACA", 'A', ALLOY.ingot(), 'C', CINNABAR.crystal(), 'X', Items.compass });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.reacher, 1), new Object[] { "BIB", "P P", "B B", 'B', W.bolt(), 'I', W.ingot(), 'P', ANY_RUBBER.ingot() });

View File

@ -4,8 +4,11 @@ import com.hbm.entity.logic.IChunkLoader;
import com.hbm.inventory.FluidStack;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.items.ModItems;
import com.hbm.items.tool.ItemDrone;
import com.hbm.main.MainRegistry;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
@ -29,6 +32,30 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory,
super(world);
}
@Override
public boolean hitByEntity(Entity attacker) {
if(attacker instanceof EntityPlayer && !worldObj.isRemote) {
this.setDead();
for (ItemStack stack : slots) {
if(stack != null)
this.entityDropItem(stack, 1F);
}
int meta = 0;
//whether it is an express drone
if(this.dataWatcher.getWatchableObjectByte(11) == 1)
meta = 2;
if(chunkLoading)
meta += 1;
this.entityDropItem(new ItemStack(ModItems.drone, 1, meta), 1F);
}
return false;
}
@Override
protected void entityInit() {
super.entityInit();
@ -53,7 +80,7 @@ public class EntityDeliveryDrone extends EntityDroneBase implements IInventory,
@Override
public double getSpeed() {
return this.dataWatcher.getWatchableObjectByte(11) == 1 ? 0.375 : 0.125;
return this.dataWatcher.getWatchableObjectByte(11) == 1 ? 0.375 * 3 : 0.375;
}
@Override

View File

@ -112,7 +112,9 @@ public abstract class EntityDroneBase extends Entity {
this.motionZ = dist.zCoord * speed;
}
}
if(isCollidedHorizontally){
motionY += 1;
}
this.moveEntity(motionX, motionY, motionZ);
}
}

View File

@ -13,10 +13,13 @@ import com.hbm.tileentity.network.TileEntityDroneProvider;
import com.hbm.tileentity.network.TileEntityDroneRequester;
import com.hbm.util.fauxpointtwelve.BlockPos;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
@ -30,6 +33,25 @@ public class EntityRequestDrone extends EntityDroneBase {
UNLOAD, DOCK
}
@Override
public void setTarget(double x, double y, double z) {
this.targetX = x;
this.targetY = y + 1;
this.targetZ = z;
}
@Override
public boolean hitByEntity(Entity attacker) {
if(attacker instanceof EntityPlayer && !worldObj.isRemote) {
this.setDead();
if(heldItem != null)
this.entityDropItem(heldItem, 1F);
this.entityDropItem(new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()), 1F);
}
return false;
}
public EntityRequestDrone(World world) {
super(world);
}
@ -61,78 +83,114 @@ public class EntityRequestDrone extends EntityDroneBase {
} else if(next instanceof AStack && heldItem == null) {
AStack aStack = (AStack) next;
TileEntity tile = worldObj.getTileEntity((int) Math.floor(posX), (int) Math.floor(posY - 1), (int) Math.floor(posZ));
if(tile instanceof TileEntityDroneProvider) {
TileEntityDroneProvider provider = (TileEntityDroneProvider) tile;
for(int i = 0; i < provider.slots.length; i++) {
ItemStack stack = provider.slots[i];
if(stack != null && aStack.matchesRecipe(stack, true)) {
this.heldItem = stack.copy();
this.setAppearance(1);
worldObj.playSoundEffect(posX, posY, posZ, "hbm:item.unpack", 0.5F, 0.75F);
provider.slots[i] = null;
provider.markDirty();
break;
//to make DAMN sure this fuckin idiot doesnt miss the dock
Vec3 pos = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
Vec3 nextPos = Vec3.createVectorHelper(this.posX, this.posY - 4, this.posZ);
MovingObjectPosition mop = this.worldObj.rayTraceBlocks(pos, nextPos);
if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
TileEntity tile = worldObj.getTileEntity(mop.blockX, mop.blockY, mop.blockZ);
if (tile instanceof TileEntityDroneProvider) {
TileEntityDroneProvider provider = (TileEntityDroneProvider) tile;
for (int i = 0; i < provider.slots.length; i++) {
ItemStack stack = provider.slots[i];
if (stack != null && aStack.matchesRecipe(stack, true)) {
this.heldItem = stack.copy();
this.setAppearance(1);
worldObj.playSoundEffect(posX, posY, posZ, "hbm:item.unpack", 0.5F, 0.75F);
provider.slots[i] = null;
provider.markDirty();
break;
}
}
}
}
nextActionTimer = 5;
} else if(next == DroneProgram.UNLOAD && this.heldItem != null) {
TileEntity tile = worldObj.getTileEntity((int) Math.floor(posX), (int) Math.floor(posY - 1), (int) Math.floor(posZ));
if(tile instanceof TileEntityDroneRequester) {
TileEntityDroneRequester requester = (TileEntityDroneRequester) tile;
for(int i = 9; i < 18; i++) {
ItemStack stack = requester.slots[i];
if(stack != null && stack.getItem() == heldItem.getItem() && stack.getItemDamage() == heldItem.getItemDamage()) {
int toTransfer = Math.min(stack.getMaxStackSize() - stack.stackSize, heldItem.stackSize);
requester.slots[i].stackSize += toTransfer;
this.heldItem.stackSize -= toTransfer;
Vec3 pos = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
Vec3 nextPos = Vec3.createVectorHelper(this.posX, this.posY - 4, this.posZ);
MovingObjectPosition mop = this.worldObj.rayTraceBlocks(pos, nextPos);
if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
TileEntity tile = worldObj.getTileEntity(mop.blockX, mop.blockY, mop.blockZ);
if (tile instanceof TileEntityDroneRequester) {
TileEntityDroneRequester requester = (TileEntityDroneRequester) tile;
for (int i = 9; i < 18; i++) {
ItemStack stack = requester.slots[i];
if (stack != null && stack.getItem() == heldItem.getItem() && stack.getItemDamage() == heldItem.getItemDamage()) {
int toTransfer = Math.min(stack.getMaxStackSize() - stack.stackSize, heldItem.stackSize);
requester.slots[i].stackSize += toTransfer;
this.heldItem.stackSize -= toTransfer;
}
}
}
if(this.heldItem.stackSize <= 0) this.heldItem = null;
if(this.heldItem != null) for(int i = 9; i < 18; i++) {
if(requester.slots[i] == null) {
requester.slots[i] = this.heldItem.copy();
this.heldItem = null;
break;
if (this.heldItem.stackSize <= 0) this.heldItem = null;
if (this.heldItem != null) for (int i = 9; i < 18; i++) {
if (requester.slots[i] == null) {
requester.slots[i] = this.heldItem.copy();
this.heldItem = null;
break;
}
}
if (this.heldItem == null) {
this.setAppearance(0);
worldObj.playSoundEffect(posX, posY, posZ, "hbm:item.unpack", 0.5F, 0.75F);
}
requester.markDirty();
}
if(this.heldItem == null) {
this.setAppearance(0);
worldObj.playSoundEffect(posX, posY, posZ, "hbm:item.unpack", 0.5F, 0.75F);
}
requester.markDirty();
}
nextActionTimer = 5;
} else if(next == DroneProgram.DOCK) {
TileEntity tile = worldObj.getTileEntity((int) Math.floor(posX), (int) Math.floor(posY - 1), (int) Math.floor(posZ));
if(tile instanceof TileEntityDroneDock) {
TileEntityDroneDock dock = (TileEntityDroneDock) tile;
for(int i = 0; i < dock.slots.length; i++) {
if(dock.slots[i] == null) {
this.setDead();
dock.slots[i] = new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal());
this.worldObj.playSoundEffect(dock.xCoord + 0.5, dock.yCoord + 0.5, dock.zCoord + 0.5, "hbm:block.storageClose", 2.0F, 1.0F);
break;
Vec3 pos = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
Vec3 nextPos = Vec3.createVectorHelper(this.posX, this.posY - 4, this.posZ);
MovingObjectPosition mop = this.worldObj.rayTraceBlocks(pos, nextPos);
if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
TileEntity tile = worldObj.getTileEntity(mop.blockX, mop.blockY, mop.blockZ);
if (tile instanceof TileEntityDroneDock) {
TileEntityDroneDock dock = (TileEntityDroneDock) tile;
ItemStack drone = new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal());
for (int i = 0; i < dock.slots.length; i++) {
if (dock.slots[i] == null) {
this.setDead();
if(heldItem != null){
if(i != 9 && dock.slots[i + 1] == null){
dock.slots[i + 1] = heldItem.copy();
}
}
dock.slots[i] = drone.copy();
this.worldObj.playSoundEffect(dock.xCoord + 0.5, dock.yCoord + 0.5, dock.zCoord + 0.5, "hbm:block.storageClose", 2.0F, 1.0F);
break;
} else if (dock.slots[i].isItemEqual(drone) && dock.slots[i].stackSize < 64){
this.setDead();
if(heldItem != null){
if(i != 9 && dock.slots[i + 1] == null){
dock.slots[i + 1] = heldItem.copy();
}
}
dock.slots[i].stackSize++;
this.worldObj.playSoundEffect(dock.xCoord + 0.5, dock.yCoord + 0.5, dock.zCoord + 0.5, "hbm:block.storageClose", 2.0F, 1.0F);
break;
}
}
}
}
if(!this.isDead) {
if (!this.isDead) {
this.setDead();
if(heldItem != null)
this.entityDropItem(heldItem, 1F);
this.entityDropItem(new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()), 1F);
}
}
}
}
@ -141,7 +199,7 @@ public class EntityRequestDrone extends EntityDroneBase {
@Override
public double getSpeed() {
return 0.5D;
return 0.6D;
}
@Override

View File

@ -60,7 +60,7 @@ public class EntityNukeExplosionMK5 extends EntityExplosionChunkloading {
((EntityPlayer)player).triggerAchievement(MainRegistry.achManhattan);
}
if(!worldObj.isRemote && fallout && explosion != null && this.ticksExisted < 10) {
if(!worldObj.isRemote && fallout && explosion != null && this.ticksExisted < 10 && strength >= 75) {
radiate(2_500_000F / (this.ticksExisted * 5 + 1), this.length * 2);
}

View File

@ -229,6 +229,7 @@ public class OreDictManager {
public static final DictFrame VOLCANIC = new DictFrame("Volcanic");
public static final DictFrame HEMATITE = new DictFrame("Hematite");
public static final DictFrame MALACHITE = new DictFrame("Malachite");
public static final DictFrame LIMESTONE = new DictFrame("Limestone");
public static final DictFrame SLAG = new DictFrame("Slag");
/*
* HAZARDS, MISC
@ -427,6 +428,7 @@ public class OreDictManager {
VOLCANIC .gem(gem_volcanic) .ore(DictFrame.fromOne(ore_basalt, EnumBasaltOreType.GEM));
HEMATITE .ore(fromOne(stone_resource, EnumStoneType.HEMATITE));
MALACHITE .ore(fromOne(stone_resource, EnumStoneType.MALACHITE));
LIMESTONE .dust(powder_limestone) .ore(fromOne(stone_resource, EnumStoneType.LIMESTONE));
SLAG .block(block_slag);
/*

View File

@ -1,12 +1,17 @@
package com.hbm.inventory.container;
import com.hbm.inventory.SlotCraftingOutput;
import com.hbm.items.ModItems;
import com.hbm.items.machine.IItemFluidIdentifier;
import com.hbm.items.machine.ItemMachineUpgrade;
import com.hbm.tileentity.machine.TileEntityMachineOreSlopper;
import api.hbm.energymk2.IBatteryItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerOreSlopper extends Container {
@ -29,8 +34,8 @@ public class ContainerOreSlopper extends Container {
this.addSlotToContainer(new SlotCraftingOutput(player.player, slopper, 7, 134, 54));
this.addSlotToContainer(new SlotCraftingOutput(player.player, slopper, 8, 152, 54));
//Upgrades
this.addSlotToContainer(new Slot(slopper, 0, 62, 72));
this.addSlotToContainer(new Slot(slopper, 0, 80, 72));
this.addSlotToContainer(new Slot(slopper, 9, 62, 72));
this.addSlotToContainer(new Slot(slopper, 10, 80, 72));
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {
@ -43,6 +48,52 @@ public class ContainerOreSlopper extends Container {
}
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int par2) {
ItemStack var3 = null;
Slot var4 = (Slot) this.inventorySlots.get(par2);
if(var4 != null && var4.getHasStack()) {
ItemStack var5 = var4.getStack();
var3 = var5.copy();
if(par2 <= 10) {
if(!this.mergeItemStack(var5, 11, this.inventorySlots.size(), true)) {
return null;
}
} else {
if(var3.getItem() == ModItems.bedrock_ore_base) {
if(!this.mergeItemStack(var5, 2, 3, false)) {
return null;
}
} else if(var3.getItem() instanceof ItemMachineUpgrade) {
if(!this.mergeItemStack(var5, 9, 11, false)) {
return null;
}
} else if(var3.getItem() instanceof IItemFluidIdentifier) {
if(!this.mergeItemStack(var5, 1, 2, false)) {
return null;
}
} else if(var3.getItem() instanceof IBatteryItem || var3.getItem() == ModItems.battery_creative) {
if(!this.mergeItemStack(var5, 0, 1, false)) {
return null;
}
} else {
return null;
}
}
if(var5.stackSize == 0) {
var4.putStack((ItemStack) null);
} else {
var4.onSlotChanged();
}
}
return var3;
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return slopper.isUseableByPlayer(player);

View File

@ -494,6 +494,7 @@ public class Fluids {
metaOrder.add(SEEDSLURRY);
metaOrder.add(COLLOID);
metaOrder.add(VITRIOL);
metaOrder.add(SLOP);
metaOrder.add(IONGEL);
metaOrder.add(PEROXIDE);
metaOrder.add(SULFURIC_ACID);

View File

@ -23,12 +23,21 @@ public class GUIOreSlopper extends GuiInfoContainer {
this.xSize = 176;
this.ySize = 204;
}
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
super.drawScreen(mouseX, mouseY, f);
slopper.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 18, 34, 52);
slopper.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 116, guiTop + 18, 16, 52);
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 18, 16, 52, slopper.power, slopper.maxPower);
}
@Override
protected void drawGuiContainerForegroundLayer( int i, int j) {
String name = this.slopper.hasCustomInventoryName() ? this.slopper.getInventoryName() : I18n.format(this.slopper.getInventoryName());
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2 - 9, 6, 4210752);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
}
@ -37,5 +46,17 @@ public class GUIOreSlopper extends GuiInfoContainer {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
int i = (int) (slopper.progress * 35);
drawTexturedModalRect(guiLeft + 62, guiTop + 52 - i, 176, 34 - i, 34, i);
int j = (int) (slopper.power * 52 / slopper.maxPower);
drawTexturedModalRect(guiLeft + 8, guiTop + 70 - j, 176, 86 - j, 16, j);
if(slopper.power >= slopper.consumption)
drawTexturedModalRect(guiLeft + 12, guiTop + 4, 202, 34, 9, 12);
slopper.tanks[0].renderTank(guiLeft + 26, guiTop + 70, this.zLevel, 16, 52);
slopper.tanks[1].renderTank(guiLeft + 116, guiTop + 70, this.zLevel, 16, 52);
}
}

View File

@ -466,6 +466,13 @@ public class AssemblerRecipes extends SerializableRecipe {
new ComparableStack(ModItems.motor, 2),
new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG)
}, 300);
makeRecipe(new ComparableStack(ModBlocks.machine_ore_slopper, 1), new AStack[] {
new OreDictStack(STEEL.plateCast(), 6),
new OreDictStack(TI.plate(), 8),
new OreDictStack(CU.pipe(), 3),
new ComparableStack(ModItems.motor, 3),
new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ANALOG)
}, 200);
makeRecipe(new ComparableStack(ModItems.drillbit, 1, EnumDrillType.STEEL.ordinal()), new AStack[] {
new OreDictStack(STEEL.ingot(), 12),
new OreDictStack(W.ingot(), 4)

View File

@ -184,12 +184,14 @@ public class ChemplantRecipes extends SerializableRecipe {
.outputItems(new ItemStack(ModItems.plate_kevlar, 4)));
recipes.add(new ChemRecipe(55, "CONCRETE", 100)
.inputItems(
new ComparableStack(ModItems.powder_cement, 1),
new ComparableStack(Blocks.gravel, 8),
new OreDictStack(KEY_SAND, 8))
.inputFluids(new FluidStack(Fluids.WATER, 2000))
.outputItems(new ItemStack(ModBlocks.concrete_smooth, 16)));
recipes.add(new ChemRecipe(56, "CONCRETE_ASBESTOS", 100)
.inputItems(
new ComparableStack(ModItems.powder_cement, 1),
new ComparableStack(Blocks.gravel, 2),
new OreDictStack(KEY_SAND, 2),
(GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleChemsitry) ?
@ -199,9 +201,10 @@ public class ChemplantRecipes extends SerializableRecipe {
.outputItems(new ItemStack(ModBlocks.concrete_asbestos, 16)));
recipes.add(new ChemRecipe(79, "DUCRETE", 150)
.inputItems(
new ComparableStack(ModItems.powder_cement, 4),
new ComparableStack(Blocks.gravel, 2),
new OreDictStack(KEY_SAND, 8),
new OreDictStack(U238.billet(), 2),
new ComparableStack(Items.clay_ball, 4))
new OreDictStack(U238.billet(), 2))
.inputFluids(new FluidStack(Fluids.WATER, 2000))
.outputItems(new ItemStack(ModBlocks.ducrete_smooth, 8)));
recipes.add(new ChemRecipe(57, "SOLID_FUEL", 200)
@ -409,7 +412,7 @@ public class ChemplantRecipes extends SerializableRecipe {
.outputFluids(new FluidStack(1000, Fluids.LPG)));
recipes.add(new ChemRecipe(34, "OIL_SAND", 200)
.inputItems(new ComparableStack(ModBlocks.ore_oil_sand, 16), new OreDictStack(ANY_TAR.any(), 1))
.outputItems(new ItemStack(Blocks.sand, 4), new ItemStack(Blocks.sand, 4), new ItemStack(Blocks.sand, 4), new ItemStack(Blocks.sand, 4))
.outputItems(new ItemStack(Blocks.sand, 16))
.outputFluids(new FluidStack(1000, Fluids.BITUMEN)));
recipes.add(new ChemRecipe(35, "ASPHALT", 100)
.inputItems(new ComparableStack(Blocks.gravel, 2), new ComparableStack(Blocks.sand, 6))

View File

@ -64,6 +64,8 @@ public class CokerRecipes extends SerializableRecipe {
registerRecipe(CALCIUM_SOLUTION, 125, new ItemStack(ModItems.powder_calcium), new FluidStack(SPENTSTEAM, 100));
//only cokable gas to extract sulfur content
registerRecipe(SOURGAS, 250, new ItemStack(ModItems.sulfur), new FluidStack(GAS_COKER, 150));
registerRecipe(SLOP, 1000, new ItemStack(ModItems.powder_limestone), new FluidStack(COLLOID, 250));
registerRecipe(VITRIOL, 4000, new ItemStack(ModItems.powder_iron), new FluidStack(SULFURIC_ACID, 500));
}
private static void registerAuto(FluidType fluid, FluidType type) {

View File

@ -54,6 +54,7 @@ public class CombinationRecipes extends SerializableRecipe {
recipes.put(SODALITE.gem(), new Pair(new ItemStack(ModItems.powder_sodium), new FluidStack(Fluids.CHLORINE, 100)));
recipes.put(new ComparableStack(DictFrame.fromOne(ModBlocks.stone_resource, EnumStoneType.BAUXITE)), new Pair(new ItemStack(ModItems.ingot_aluminium, 2), new FluidStack(Fluids.REDMUD, 250)));
recipes.put(NA.dust(), new Pair(null, new FluidStack(Fluids.SODIUM, 100)));
recipes.put(LIMESTONE.dust(), new Pair(new ItemStack(ModItems.powder_calcium), new FluidStack(Fluids.CARBONDIOXIDE, 50)));
recipes.put(KEY_LOG, new Pair(new ItemStack(Items.coal, 1 ,1), new FluidStack(Fluids.WOODOIL, 250)));
recipes.put(KEY_SAPLING, new Pair(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.WOOD), new FluidStack(Fluids.WOODOIL, 50)));

View File

@ -46,6 +46,7 @@ public class CrystallizerRecipes extends SerializableRecipe {
//'Object' is either a ComparableStack or the key for the ore dict
private static HashMap<Pair<Object, FluidType>, CrystallizerRecipe> recipes = new HashMap();
private static HashMap<Object, Integer> amounts = new HashMap(); // for use in the partitioner
@Override
public void registerDefaults() {
@ -155,17 +156,20 @@ public class CrystallizerRecipes extends SerializableRecipe {
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY_NOSULFURIC, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY_RAD, type), bedrock), new FluidStack(Fluids.RADIOSOLVENT, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY_NOSOLVENT, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY_RAD, type), bedrock), new FluidStack(Fluids.RADIOSOLVENT, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_BYPRODUCT, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_WASHED, type), washing), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ROASTED, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_WASHED, type), washing), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ARC, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_WASHED, type), washing), new FluidStack(Fluids.WATER, 250));
int sulf = 4;
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_BYPRODUCT, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_WASHED, type), washing).setReq(sulf), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ROASTED, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_WASHED, type), washing).setReq(sulf), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ARC, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_WASHED, type), washing).setReq(sulf), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_BYPRODUCT, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_WASHED, type), washing), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_ROASTED, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_WASHED, type), washing), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_ARC, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_WASHED, type), washing), new FluidStack(Fluids.WATER, 250));
int solv = 12;
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_BYPRODUCT, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_WASHED, type), washing).setReq(solv), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_ROASTED, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_WASHED, type), washing).setReq(solv), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_ARC, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_WASHED, type), washing).setReq(solv), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_BYPRODUCT, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.RAD_WASHED, type), washing), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_ROASTED, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.RAD_WASHED, type), washing), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_ARC, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.RAD_WASHED, type), washing), new FluidStack(Fluids.WATER, 250));
int rad = 24;
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_BYPRODUCT, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.RAD_WASHED, type), washing).setReq(rad), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_ROASTED, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.RAD_WASHED, type), washing).setReq(rad), new FluidStack(Fluids.WATER, 250));
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_ARC, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.RAD_WASHED, type), washing).setReq(rad), new FluidStack(Fluids.WATER, 250));
FluidStack primary = new FluidStack(Fluids.HYDROGEN, 250);
registerRecipe(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY, type)), new CrystallizerRecipe(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY_FIRST, type), bedrock), primary);
@ -238,22 +242,41 @@ public class CrystallizerRecipes extends SerializableRecipe {
ComparableStack comp = new ComparableStack(stack.getItem(), 1, stack.getItemDamage());
Pair compKey = new Pair(comp, type);
if(recipes.containsKey(compKey))
return recipes.get(compKey);
if(recipes.containsKey(compKey)) return recipes.get(compKey);
String[] dictKeys = comp.getDictKeys();
for(String key : dictKeys) {
Pair dictKey = new Pair(key, type);
if(recipes.containsKey(dictKey))
return recipes.get(dictKey);
if(recipes.containsKey(dictKey)) return recipes.get(dictKey);
}
comp.meta = OreDictionary.WILDCARD_VALUE;
if(recipes.containsKey(compKey)) return recipes.get(compKey);
return null;
}
public static int getAmount(ItemStack stack) {
if(stack == null || stack.getItem() == null)
return 0;
ComparableStack comp = new ComparableStack(stack.getItem(), 1, stack.getItemDamage());
if(amounts.containsKey(comp)) return amounts.get(comp);
String[] dictKeys = comp.getDictKeys();
for(String key : dictKeys) {
if(amounts.containsKey(key)) return amounts.get(key);
}
comp.meta = OreDictionary.WILDCARD_VALUE;
if(amounts.containsKey(comp)) return amounts.get(comp);
return 0;
}
public static HashMap getRecipes() {
@ -289,6 +312,7 @@ public class CrystallizerRecipes extends SerializableRecipe {
public static void registerRecipe(Object input, CrystallizerRecipe recipe, FluidStack stack) {
recipe.acidAmount = stack.fill;
recipes.put(new Pair(input, stack.type), recipe);
amounts.put(input, recipe.itemAmount);
}
public static class CrystallizerRecipe {
@ -362,6 +386,7 @@ public class CrystallizerRecipes extends SerializableRecipe {
@Override
public void deleteRecipes() {
recipes.clear();
amounts.clear();
}
@Override

View File

@ -26,6 +26,7 @@ public class ElectrolyserFluidRecipes extends SerializableRecipe {
public void registerDefaults() {
recipes.put(Fluids.WATER, new ElectrolysisRecipe(2_000, new FluidStack(Fluids.HYDROGEN, 200), new FluidStack(Fluids.OXYGEN, 200)));
recipes.put(Fluids.HEAVYWATER, new ElectrolysisRecipe(2_000, new FluidStack(Fluids.DEUTERIUM, 200), new FluidStack(Fluids.OXYGEN, 200)));
recipes.put(Fluids.VITRIOL, new ElectrolysisRecipe(1_000, new FluidStack(Fluids.SULFURIC_ACID, 500), new FluidStack(Fluids.CHLORINE, 500), new ItemStack(ModItems.powder_iron), new ItemStack(ModItems.ingot_mercury)));
recipes.put(Fluids.POTASSIUM_CHLORIDE, new ElectrolysisRecipe(250, new FluidStack(Fluids.CHLORINE, 125), new FluidStack(Fluids.NONE, 0), new ItemStack(ModItems.dust)));
recipes.put(Fluids.CALCIUM_CHLORIDE, new ElectrolysisRecipe(250, new FluidStack(Fluids.CHLORINE, 125), new FluidStack(Fluids.CALCIUM_SOLUTION, 125)));

View File

@ -54,6 +54,7 @@ public class LiquefactionRecipes extends SerializableRecipe {
recipes.put(new ComparableStack(Blocks.packed_ice), new FluidStack(1000, Fluids.WATER));
recipes.put(new ComparableStack(Items.ender_pearl), new FluidStack(100, Fluids.ENDERJUICE));
recipes.put(new ComparableStack(ModItems.pellet_charged), new FluidStack(4000, Fluids.HELIUM4));
recipes.put(new ComparableStack(ModBlocks.ore_oil_sand), new FluidStack(100, Fluids.BITUMEN));
recipes.put(new ComparableStack(Items.sugar), new FluidStack(100, Fluids.ETHANOL));
recipes.put(new ComparableStack(ModBlocks.plant_flower, 1, 3), new FluidStack(150, Fluids.ETHANOL));
@ -67,10 +68,6 @@ public class LiquefactionRecipes extends SerializableRecipe {
recipes.put(new ComparableStack(Blocks.tallgrass, 1, 1), new FluidStack(100, Fluids.SEEDSLURRY));
recipes.put(new ComparableStack(Blocks.tallgrass, 1, 2), new FluidStack(100, Fluids.SEEDSLURRY));
recipes.put(new ComparableStack(Blocks.vine), new FluidStack(100, Fluids.SEEDSLURRY));
//recipes.put(new ComparableStack(ModItems.solid_fuel_bf), new FluidStack(250, Fluids.BALEFIRE));
//TODO: more recipes as the crack oil derivatives are added
}
public static FluidStack getOutput(ItemStack stack) {

View File

@ -98,6 +98,13 @@ public class SILEXRecipes {
recipes.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.DEATH.getID()), new SILEXRecipe(1000, 1000, 4)
.addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_impure_osmiridium), 1))
);
recipes.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.VITRIOL.getID()), new SILEXRecipe(1000, 1000, EnumWavelengths.IR)
.addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_bromine), 5))
.addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_iodine), 5))
.addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_iron), 5))
.addOut(new WeightedRandomObject(new ItemStack(ModItems.sulfur), 15))
);
for(int i = 0; i < 5; i++) {

View File

@ -171,7 +171,7 @@ public class ShredderRecipes extends SerializableRecipe {
ShredderRecipes.setRecipe(Blocks.clay, new ItemStack(Items.clay_ball, 4));
ShredderRecipes.setRecipe(Blocks.hardened_clay, new ItemStack(Items.clay_ball, 4));
ShredderRecipes.setRecipe(Blocks.tnt, new ItemStack(Items.gunpowder, Compat.isModLoaded(Compat.MOD_GT6) ? 4 : 5));
ShredderRecipes.setRecipe(DictFrame.fromOne(ModBlocks.stone_resource, EnumStoneType.LIMESTONE), new ItemStack(ModItems.powder_calcium));
ShredderRecipes.setRecipe(DictFrame.fromOne(ModBlocks.stone_resource, EnumStoneType.LIMESTONE), new ItemStack(ModItems.powder_limestone, 4));
ShredderRecipes.setRecipe(ModBlocks.stone_gneiss, new ItemStack(ModItems.powder_lithium_tiny, 1));
ShredderRecipes.setRecipe(ModItems.powder_lapis, new ItemStack(ModItems.powder_cobalt_tiny, 1));
ShredderRecipes.setRecipe(ModItems.fragment_neodymium, new ItemStack(ModItems.powder_neodymium_tiny, 1));
@ -208,6 +208,7 @@ public class ShredderRecipes extends SerializableRecipe {
ShredderRecipes.setRecipe(ModBlocks.machine_well, new ItemStack(ModItems.powder_steel, 32));
ShredderRecipes.setRecipe(DictFrame.fromOne(ModItems.chunk_ore, EnumChunkType.RARE), new ItemStack(ModItems.powder_desh_mix));
ShredderRecipes.setRecipe(Blocks.sand, new ItemStack(ModItems.dust, 2));
ShredderRecipes.setRecipe(ModBlocks.block_slag, new ItemStack(ModItems.powder_cement, 4));
List<ItemStack> logs = OreDictionary.getOres("logWood");
List<ItemStack> planks = OreDictionary.getOres("plankWood");
@ -284,6 +285,7 @@ public class ShredderRecipes extends SerializableRecipe {
ShredderRecipes.setRecipe(ModBlocks.steel_grate, new ItemStack(ModItems.powder_steel_tiny, 3));
ShredderRecipes.setRecipe(ModItems.pipes_steel, new ItemStack(ModItems.powder_steel, 27));
ShredderRecipes.setRecipe(ModBlocks.machine_fluidtank, new ItemStack(ModItems.powder_steel, 16));
ShredderRecipes.setRecipe(new ItemStack(ModItems.bedrock_ore, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(Blocks.gravel));
/* Sellafite scrapping */
ShredderRecipes.setRecipe(ModBlocks.sellafield_slaked, new ItemStack(Blocks.gravel));

View File

@ -9,6 +9,7 @@ import java.util.Map.Entry;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.stream.JsonWriter;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.FluidStack;
import com.hbm.inventory.OreDictManager.DictFrame;
import com.hbm.inventory.fluid.FluidType;
@ -69,6 +70,7 @@ public class SolidificationRecipes extends SerializableRecipe {
registerRecipe(WATZ, 1000, ModItems.ingot_mud);
registerRecipe(REDMUD, 1000, Items.iron_ingot);
registerRecipe(SODIUM, 100, ModItems.powder_sodium);
registerRecipe(SLOP, 250, ModBlocks.ore_oil_sand);
registerRecipe(OIL, SF_OIL, DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRUDE));
registerRecipe(CRACKOIL, SF_CRACK, DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRACK));

View File

@ -116,6 +116,8 @@ public class ModItems {
public static Item coal_infernal;
public static Item cinnebar;
public static Item powder_ash;
public static Item powder_limestone;
public static Item powder_cement;
public static Item niter;
public static Item ingot_copper;
@ -2757,6 +2759,8 @@ public class ModItems {
coal_infernal = new Item().setUnlocalizedName("coal_infernal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coal_infernal");
cinnebar = new Item().setUnlocalizedName("cinnebar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":cinnebar");
powder_ash = new ItemEnumMulti(EnumAshType.class, true, true).setUnlocalizedName("powder_ash").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_ash");
powder_limestone = new Item().setUnlocalizedName("powder_limestone").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_limestone");
powder_cement = new Item().setUnlocalizedName("powder_cement").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cement");
ingot_gh336 = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("ingot_gh336").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_gh336");
nugget_gh336 = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("nugget_gh336").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_gh336");
@ -5918,6 +5922,8 @@ public class ModItems {
GameRegistry.registerItem(dust_tiny, dust_tiny.getUnlocalizedName());
GameRegistry.registerItem(fallout, fallout.getUnlocalizedName());
GameRegistry.registerItem(powder_ash, powder_ash.getUnlocalizedName());
GameRegistry.registerItem(powder_limestone, powder_limestone.getUnlocalizedName());
GameRegistry.registerItem(powder_cement, powder_cement.getUnlocalizedName());
//Powders
GameRegistry.registerItem(powder_fire, powder_fire.getUnlocalizedName());

View File

@ -152,20 +152,32 @@ public class HbmWorldGen implements IWorldGenerator {
DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.malachiteSpawn, 16, 6, 40, ModBlocks.stone_resource, EnumStoneType.MALACHITE.ordinal());
DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.limestoneSpawn, 12, 25, 30, ModBlocks.stone_resource, EnumStoneType.LIMESTONE.ordinal());
if(rand.nextInt(3) == 0) {
@SuppressWarnings("unchecked")
WeightedRandomGeneric<BedrockOreDefinition> item = (WeightedRandomGeneric<BedrockOreDefinition>) WeightedRandom.getRandomItem(rand, BedrockOre.weightedOres);
BedrockOreDefinition def = item.get();
if(GeneralConfig.enable528 && GeneralConfig.enable528BedrockReplacement) {
BedrockOreDefinition replacement = BedrockOre.replacements.get(def.id);
if(replacement != null) def = replacement;
if(WorldConfig.newBedrockOres) {
if(rand.nextInt(10) == 0) {
int randPosX = i + rand.nextInt(2) + 8;
int randPosZ = j + rand.nextInt(2) + 8;
BedrockOre.generate(world, randPosX, randPosZ, new ItemStack(ModItems.bedrock_ore_base), null, 0xD78A16, 1);
}
} else {
if(rand.nextInt(3) == 0) {
@SuppressWarnings("unchecked")
WeightedRandomGeneric<BedrockOreDefinition> item = (WeightedRandomGeneric<BedrockOreDefinition>) WeightedRandom.getRandomItem(rand, BedrockOre.weightedOres);
BedrockOreDefinition def = item.get();
if(GeneralConfig.enable528 && GeneralConfig.enable528BedrockReplacement) {
BedrockOreDefinition replacement = BedrockOre.replacements.get(def.id);
if(replacement != null) def = replacement;
}
int randPosX = i + rand.nextInt(2) + 8;
int randPosZ = j + rand.nextInt(2) + 8;
BedrockOre.generate(world, randPosX, randPosZ, def.stack, def.acid, def.color, def.tier);
}
int randPosX = i + rand.nextInt(2) + 8;
int randPosZ = j + rand.nextInt(2) + 8;
BedrockOre.generate(world, randPosX, randPosZ, def.stack, def.acid, def.color, def.tier);
}
for(int k = 0; k < WorldConfig.randomSpawn; k++) {
@ -388,8 +400,8 @@ public class HbmWorldGen implements IWorldGenerator {
}
if(WorldConfig.minefreq > 0 && GeneralConfig.enableMines && rand.nextInt(WorldConfig.minefreq) == 0) {
int x = i + rand.nextInt(16);
int z = j + rand.nextInt(16);
int x = i + rand.nextInt(16) + 8;
int z = j + rand.nextInt(16) + 8;
int y = world.getHeightValue(x, z);
if(world.getBlock(x, y - 1, z).canPlaceTorchOnTop(world, x, y - 1, z)) {

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 (5000)";
public static final String VERSION = "1.0.27 BETA (5012)";
//HBM's Beta Naming Convention:
//V T (X)
//V -> next release version

View File

@ -873,6 +873,7 @@ public class ClientProxy extends ServerProxy {
RenderingRegistry.registerBlockHandler(new RenderLight());
RenderingRegistry.registerBlockHandler(new RenderCRT());
RenderingRegistry.registerBlockHandler(new RenderToaster());
RenderingRegistry.registerBlockHandler(new RenderPartitioner());
RenderingRegistry.registerBlockHandler(new RenderFoundryBasin());
RenderingRegistry.registerBlockHandler(new RenderFoundryMold());
@ -1962,7 +1963,9 @@ public class ClientProxy extends ServerProxy {
held == Item.getItemFromBlock(ModBlocks.drone_crate_provider) ||
held == Item.getItemFromBlock(ModBlocks.drone_crate_requester) ||
held == Item.getItemFromBlock(ModBlocks.drone_dock) ||
held == Item.getItemFromBlock(ModBlocks.drone_waypoint_request)) {
held == Item.getItemFromBlock(ModBlocks.drone_waypoint_request) ||
held == Item.getItemFromBlock(ModBlocks.drone_waypoint) ||
held == ModItems.drone_linker) {
double mX = data.getDouble("mX");
double mY = data.getDouble("mY");
double mZ = data.getDouble("mZ");

View File

@ -980,19 +980,20 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModBlocks.crane_unboxer), new Object[] { "WWW", "WPW", "CCC", 'W', KEY_STICK, 'P', Items.shears, 'C', ModBlocks.conveyor });
addRecipeAuto(new ItemStack(ModBlocks.crane_router), new Object[] { "PIP", "ICI", "PIP", 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'I', ModItems.plate_polymer, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) });
addRecipeAuto(new ItemStack(ModBlocks.crane_splitter), new Object[] { "III", "PCP", "III", 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'I', STEEL.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) });
addRecipeAuto(new ItemStack(ModBlocks.crane_partitioner), new Object[] { " M ", "BCB", 'M', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), 'B', ModBlocks.conveyor, 'C', ModBlocks.crate_steel });
addRecipeAuto(new ItemStack(ModBlocks.machine_conveyor_press), new Object[] { "CPC", "CBC", "CCC", 'C', CU.plate(), 'P', ModBlocks.machine_epress, 'B', ModBlocks.conveyor });
addRecipeAuto(new ItemStack(ModBlocks.radar_screen), new Object[] { "PCP", "SRS", "PCP", 'P', ANY_PLASTIC.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'S', STEEL.plate(), 'R', ModItems.crt_display });
addRecipeAuto(new ItemStack(ModItems.radar_linker), new Object[] { "S", "C", "P", 'S', ModItems.crt_display, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'P', STEEL.plate() });
addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()), new Object[] { "PPP", "HCH", " B ", 'P', ANY_PLASTIC.ingot(), 'H', STEEL.shell(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), 'B', ModBlocks.crate_steel });
addRecipeAuto(new ItemStack(ModItems.drone, 2, EnumDroneType.PATROL.ordinal()), new Object[] { " P ", "HCH", " B ", 'P', ANY_PLASTIC.ingot(), 'H', STEEL.pipe(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE), 'B', STEEL.shell() });
addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_CHUNKLOADING.ordinal()), new Object[] { "E", "D", 'E', Items.ender_pearl, 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()) });
addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()), new Object[] { " P ", "KDK", " P ", 'P', TI.plateWelded(), 'K', Fluids.KEROSENE.getDict(1_000), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()) });
addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS_CHUNKLOADING.ordinal()), new Object[] { "E", "D", 'E', Items.ender_pearl, 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()) });
addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS_CHUNKLOADING.ordinal()), new Object[] { " P ", "KDK", " P ", 'P', TI.plateWelded(), 'K', Fluids.KEROSENE.getDict(1_000), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_CHUNKLOADING.ordinal()) });
addShapelessAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL.ordinal()), new Object[] { new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_CHUNKLOADING.ordinal()) });
addShapelessAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()), new Object[] { new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS_CHUNKLOADING.ordinal()) });
addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()), new Object[] { "E", "D", 'E', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()) });
addRecipeAuto(new ItemStack(ModItems.drone, 1, EnumDroneType.REQUEST.ordinal()), new Object[] { "E", "D", 'E', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), 'D', new ItemStack(ModItems.drone, 1, EnumDroneType.PATROL_EXPRESS.ordinal()) });
addRecipeAuto(new ItemStack(ModItems.drone_linker), new Object[] { "T", "C", 'T', ModBlocks.drone_waypoint, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) });
addRecipeAuto(new ItemStack(ModBlocks.drone_waypoint, 4), new Object[] { "G", "T", "C", 'G', KEY_GREEN, 'T', Blocks.redstone_torch, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) });

View File

@ -1491,6 +1491,7 @@ public class ResourceManager {
public static final IModelCustom pipe_neo = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/pipe_neo.obj"));
public static final IModelCustom difurnace_extension = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/difurnace_extension.obj"));
public static final IModelCustom splitter = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/splitter.obj"));
public static final IModelCustom crane_buffer = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/crane_buffer.obj"));
public static final IModelCustom rail_narrow_straight = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_narrow.obj"));
public static final IModelCustom rail_narrow_curve = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_narrow_bend.obj"));
public static final IModelCustom rail_standard_straight = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard.obj"));

View File

@ -0,0 +1,75 @@
package com.hbm.render.block;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.network.CranePartitioner;
import com.hbm.main.ResourceManager;
import com.hbm.render.util.ObjUtil;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.client.model.obj.WavefrontObject;
public class RenderPartitioner implements ISimpleBlockRenderingHandler {
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
GL11.glPushMatrix();
Tessellator tessellator = Tessellator.instance;
tessellator.setColorOpaque_F(1, 1, 1);
GL11.glRotated(90, 0, 1, 0);
GL11.glTranslatef(0F, -0.5F, 0F);
tessellator.startDrawingQuads();
drawPartitioner(tessellator, block, 0, false);
tessellator.draw();
GL11.glPopMatrix();
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tessellator.setColorOpaque_F(1, 1, 1);
tessellator.addTranslation(x + 0.5F, y, z + 0.5F);
int meta = world.getBlockMetadata(x, y, z);
float rotation = 0;
if(meta == 2) rotation = 90F / 180F * (float) Math.PI;
if(meta == 4) rotation = 180F / 180F * (float) Math.PI;
if(meta == 5) rotation = 0F / 180F * (float) Math.PI;
if(meta == 3) rotation = 270F / 180F * (float)Math.PI;
drawPartitioner(tessellator, block, rotation, true);
tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F);
return true;
}
@Override
public boolean shouldRender3DInInventory(int modelId) {
return true;
}
private static void drawPartitioner(Tessellator tessellator, Block block, float rotation, boolean shadeNormals) {
CranePartitioner partitioner = (CranePartitioner) block;
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.crane_buffer, "Side", partitioner.getIcon(0, 0), tessellator, rotation, shadeNormals);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.crane_buffer, "Back", partitioner.iconBack, tessellator, rotation, shadeNormals);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.crane_buffer, "Top_Top.001", partitioner.iconTop, tessellator, rotation, shadeNormals);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.crane_buffer, "Inner", partitioner.iconInner, tessellator, rotation, shadeNormals);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.crane_buffer, "InnerSide", partitioner.iconInnerSide, tessellator, rotation, shadeNormals);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.crane_buffer, "Belt", partitioner.iconBelt, tessellator, rotation, shadeNormals);
}
@Override
public int getRenderId() {
return CranePartitioner.renderID;
}
}

View File

@ -4,10 +4,15 @@ import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.items.ModItems;
import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderBase;
import com.hbm.render.util.RenderDecoItem;
import com.hbm.tileentity.machine.TileEntityMachineOreSlopper;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
@ -15,6 +20,8 @@ import net.minecraft.util.MathHelper;
import net.minecraftforge.client.IItemRenderer;
public class RenderOreSlopper extends TileEntitySpecialRenderer implements IItemRendererProvider {
private RenderItem itemRenderer = new RenderDecoItem(this);
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) {
@ -29,39 +36,66 @@ public class RenderOreSlopper extends TileEntitySpecialRenderer implements IItem
case 2: GL11.glRotatef(0, 0F, 1F, 0F); break;
case 4: GL11.glRotatef(90, 0F, 1F, 0F); break;
}
TileEntityMachineOreSlopper slopper = (TileEntityMachineOreSlopper) tile;
GL11.glShadeModel(GL11.GL_SMOOTH);
bindTexture(ResourceManager.ore_slopper_tex);
ResourceManager.ore_slopper.renderPart("Base");
GL11.glPushMatrix();
double slide = slopper.prevSlider + (slopper.slider - slopper.prevSlider) * interp;
GL11.glTranslated(0, 0, slide * -3);
ResourceManager.ore_slopper.renderPart("Slider");
GL11.glPushMatrix();
double extend = Math.sin(((tile.getWorldObj().getTotalWorldTime() + interp) * 0.1 % (Math.PI * 2))) * 0.625+ 0.625;
double extend = (slopper.prevBucket + (slopper.bucket - slopper.prevBucket) * interp) * 1.5;
GL11.glTranslated(0, -MathHelper.clamp_double(extend - 0.25, 0, 1.25), 0);
ResourceManager.ore_slopper.renderPart("Hydraulics");
GL11.glTranslated(0, -MathHelper.clamp_double(extend, 0, 1.25), 0);
ResourceManager.ore_slopper.renderPart("Bucket");
if(slopper.animation == slopper.animation.LIFTING) {
GL11.glTranslated(0.0625D, 4.3125D, 2D);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glRotatef(90, 0F, 1F, 0F);
GL11.glRotatef(-90, 1F, 0F, 0F);
ItemStack stack = new ItemStack(ModItems.bedrock_ore, 1, 0);
EntityItem item = new EntityItem(null, 0.0D, 0.0D, 0.0D, stack);
item.getEntityItem().stackSize = 1;
item.hoverStart = 0.0F;
RenderItem.renderInFrame = true;
GL11.glScaled(1.75, 1.75, 1.75);
itemRenderer.doRender(item, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F);
RenderItem.renderInFrame = false;
bindTexture(ResourceManager.ore_slopper_tex);
}
GL11.glPopMatrix();
GL11.glPopMatrix();
double speed = 10;
double blades = slopper.prevBlades + (slopper.blades - slopper.prevBlades) * interp;
GL11.glPushMatrix();
GL11.glTranslated(0.375, 2.75, 0);
GL11.glRotated((tile.getWorldObj().getTotalWorldTime() % 360 + interp) * speed, 0, 0, 1);
GL11.glRotated(blades, 0, 0, 1);
GL11.glTranslated(-0.375, -2.75, 0);
ResourceManager.ore_slopper.renderPart("BladesLeft");
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(-0.375, 2.75, 0);
GL11.glRotated((tile.getWorldObj().getTotalWorldTime() % 360 + interp) * -speed, 0, 0, 1);
GL11.glRotated(-blades, 0, 0, 1);
GL11.glTranslated(0.375, -2.75, 0);
ResourceManager.ore_slopper.renderPart("BladesRight");
GL11.glPopMatrix();
double fan = slopper.prevFan + (slopper.fan - slopper.prevFan) * interp;
GL11.glPushMatrix();
GL11.glTranslated(0, 1.875, -1);
GL11.glRotated((tile.getWorldObj().getTotalWorldTime() % 360 + interp) * -25, 1, 0, 0);
GL11.glRotated(-fan, 1, 0, 0);
GL11.glTranslated(0, -1.875, 1);
ResourceManager.ore_slopper.renderPart("Fan");
GL11.glPopMatrix();

View File

@ -17,6 +17,7 @@ import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe;
import com.hbm.blocks.generic.PartEmitter.TileEntityPartEmitter;
import com.hbm.blocks.machine.BlockICF.TileEntityBlockICF;
import com.hbm.blocks.machine.BlockPWR.TileEntityBlockPWR;
import com.hbm.blocks.machine.Floodlight.TileEntityFloodlight;
import com.hbm.blocks.machine.MachineCapacitor.TileEntityCapacitor;
import com.hbm.blocks.machine.MachineFan.TileEntityFan;
import com.hbm.blocks.machine.PistonInserter.TileEntityPistonInserter;
@ -24,6 +25,7 @@ import com.hbm.blocks.machine.WatzPump.TileEntityWatzPump;
import com.hbm.blocks.network.BlockCableGauge.TileEntityCableGauge;
import com.hbm.blocks.network.BlockCablePaintable.TileEntityCablePaintable;
import com.hbm.blocks.network.CableDiode.TileEntityDiode;
import com.hbm.blocks.network.CranePartitioner.TileEntityCranePartitioner;
import com.hbm.blocks.network.FluidDuctGauge.TileEntityPipeGauge;
import com.hbm.blocks.network.FluidDuctPaintable.TileEntityPipePaintable;
import com.hbm.blocks.rail.RailStandardSwitch.TileEntityRailSwitch;
@ -91,6 +93,7 @@ public class TileMappings {
put(TileEntityMachineExposureChamber.class, "tileentity_exposure_chamber");
put(TileEntityMachineRTG.class, "tileentity_machine_rtg");
put(TileEntityMachineExcavator.class, "tileentity_ntm_excavator");
put(TileEntityMachineOreSlopper.class, "tileentity_ore_slopper");
put(TileEntityFluidDuctSimple.class, "tileentity_universal_duct_simple");
put(TileEntityFluidDuct.class, "tileentity_universal_duct");
put(TileEntityMachineDrain.class, "tileentity_fluid_drain");
@ -182,6 +185,7 @@ public class TileMappings {
put(TileEntitySILEX.class, "tileentity_silex");
put(TileEntityFEL.class, "tileentity_fel");
put(TileEntityDemonLamp.class, "tileentity_demonlamp");
put(TileEntityFloodlight.class, "tileentity_floodlight");
put(TileEntityLantern.class, "tileentity_lantern_ordinary");
put(TileEntityLanternBehemoth.class, "tileentity_lantern_behemoth");
put(TileEntityStorageDrum.class, "tileentity_waste_storage_drum");
@ -395,6 +399,7 @@ public class TileMappings {
put(TileEntityCraneUnboxer.class, "tileentity_unboxer");
put(TileEntityCraneRouter.class, "tileentity_router");
put(TileEntityCraneSplitter.class, "tileentity_splitter");
put(TileEntityCranePartitioner.class, "tileentity_partitioner");
put(TileEntityFan.class, "tileentity_fan");
put(TileEntityPistonInserter.class, "tileentity_piston_inserter");

View File

@ -1,32 +1,55 @@
package com.hbm.tileentity.machine;
import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.UpgradeManager;
import com.hbm.inventory.container.ContainerOreSlopper;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.inventory.gui.GUIOreSlopper;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType;
import com.hbm.items.special.ItemBedrockOreBase;
import com.hbm.items.special.ItemBedrockOreNew;
import com.hbm.items.special.ItemBedrockOreNew.BedrockOreGrade;
import com.hbm.items.special.ItemBedrockOreNew.BedrockOreType;
import com.hbm.lib.Library;
import com.hbm.lib.ModDamageSource;
import com.hbm.main.MainRegistry;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.IUpgradeInfoProvider;
import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.util.I18nUtil;
import com.hbm.util.fauxpointtwelve.DirPos;
import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.fluid.IFluidStandardTransceiver;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityMachineOreSlopper extends TileEntityMachineBase implements IGUIProvider {
public class TileEntityMachineOreSlopper extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider {
public long power;
public static final long maxPower = 1_000_000;
public static final long maxPower = 100_000;
public static final int waterUsedBase = 1_000;
public int waterUsed = waterUsedBase;
@ -41,9 +64,13 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement
public float prevSlider;
public float bucket;
public float prevBucket;
public float blades;
public float prevBlades;
public float fan;
public float prevFan;
public int delay;
public static FluidTank[] tanks;
public FluidTank[] tanks;
public double[] ores = new double[BedrockOreType.values().length];
public TileEntityMachineOreSlopper() {
@ -65,6 +92,8 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement
@Override
public void updateEntity() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10);
if(!worldObj.isRemote) {
this.power = Library.chargeTEFromItems(slots, 0, power, maxPower);
@ -73,11 +102,23 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement
FluidType conversion = this.getFluidOutput(tanks[0].getTankType());
if(conversion != null) tanks[1].setTankType(conversion);
for(DirPos pos : getConPos()) {
this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
if(tanks[1].getFill() > 0) this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
}
this.processing = false;
UpgradeManager.eval(slots, 9, 10);
int speed = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3);
int efficiency = Math.min(UpgradeManager.getLevel(UpgradeType.EFFECT), 3);
this.consumption = this.consumptionBase + (this.consumptionBase * speed) / 2 + (this.consumptionBase * efficiency);
if(canSlop()) {
this.power -= this.consumption;
this.progress += 1F/200F;
this.progress += 1F / (200 - speed * 50);
this.processing = true;
boolean markDirty = false;
@ -85,7 +126,7 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement
progress -= 1F;
for(BedrockOreType type : BedrockOreType.values()) {
ores[type.ordinal()] += ItemBedrockOreBase.getOreAmount(slots[2], type);
ores[type.ordinal()] += (ItemBedrockOreBase.getOreAmount(slots[2], type) * (1D + efficiency * 0.1));
}
this.decrStackSize(2, 1);
@ -96,6 +137,22 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement
if(markDirty) this.markDirty();
List<Entity> entities = worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(xCoord - 0.5, yCoord + 1, zCoord - 0.5, xCoord + 1.5, yCoord + 3, zCoord + 1.5).offset(dir.offsetX, 0, dir.offsetZ));
for(Entity e : entities) {
e.attackEntityFrom(ModDamageSource.turbofan, 1000F);
if(!e.isEntityAlive() && e instanceof EntityLivingBase) {
NBTTagCompound vdat = new NBTTagCompound();
vdat.setString("type", "giblets");
vdat.setInteger("ent", e.getEntityId());
vdat.setInteger("cDiv", 5);
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(vdat, e.posX, e.posY + e.height * 0.5, e.posZ), new TargetPoint(e.dimension, e.posX, e.posY + e.height * 0.5, e.posZ, 150));
worldObj.playSoundEffect(e.posX, e.posY, e.posZ, "mob.zombie.woodbreak", 2.0F, 0.95F + worldObj.rand.nextFloat() * 0.2F);
}
}
} else {
this.progress = 0;
}
@ -109,16 +166,46 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement
for(int i = 3; i <= 8; i++) if(slots[i] == null) {
slots[i] = output; ores[type.ordinal()] -= 1F; continue outer;
}
break outer;
}
}
this.networkPackNT(150);
} else {
this.prevSlider = this.slider;
this.prevBucket = this.bucket;
this.prevBlades = this.blades;
this.prevFan = this.fan;
if(this.processing) {
this.blades += 15F;
this.fan += 35F;
if(blades >= 360) {
blades -= 360;
prevBlades -= 360;
}
if(fan >= 360) {
fan -= 360;
prevFan -= 360;
}
if(animation == animation.DUMPING && MainRegistry.proxy.me().getDistance(xCoord + 0.5, yCoord + 4, zCoord + 0.5) <= 50) {
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", "blockdust");
data.setInteger("block", Block.getIdFromBlock(Blocks.iron_block));
data.setDouble("posX", xCoord + 0.5 + dir.offsetX + worldObj.rand.nextGaussian() * 0.25);
data.setDouble("posY", yCoord + 4.25);
data.setDouble("posZ", zCoord + 0.5 + dir.offsetZ + worldObj.rand.nextGaussian() * 0.25);
data.setDouble("mY", -0.2D);
MainRegistry.proxy.effectNT(data);
}
if(delay > 0) {
delay--;
return;
@ -142,7 +229,7 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement
}
break;
case MOVE_SHREDDER:
this.slider += 1/60F;
this.slider += 1/50F;
if(slider >= 1F) {
slider = 1F;
animation = SlopperAnimation.DUMPING;
@ -153,7 +240,7 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement
animation = SlopperAnimation.MOVE_BUCKET;
break;
case MOVE_BUCKET:
this.slider -= 1/60F;
this.slider -= 1/50F;
if(slider <= 0F) {
animation = SlopperAnimation.LOWERING;
delay = 10;
@ -163,19 +250,76 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement
}
}
}
public DirPos[] getConPos() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
return new DirPos[] {
new DirPos(xCoord + dir.offsetX * 4, yCoord, zCoord + dir.offsetZ * 4, dir),
new DirPos(xCoord - dir.offsetX * 4, yCoord, zCoord - dir.offsetZ * 4, dir.getOpposite()),
new DirPos(xCoord + rot.offsetX * 2, yCoord, zCoord + rot.offsetZ * 2, rot),
new DirPos(xCoord - rot.offsetX * 2, yCoord, zCoord - rot.offsetZ * 2, rot.getOpposite()),
new DirPos(xCoord + dir.offsetX * 2 + rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 2 + rot.offsetZ * 2, rot),
new DirPos(xCoord + dir.offsetX * 2 - rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 2 - rot.offsetZ * 2, rot.getOpposite()),
new DirPos(xCoord - dir.offsetX * 2 + rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 2 + rot.offsetZ * 2, rot),
new DirPos(xCoord - dir.offsetX * 2 - rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 2 - rot.offsetZ * 2, rot.getOpposite())
};
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack stack) {
return slot == 2 && stack.getItem() == ModItems.bedrock_ore_base;
}
@Override
public boolean canExtractItem(int i, ItemStack stack, int j) {
return i >= 3 && i <= 8;
}
private static final int[] slot_access = new int[] {2, 3, 4, 5, 6, 7, 8};
@Override
public int[] getAccessibleSlotsFromSide(int side) {
return slot_access;
}
@Override public void serialize(ByteBuf buf) {
super.serialize(buf);
buf.writeLong(power);
buf.writeLong(consumption);
buf.writeFloat(progress);
buf.writeBoolean(processing);
tanks[0].serialize(buf);
tanks[1].serialize(buf);
}
@Override public void deserialize(ByteBuf buf) {
super.deserialize(buf);
this.power = buf.readLong();
this.consumption = buf.readLong();
this.progress = buf.readFloat();
this.processing = buf.readBoolean();
tanks[0].deserialize(buf);
tanks[1].deserialize(buf);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.power = nbt.getLong("power");
this.progress = nbt.getFloat("progress");
tanks[0].readFromNBT(nbt, "water");
tanks[1].readFromNBT(nbt, "slop");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setLong("power", power);
nbt.setFloat("progress", progress);
tanks[0].writeToNBT(nbt, "water");
tanks[1].writeToNBT(nbt, "slop");
}
public boolean canSlop() {
@ -192,6 +336,39 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement
return null;
}
@Override public long getPower() { return power; }
@Override public void setPower(long power) { this.power = power; }
@Override public long getMaxPower() { return maxPower; }
@Override public FluidTank[] getAllTanks() { return tanks; }
@Override public FluidTank[] getSendingTanks() { return new FluidTank[] {tanks[1]}; }
@Override public FluidTank[] getReceivingTanks() { return new FluidTank[] {tanks[0]}; }
AxisAlignedBB bb = null;
@Override
public AxisAlignedBB getRenderBoundingBox() {
if(bb == null) {
bb = AxisAlignedBB.getBoundingBox(
xCoord - 3,
yCoord,
zCoord - 3,
xCoord + 4,
yCoord + 7,
zCoord + 4
);
}
return bb;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerOreSlopper(player.inventory, this);
@ -202,4 +379,29 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUIOreSlopper(player.inventory, this);
}
@Override
public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) {
return type == UpgradeType.SPEED || type == UpgradeType.EFFECT;
}
@Override
public void provideInfo(UpgradeType type, int level, List<String> info, boolean extendedInfo) {
info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_ore_slopper));
if(type == UpgradeType.SPEED) {
info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%"));
info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 50) + "%"));
}
if(type == UpgradeType.EFFECT) {
info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_EFFICIENCY, "+" + (level * 10) + "%"));
info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%"));
}
}
@Override
public int getMaxLevel(UpgradeType type) {
if(type == UpgradeType.SPEED) return 3;
if(type == UpgradeType.EFFECT) return 3;
return 0;
}
}

View File

@ -10,16 +10,21 @@ import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.lib.Library;
import com.hbm.packet.BufPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.IBufPacketReceiver;
import com.hbm.tileentity.TileEntityLoadedBase;
import api.hbm.fluid.IFluidStandardTransceiver;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ChunkCoordinates;
public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver {
public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver, IBufPacketReceiver {
private FluidTank water;
private FluidTank steam;
@ -56,6 +61,8 @@ public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFlui
this.sendFluid(steam, worldObj, xCoord, yCoord - 1, zCoord, Library.NEG_Y);
heat = 0;
networkPackNT(15);
} else {
//a delayed queue of mirror positions because we can't expect the boiler to always tick first
@ -190,4 +197,20 @@ public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFlui
public FluidTank[] getAllTanks() {
return new FluidTank[] { water, steam };
}
public void networkPackNT(int range) {
if(!worldObj.isRemote) PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range));
}
@Override
public void serialize(ByteBuf buf) {
water.serialize(buf);
steam.serialize(buf);
}
@Override
public void deserialize(ByteBuf buf) {
water.deserialize(buf);
steam.deserialize(buf);
}
}

View File

@ -70,10 +70,11 @@ public class RequestNetwork {
public static class PathNode {
public BlockPos pos;
public long lease;
public HashedSet<PathNode> reachableNodes = new HashedSet();
public boolean active = true;
public HashedSet<PathNode> reachableNodes;
public PathNode(BlockPos pos, HashedSet<PathNode> reachableNodes) {
this.pos = pos;
this.reachableNodes = new HashedSet(reachableNodes);
this.reachableNodes = new HashedSet<>(reachableNodes);
this.lease = System.currentTimeMillis();
}

View File

@ -12,6 +12,7 @@ import com.hbm.inventory.gui.GUIDroneCrate;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.INBTPacketReceiver;
import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.util.ParticleUtil;
import com.hbm.util.fauxpointtwelve.BlockPos;
import api.hbm.fluid.IFluidStandardTransceiver;
@ -51,7 +52,7 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP
public void updateEntity() {
if(!worldObj.isRemote) {
BlockPos pos = getCoord();
this.tank.setType(18, slots);
if(sendingMode && !itemType && worldObj.getTotalWorldTime() % 20 == 0) {
@ -75,7 +76,13 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP
if(!sendingMode && !itemType) unloadFluid(drone);
}
}
ParticleUtil.spawnDroneLine(worldObj,
pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5,
(nextX - pos.getX()), (nextY - pos.getY()), (nextZ - pos.getZ()), 0x00ffff);
}
NBTTagCompound data = new NBTTagCompound();
data.setIntArray("pos", new int[] {nextX, nextY, nextZ});
@ -218,6 +225,10 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP
this.itemType = nbt.getBoolean("type");
tank.readFromNBT(nbt, "t");
}
public BlockPos getCoord() {
return new BlockPos(xCoord, yCoord + 1, zCoord);
}
@Override
public void writeToNBT(NBTTagCompound nbt) {

View File

@ -43,7 +43,7 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple
public void updateEntity() {
super.updateEntity();
if(!worldObj.isRemote && worldObj.getTotalWorldTime() % 100 == 0 && this.hasDrone()) {
if(!worldObj.isRemote && worldObj.getTotalWorldTime() % 20 == 0 && this.hasDrone()) {
// grab all nodes in a 5 chunk radius
HashedSet<PathNode> localNodes = this.getAllLocalNodes(worldObj, xCoord, zCoord, 5);
@ -64,7 +64,7 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple
// simply pick the first request node that has unfulfilled requests
for(RequestNode request : requests) {
if(!request.request.isEmpty()) {
if(request.active && !request.request.isEmpty()) {
firstRequest = request;
break;
}
@ -78,7 +78,7 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple
outer: for(OfferNode offer : offers) {
for(ItemStack stack : offer.offer) {
if(stack != null && request.matchesRecipe(stack, true)) {
if(offer.active && stack != null && request.matchesRecipe(stack, true)) {
if(tryEmbark(own, firstRequest, offer, request, localNodes)) break attempt; // if the drone can be pathed and spawned, stop doing more attempts
break outer; // if not, simply continue iterating over offer nodes
}

View File

@ -3,6 +3,8 @@ package com.hbm.tileentity.network;
import java.util.List;
import com.hbm.entity.item.EntityDeliveryDrone;
import com.hbm.tileentity.INBTPacketReceiver;
import com.hbm.util.ParticleUtil;
import com.hbm.packet.BufPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.IBufPacketReceiver;
@ -26,11 +28,9 @@ public class TileEntityDroneWaypoint extends TileEntity implements IBufPacketRec
@Override
public void updateEntity() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata());
if(!worldObj.isRemote) {
if(nextY != -1) {
List<EntityDeliveryDrone> drones = worldObj.getEntitiesWithinAABB(EntityDeliveryDrone.class, AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 1, zCoord + 1).offset(dir.offsetX * height, dir.offsetY * height, dir.offsetZ * height));
for(EntityDeliveryDrone drone : drones) {
@ -42,13 +42,17 @@ public class TileEntityDroneWaypoint extends TileEntity implements IBufPacketRec
PacketDispatcher.wrapper.sendToAllAround(new BufPacket(xCoord, yCoord, zCoord, this), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 15));
} else {
BlockPos pos = getCoord(dir);
if(nextY != -1 && worldObj.getTotalWorldTime() % 2 == 0) {
double x = xCoord + height * dir.offsetX + 0.5;
double y = yCoord + height * dir.offsetY + 0.5;
double z = zCoord + height * dir.offsetZ + 0.5;
worldObj.spawnParticle("reddust", x, y, z, 0, 0, 0);
ParticleUtil.spawnDroneLine(worldObj,
pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5,
(nextX - pos.getX()), (nextY - pos.getY()), (nextZ - pos.getZ()), 0x0000ff);
}
}
}
@ -106,4 +110,7 @@ public class TileEntityDroneWaypoint extends TileEntity implements IBufPacketRec
nbt.setInteger("height", height);
nbt.setIntArray("pos", new int[] {nextX, nextY, nextZ});
}
public BlockPos getCoord(ForgeDirection dir) {
return new BlockPos(xCoord + height * dir.offsetX + 0.5, yCoord + height * dir.offsetY + 0.5, zCoord + height * dir.offsetZ + 0.5);
}
}

View File

@ -37,14 +37,18 @@ public abstract class TileEntityRequestNetwork extends TileEntity {
if(worldObj.getTotalWorldTime() % 20 == 0) {
BlockPos pos = getCoord();
PathNode newNode = createNode(pos);
if(this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) newNode.active = false;
// push new node
push(worldObj, createNode(pos));
push(worldObj, newNode);
// remove known nodes that no longer exist
// since we can assume a sane number of nodes to exist at any given time, we can run this check in full every second
Iterator<PathNode> it = knownNodes.iterator();
HashedSet<PathNode> localNodes = this.getAllLocalNodes(worldObj, xCoord, zCoord, 2); // this bit may spiral into multiple nested hashtable lookups but it's limited to only a few chunks so it shouldn't be an issue
localNodes.remove(pos);
while(it.hasNext()) {
PathNode node = it.next();
if(!localNodes.contains(node)) {

View File

@ -369,6 +369,7 @@ container.machineITER=Kernfusionsreaktor
container.machineLargeTurbine=Industrielle Dampfturbine
container.machineLiquefactor=Verflüssiger
container.machineMixer=Industrieller Mixer
container.machineOreSlopper=B.E.M.
container.machineRefinery=Ölraffinerie
container.machineSelenium=Hochleistungs-Sternmotor
container.machineShredder=Brecher
@ -760,6 +761,7 @@ hbmfluid.salient=Saftiges Grün
hbmfluid.sas3=Schrabidiumtrisulfat
hbmfluid.schrabidic=Schrabidische Säure
hbmfluid.seedslurry=Saatgemisch
hbmfluid.slop=Erzpampe
hbmfluid.smear=Industrieöl
hbmfluid.smoke=Abgas
hbmfluid.smoke_leaded=Bleiabgas
@ -1292,6 +1294,7 @@ item.bedrock_ore.type.heavy.name=Schwermetall
item.bedrock_ore.type.light.name=Leichtmetall
item.bedrock_ore.type.nonmetal.name=Nichtmetall
item.bedrock_ore.type.rare.name=Seltenerden
item.bedrock_ore_base.name=Rohes Bedrockerz
item.beta.name=Beta-Features
item.big_sword.name=Großes Schwert
item.billet_am_mix.name=Reaktorfähiges Americiumbillet
@ -2714,6 +2717,7 @@ item.ore_byproduct.b_uranium.name=Kristallines Uranfragment
item.ore_centrifuged.name=Zentrifugiertes %serz
item.ore_cleaned.name=Gereinigtes %serz
item.ore_deepcleaned.name=Tiefengereinigtes %serz
item.ore_density_scanner.name=Bedrockerz-Analysegerät
item.ore_enriched.name=Reiches %serz
item.ore_nitrated.name=Nitriertes %serz
item.ore_nitrocrystalline.name=Nitrokristallines %serz
@ -2877,6 +2881,7 @@ item.powder_bromine.name=Bromstaub
item.powder_cadmium.name=Cadmiumstaub
item.powder_caesium.name=Caesiumstaub
item.powder_calcium.name=Kalziumstaub
item.powder_cement.name=Zement
item.powder_cerium.name=Cerstaub
item.powder_cerium_tiny.name=Kleiner Haufen Cerstaub
item.powder_chlorocalcite.name=Chlorokalzit
@ -2917,6 +2922,7 @@ item.powder_lanthanium_tiny.name=Kleiner Haufen Lanthanstaub
item.powder_lapis.name=Lapis Lazuli-Staub
item.powder_lead.name=Bleistaub
item.powder_lignite.name=Braunkohlestaub
item.powder_limestone.name=Kalksteinstaub
item.powder_lithium.name=Lithiumstaub
item.powder_lithium_tiny.name=Kleiner Haufen Lithiumstaub
item.powder_magic.name=Pulverisierte Verzauberung
@ -3941,6 +3947,8 @@ tile.crane_grabber.name=Förderband-Greifer
tile.crane_grabber.desc=Nimmt Items von vorbeilaufenden Förderbändern und legt sie in Behälter$Nimmt nur Items von der nähesten Spur$Hat bis zu 9 Filterslots mit Black- und Whitelist$Rechstclick mit Schraubenzieher um Eingang zu definieren$Shiftclick mit Schraubenzieher um Ausgang zu definieren$Zweimal clicken, um gegenüberliegende Seite zu definieren
tile.crane_inserter.name=Förderband-Einsetzer
tile.crane_inserter.desc=Akzeptiert Items von Förderbändern und legt sie in Behälter$Rechstclick mit Schraubenzieher um Eingang zu definieren$Shiftclick mit Schraubenzieher um Ausgang zu definieren$Zweimal clicken, um gegenüberliegende Seite zu definieren
tile.crane_partitioner.name=Erzauflöser-Partitionierer
tile.crane_partitioner.desc=Speichert Input für den Erzazflöser$und gibt sie in der benötigten Itemanzahl aus.$Ungültige Items werden auch gespeichert, und müssen seitlich entfernt werden.
tile.crane_router.name=Förderband-Sortierer
tile.crane_router.desc=Sortiert Items basierend auf eingestellte Kriterien$Seiten können als Blacklist, Whitelist oder Wildcard eingestellt werden$Widlcard-Seiten werden nur verwendet, wenn kein anderer Filter zutrifft
tile.crate_splitter.name=Förderband-Teiler
@ -4306,6 +4314,7 @@ tile.machine_mixer.name=Industrieller Mixer
tile.machine_nuke_furnace_off.name=Atombetriebener Ofen
tile.machine_nuke_furnace_on.name=Atombetriebener Ofen
tile.machine_orbus.name=Schwerer Magnetischer Lagerbehälter
tile.machine_ore_slopper.name=Bedrockerzmaschine
tile.machine_powerrtg.name=PT-Isotopenzelle
tile.machine_press.name=Befeuerte Presse
tile.machine_puf6_tank.name=Plutoniumhexafluorid-Tank

View File

@ -770,6 +770,7 @@ container.machineITER=Fusion Reactor
container.machineLargeTurbine=Industrial Steam Turbine
container.machineLiquefactor=Liquefactor
container.machineMixer=Industrial Mixer
container.machineOreSlopper=B.O.P.
container.machineRefinery=Oil Refinery
container.machineSelenium=Radial Performance Engine
container.machineShredder=Shredder
@ -1460,6 +1461,7 @@ hbmfluid.salient=Salient Green
hbmfluid.sas3=Schrabidium Trisulfide
hbmfluid.schrabidic=Schrabidic Acid
hbmfluid.seedslurry=Seeding Slurry
hbmfluid.slop=Ore Slop
hbmfluid.smear=Industrial Oil
hbmfluid.smoke=Smoke
hbmfluid.smoke_leaded=Leaded Smoke
@ -2012,6 +2014,7 @@ item.bedrock_ore.type.heavy.name=Heavy Metal
item.bedrock_ore.type.light.name=Light Metal
item.bedrock_ore.type.nonmetal.name=Non-Metal
item.bedrock_ore.type.rare.name=Rare Earth
item.bedrock_ore_base.name=Raw Bedrock Ore
item.beta.name=Beta Features
item.big_sword.name=Great Sword
item.billet_actinium.name=Actinium-227 Billet
@ -3545,6 +3548,7 @@ item.ore_byproduct.b_uranium.name=Crystalline Uranium Fragment
item.ore_centrifuged.name=Centrifuged %s Ore
item.ore_cleaned.name=Cleaned %s Ore
item.ore_deepcleaned.name=Deep Cleaned %s Ore
item.ore_density_scanner.name=Bedrock Ore Density Scanner
item.ore_enriched.name=Enriched %s Ore
item.ore_nitrated.name=Nitrated %s Ore
item.ore_nitrocrystalline.name=Nitrocrystalline %s Ore
@ -3755,6 +3759,7 @@ item.powder_bromine.name=Bromine Powder
item.powder_cadmium.name=Cadmium Powder
item.powder_caesium.name=Caesium Powder
item.powder_calcium.name=Calcium Powder
item.powder_cement.name=Cement
item.powder_cerium.name=Cerium Powder
item.powder_cerium_tiny.name=Tiny Pile of Cerium Powder
item.powder_chlorocalcite.name=Chlorocalcite
@ -3797,6 +3802,7 @@ item.powder_lanthanium_tiny.name=Tiny Pile of Lanthanium Powder
item.powder_lapis.name=Lapis Lazuli Powder
item.powder_lead.name=Lead Powder
item.powder_lignite.name=Lignite Powder
item.powder_limestone.name=Limestone Powder
item.powder_lithium.name=Lithium Powder
item.powder_lithium_tiny.name=Tiny Pile of Lithium Powder
item.powder_magic.name=Pulverized Enchantment
@ -5006,6 +5012,8 @@ tile.crane_grabber.name=Conveyor Grabber
tile.crane_grabber.desc=Takes items from passing conveyors and places them into containers$Will only take items from the closest lane$Has up to 9 filter slots with black and whitelist$Right-click with screwdriver to set input side$Shift-click with screwdriver to set the output side$Click twice to set the opposite side
tile.crane_inserter.name=Conveyor Inserter
tile.crane_inserter.desc=Accepts items from conveyors and places them into containers$Right-click with screwdriver to set input side$Shift-click with screwdriver to set the output side$Click twice to set the opposite side
tile.crane_partitioner.name=Acidizer Input Paritioner
tile.crane_partitioner.desc=Receives and stores up to nine Ore Acidizer inputs$and releases them if they match the required input size.$Invalid items are also saved, and need to be extracted from the side.
tile.crane_router.name=Conveyor Sorter
tile.crane_router.desc=Sorts item based on defined criteria$Sides can be defined as blacklist, whitelist or wildcard$Wildcard sides are only chosen if no other filter matches
tile.crane_splitter.name=Conveyor Splitter
@ -5383,6 +5391,7 @@ tile.machine_mixer.name=Industrial Mixer
tile.machine_nuke_furnace_off.name=Nuclear Furnace
tile.machine_nuke_furnace_on.name=Nuclear Furnace
tile.machine_orbus.name=Heavy Magnetic Storage Tank
tile.machine_ore_slopper.name=Bedrock Ore Processor
tile.machine_powerrtg.name=PT Isotope Cell
tile.machine_press.name=Burner Press
tile.machine_puf6_tank.name=Plutonium Hexafluoride Tank

View File

@ -137,6 +137,7 @@ armor.damageModifier=Modifica del danno del %s contro %s
armor.dash=Concesso %s gli slanci
armor.electricJetpack=Jetpack ionico
armor.explosionImmune=Non può subire alcun danno ad eccezione delle esplosioni
armor.fasterReload=Ricarica veloce
armor.fastFall=Caduta veloce
armor.fireproof=Ignifugo
armor.fullSetBonus=Bonus set completo:
@ -198,6 +199,25 @@ bomb.triggered=Attivato con successo!
book.test.cover=COME FARE SESSO
book.test.page1=PAGINA TEST 1
book.error.cover=Collisore di ardoni:$Risoluzione dei problemi
book.error.title1=Errore 0x01 [NC]
book.error.page1=§lNome:§r "ERRORE_NO_CARICA" §lDescrizione:§r La particella ha raggiunto un segmento con insufficiente carica. §lPossibile soluzione:§r Sostituisci una delle spine che la particella supera con successo con quelli di livello superiore o aggiungi un altra spina leggermente prima del segmento in cui la particella scompare.
book.error.title2=Errore 0x02 [NA]
book.error.page2=§lNome:§r "ERRORE_NO_ANALISI" §lDescrizione:§r La particella a raggiunto il nucleo, nonstante non abbia raggiunto la camera d'analisi. §lPossibile soluzione:§r Assicurati che il tuo accelleratore abbia la camera d'analisi e ricontrolla la modalità d'operazione(lineare/circolare).
book.error.title3=Errore 0x03 [OC]
book.error.page3=§lNome:§r "ERRORE_CANALE_OSTRUITO" §lDescrizione:§r La particella si è schiantata su un blocco all'interno della canale di collisione. §lPossibile soluzione:§r Assicurati che dentro il collisore di partecelle sia libero senza ostruzioni, ad eccezzione dei diodo a particelle e dei blocchi centrali.
book.error.title4=Errore 0x04 [EC]
book.error.page4=§lNome:§r "ERRORE_BOBINA_PREVISTA" §lDescrizione:§r La particella ha passato un punto in cui manca una o più bobine. §lPossibile soluzione:§r Rimuovi tutte le piastre dell'acceleratore e controlla se tutte le bobine sono lì. Questo errore può anche accadere facendo il T-crossing, dove non c'è il diodo.
book.error.title5=Errore 0x05 [MS]
book.error.page5=§lNome:§r "ERRORE_SEGMENTO_MALFORMATO" §lDescrizione:§r La particella ha passato un punto costruito male (ma non ostruito o con bobine mancanti). §lPossibile soluzione:§r Assicurati che ci siano tutte le piastre e che tutte le bobine sono coperte da esse.
book.error.title6=Errore 0x06 [ATL]
book.error.page6=§lNome:§r "ERRORE_ANALISI_TROPPO_LUNGA" §lDescrizione:§r La particella ha passato più di tre blocchi richiesti per la camera d'analisi. §lPossibile soluzione:§r Assicurati che la camera d'analisi sia lunga 3 blocchi ne caso delle operazioni circolari e 2 per quelli lineari. Inoltre controlla che la particella non passi in più camere d'analisi.
book.error.title7=Errore 0x07 [ATS]
book.error.page7=§lNome:§r "ERRORE_ANALISI_TROPPO_CORTA" §lDescrizione:§r La particella a sorpassato la camera d'analisi, data la sua corta lunghezza. §lPossibile soluzione:§r Assicurati che la camera d'analisi sia lunga 3 blocchi ne caso delle operazioni circolari e 2 per quelli lineari. Le camere d'analisi non hanno le bobine e assicurati di usare le piastre e finestre per la camera d'analisi. Le camere d'analisi con le bobine dentro, contano come segmenti regolari.
book.error.title8=Errore 0x08 [DC]
book.error.page8=§lNome:§r "ERRORE_COLLISIONE_DIODO" §lDescrizione:§r La particella si è scontrata con con la parte non input del diodo. §lPossibile soluzione:§r Controlla che il diodo sia configurato correttamente. Le particelle possono entrare soltanto dalla parte con le frecce verdi che indicano dentro.
book.error.title9=Errore 0x09 [BT]
book.error.page9=§lNome:§r "ERRORE_RAMIFICAZIONE_CURVA" §lDescrizione:§r La particella ha raggiunto una curva con più uscite. §lPossibile soluzione:§r Se la curva è normale, controlla se ci sono tutte le bobine richieste (N.B. non ci dev'essere nessun buco che esponga le bobine). Se la curva dev'essere con più uscite, richiede un diodo a particelle schottky configurato correttamente.
book.error.cover=Hadron Collider:$Troubleshooting
book.error.title1=Error 0x01 [NC]
book.error.page1=§lName:§r "ERROR_NO_CHARGE" §lDescription:§r The particle has reached a segment with insufficient charge. §lPotential fix:§r Either replace one of the plugs that the particle successfully passes with higher-tier ones or add another plug slightly before the segment where the particle expires.
@ -252,6 +272,44 @@ book.rbmk.page15=La risposta del §lcombustibile nucleare§r dipende da molti fa
book.rbmk.title16=Fusione
book.rbmk.page16=§4§lEVITALA.
book.starter.cover=$Guida su come ricostruore$una società industrializzata
book.starter.title1=Introduzione
book.starter.page1=Se stai leggendo questo libro, significa che molto probabilmente, in un modo o in un altro, la società è collassata. Governi, paesi e autorità sono concetti del passato - insieme ai servizi della vita civilizzata. Questa guida ti insegnerà a ricostruire la società e tutti la tecnologia e le macchine che ti cambieranno la vita.
book.starter.title2=Carbone e gas mostarda
book.starter.page2=Mentre è impossibile definire lo stato del mondo in un tempo post-apocalittico, non è improbabile che la guerra e l'industria siano finite. Per proteggere i tuoi polmoni, un modo efficace ed economico è quello di urinare sulla §lstoffa§r per creare una §lmaschera da trincea§r,per proteggerti dalla polvere di carbone e dal gas mostarda, se mai dovessi incontrarli.
book.starter.title3=Incudini e presse
book.starter.page3=La quintessenza per iniziare a revitalizzare l'industria, è un §lincudine§r e una §lpressa§r. L'incudine ti permette di creare machinnari iniziali come ad esempio l'asseblatore, mentre la pressa ti permette di creare piastre, fili e circuitit che non puoi assemblarli nell'incudine.
book.starter.title4=Modelli
book.starter.page4=In ordine per stampare i metalli in forme utili, assemblare macchinari ed eseguire reazioni chimiche, avrai bisogno di creare una §lcartella per modelli macchina§r per creare vari stampi e modelli.
book.starter.title5=Scavo
book.starter.page5=A seconda di quanto grave sia stato l'evento apocalittico iniziale per le strutture preesistenti del mondo, c'è una buona probabilità che pezzi e macchine possono essere riparati o salvati. Leghe metalliche come l'acciaio, parti come circuiti, e anche materiali fissili da centrali nucleari ti aspettano. Tuttavia, attenzione ad alcune rovine, ci puo essere un eccesso di pericolo come ad esempio un serpente nell'erba; pronto a mandarti K.O. con le radiazioni, trappole, o orrori indescrivibili...
book.starter.title6=Primi macchinari
book.starter.page6a=Due macchinari che dovresti assemblare subito sono l'§laltoforno§r l' §lassemblatore§r. L'altoforno ti permetterà di creare leghe come l'§lacciaio§r, §lrame di tipo minecraft§r e la §llega avanzata§r; tu avrai ne avrai bisogno per costruire i corpi delle macchine, i filamenti dei circuiti, elettromagneti avanzati e molto di più.
book.starter.page6b=L'assemblatore serve per create praticamente tutte le macchine descritte in questa guida. Avrai bisogno di una risorsa energetica, come ad esempio un §lgeneratore§r a §lcombustione§r o di una §lcaldaia solare§r.
book.starter.page7a=Il §ltrituratore§r, insieme ad un paio di lame, sarà molto utile per raddoppiare la resa del minerale, triturando in polveri fondibili. Queste polveri sono anche cruciali nella creazione di circuitit, come ad esempio i circuito §lmigliorato§r e l'§lovercloccatod§r.
book.starter.page7b=Usando i tuoi macchinari, puoi creare §lImpianti chimici§r, usati per la sintetizzazione di circuiti migliori, cemento, il processo petrolchimico e di più.
book.starter.title8=Oro nero
book.starter.page8a=Usando un §lrilevatore di petrolio§r, puoi trovare depositi sotteranei, sopra i quali dovrai piazzare una §lpompa petrolifera§r o una §ltorre derrick§r. Ricordati che col tempo il deposito di petrolio finirà.
book.starter.page8b=Prima che il petrolio possa essere raffinato e separato in una §lraffineria§r, lo devi riscaldare a 300°C in una §lcaldaia§r.
book.starter.title9=Prodotti petrolchimici
book.starter.page9=Usando un'§limpianti chimici§r, §ltorri di frazionamento§r e §ltorri di cracking catalitico§r, puoi trasformare i prodotti del petrolio raffinari in altri prodotti ancora più utili. Per esempio: §lPolimerir§r o §lBakelite§r, plastica flessibile e duratura; §lDesh§r, una lega metallica di terre rare molto resistente alle temperature; §lcombustibile solido§r, che può essere bruciato per l'energia; o anche §lcombustibile liquido§r, come §lgasolio§r, §ldiesel§r, §lkerosene§r e di più.
book.starter.title10=Macchinari avanzari
book.starter.page10=Con la lavorazione del petrolio nelle tue mani, puoi creare §lcentrifughe§r, che triplica la resa dei minerali; l'§lacidificatore§r, col quale cristallizzi i metalli, aumentando il tuo rendimento; e il §lSILEX + §lFEL§r, due meraviglie dell'ingegneria moderna che possono separare isotopi di materiali con sollievo. Avrai bisogno di più energia per alimentare questi nuovi macchinari; che può essere ottenuto da generatori come: §lgeneratori a diesel§r,§lgeneratori industriali§r, o anche reattori nucleari.
book.starter.title11=Strati
book.starter.page11=Sotto la terra in cui cammini, ci sono diversi §lStrati§r naturali, o minerali speciali e formazioni. Gli §lstrati di scisto§r sono blu, strati conteneti litio e riempiti di uranio, ferro, rame, amianto e altri minerali adatti al tuo uso. Le §lRoccie profonde§r contengono grandi quantita di minerali rari, come §lzirconio§r e §lboro§r, ma richiedono esplosivi per ottenerli.
book.starter.title12=Radiazioni
book.starter.page12a=§oIl resto del libro involverà materiali riguardanti le §oradiazioni. Per la tua sicurezza e degl'altri, ti darò §oconsigli su come mitigare e combattere le radiazioni.
book.starter.page12b=Un alta esposizione alle radiazioni può e ti causera danni corporei. Il primo passo per la prevenzione; è di assicurarsi di limitare l'esposizione ed indossare indumenti protettivi, come la §lTuta hazmat§r, o applicare §lRivestimenti§r sui vestiti o armature; puoi anche prendere il §lRad-X§r per limitare assunzione. Grazie alla medicina moderna, il secondo step può essere rimosso in caso di necessità; per esempio, un §lDecontaminatore del §lplayer§r riduce lentamente le radiazioni assorbite dal tuo corpo. §lRad-Away§r può essere utilizzato anche come profilassi post-esposizione, riduce velocemente ed effettivamente il danno da esposizione da radiazioni.
book.starter.title13=Arricchimento dell'uranio
book.starter.page13=Ci sono alcuni metodi facili per alimentare un reattore nucleare; ad esempio, l'§luranio naturale§r o il §lcombustibile al torio§r. Tuttavia, se stai cercando per qualcosa di più potente, puoi creare una cascata di arricchimento di due §lcentrifughe a gas§r per produrre §lcombustibile all'uranio§r con uno scarto di §lUranio-238§r. Dovrai trasmutare l'uranio in §lpangaillo§r, poi in §lesafluoruro di §luranio§r.
book.starter.title14=La pila Chicago
book.starter.page14=Alternativamente, puoi generare il §lplutonio di grado reattore§r, un combustibile più potente, dall'uranio naturale usando la §lpila Chicago§r. Sovrapponendo blocchi di grafite e trivellandoli, puoi inserire barre di combustibile da riproduzione per generare plutonio e fonti di neutroni, come il §lRadio-Berillio§r, per iniziare la reazione. Assicurati di testare i tuoi design; potrebbe essere necessario distanziare o limitare la quantità di blocchi per evitare il surriscaldamento.
book.starter.title15=ZIRNOX GCR
book.starter.page15=Finalmente, puoi creare la tua prima §overa§r fonte di energia: Il reattore nucleare §lZIRNOX§r. I reattori nucleari richiedono una sistemazione maggiore rispetto alle altre fonti di energia; per primo, avrai bisogno di una buona risorsa d'aqua, come il §lSerbatoio dell'acqua infinito pesante§r. Per rimuovere calore da reattore e per far bollire l'acqua, avrai bisogno di §lmonossido di carbonio§r. Dovrai creare una forte pressione, ma non §otroppa§r. Avrai anche bisogno di 3 turbine a vapore per produrre energia dal vapore prodotto; le §lturbine a vapore§r o le §lturbine a vapore industriali§r saranno ottime. Infine, un §lCondensatore§r o una §ltorre di raffreddamento ausiliaria§r servirà per condensare il vapore rimasto in acqua, dove può essere eliminato o riciclato in un circuito di raffreddamento.
book.starter.title16=Conclusione
book.starter.page16=Se sei arrivato così lontano, sei sulla strada per la ricostruzione della civilizzazione. Hai ricreato macchinari avanzati pre-apocalittici - con energia nucleare, prodotti petrolchimici e di più. Non posso sapere §ocome§r utilizzerai questi nuovi vantaggi, ma è mia personale speranza che tu li usi per il bene tuo e degli altri - o almeno per legittima difesa. Au revoir!
book.starter.title18=Qualcosa sull'autore
book.starter.page18=vær è solo un ragazzo rimasto intrappolato nel vuoto grigio presente nei Talking Head §oUna volta nella vita§r molto a lungo. Una volta trovò la porta di uno studio, ma con suo sgomento scoprì che era un ritaglio di cartone.
book.starter.cover=An Industrialist's$Guide to Rebuilding$Society
book.starter.title1=Introduction
book.starter.page1=If you're reading this, it's highly likely that society, in one way or another, has collapsed entirely. Governments, countries, and authority are a concept of the past - along with all of the amenities of civilized life. As such, this guide will inform you how to change that by recreating the industry and technology of the past for the improvement of your own life.
@ -324,6 +382,11 @@ book.starter.page18=vær is just a guy who has been trapped in the grey void fea
#book.rbmk.title16=Meltdown
#book.rbmk.page16=§4§lAvoid.
book_lore.author=Di %s
book_lore.test.name=questo libro non funziona...
book_lore.test.author=io ti ho trollato eheh :3c
book_lore.test.page.0=>ciao anonimi, prima di iniziare vorrei chiarire che non sono gay. >Sii me >Questa notte >18 > Uscendo con il mio migliore amico senza i miei genitori per alcuni giornis >Siamo migliori amici ormai da un anno >Abbiamo bevuto un po', giocato a molti videogiochi e ordinato una pizza >Ci stavamo divertendo molto >A un certo punto della notte, verso le 9:00, fa una cosa davvero divertente battuta che non ricordo ma so che ci ha fatto ridere tantissimo tutti e due > Senza pensarci passo la mano destra tra i suoi capelli neri semiricci e lo chiamo ragazzo simpatico > Lui arrossisce > Mi rendo conto che mi sento agitato >Siamo abbastanza vicini >All'improvviso lui mi bacia e per qualche motivo io lo bacio >Facciamo l'amore >Ci coccoliamo insieme e ci addormentiamo >Svegliarsi nel cuore della notte con la sua testa rannicchiata sul mio petto e zona del collo >È stato bello ma non sono omosessuale.
book_lore.test.page.1=Lo scrivo mentre lui dorme tra le mie braccia. Come posso deludere bene il mio migliore amico? Non voglio essere un [censurato] /b/
book_lore.author=By %s
book_lore.test.name=this book doesn't work...
book_lore.test.author=me i trolled you hehe :3c
@ -335,6 +398,227 @@ book_lore.test.page.4=5
book_lore.book_iodine.name=Note
book_lore.book_iodine.author=Dave
book_lore.book_iodine.page.0=non ci crederete a questo, ma il vecchio weathervane finalmente è riuscito a farsi vivo di nuovo da quando se n'è andato due settimane fa e la cosa più sorprendente è il fatto che in realtà abbia deciso di vuotare il sacco su quello che stavano facendo nel canyon:
book_lore.book_iodine.page.1=apparentemente i deficienti della ricerca e sviluppo hanno scoperto un composto per la maggior parte inorganico, quasi come una tossina nella natura, ma senti questo: le cellule morenti riprodurranno detta tossina e la espelleranno attraverso la pelle, creando un'aereosol altamente contagioso.
book_lore.book_iodine.page.2=è simile ad un virus, ma non è un virus. La composizione è strana, puoi mischiarlo in una qualsiasi bottiglia in casa ma devi fare nel giusto ordine. Il dottore mi ha detto che il primo ingrediente, che è la polvere di iodio, va nello slot %d
book_lore.book_phosphorous.name=Note
book_lore.book_phosphorous.author=Dave
book_lore.book_phosphorous.page.0=ehi, sono io ancora. assumo che tu abbia preso l'ultimo memo, il dottore non era molto felice di questo. L'ho dovuto fare veloce, gli idioti della ricerca e sviluppo stanno ancora gemendo, probabilmente per mancanza di fondi; di nuovo. Comunque, doc Weathervane ha scoperto che il secondo
book_lore.book_phosphorous.page.1=ingrediente è il fosforo rosso, che va mischiato nello slot %d
book_lore.book_dust.name=Note
book_lore.book_dust.author=Dave
book_lore.book_dust.page.0=il dottore si è incazzato quando ha scoperto che gli idioti della ricerca e sviluppo si sono tenuti l'unico esemplare, inveendo di negligenza grave questo e di uno scenario apocalittico quello. Gli ho detto di freddarsi un minuto, arrabbiarsi a quella maniera non è buono per la sua pressione sanguignia, non
book_lore.book_dust.page.1=che gli sia rimasto molto sangue per cominciare. uno dei deficienti della ricerca e sviluppo ha inserito qualche informazione in più nella circolare della scorsa settimana, chiamano il loro piccolo intruglio "MKU" qualunque cosa significhi, e che contenga vera lanugine domestica. Puoi crederci? una delle più
book_lore.book_dust.page.2=loro invenzioni pericolose e contiene polvere. stranamente hanno mensionato che va messa nello slot %d
book_lore.book_mercury.name=Note
book_lore.book_mercury.author=Dave
book_lore.book_mercury.page.0=beh, questo risolve il problema. Senza contare la parte dove si vomita sangue, i reperti tossicologici dichiarano che sia avvelenamento da mercurio. perchè? perchè il piccolo mix contiene mercurio! mi chiedo solo da dove venga tutta quella roba quando viene
book_lore.book_mercury.page.1=replicata dal corpo? Comunque, il mercurio va nello slot %d
book_lore.book_flower.name=Note
book_lore.book_flower.author=Dave
book_lore.book_flower.page.0=ricordi quando ho menzionato nel mio primo memo che il composto è per lo più inorganico? bene, indovina un po', il vecchio ci ha detto il 4° ingrediente: l'ipomoea nil, un genere di fiore. Gloria mattutina! potrebbe essere dovuto al suo basso contenuto di zolfo,qualunque sia il caso,
book_lore.book_flower.page.1=non fuziona con gli altri fiori. La gloria mattutina va nello slot %d
book_lore.book_syringe.name=Note
book_lore.book_syringe.author=Dave
book_lore.book_syringe.page.0=un piccolo addendum per il 5° memo, ovviamente il MKU va messo in un piccolo contenitore. i fanatici della ricerca e sviluppo utilizzavano normali siringhe metalliche ottenute dal settore medico. presumo che il materiale in eccedenza abbia migliaia di aghi in giro. Il metallo
book_lore.book_syringe.page.1=metallica va nello slot %d
book_lore.resignation_note.name=Lettera di dimissioni
book_lore.resignation_note.author=Kosma
book_lore.resignation_note.page.0=Ieri la direzione ha nuovamente ridimensionato il nostro dipartimento. Quegli idioti possono incolpare solo se stessi, non so cosa si aspettassero dopo quel fiasco. Chi diavolo fa trapelare questo tipo di informazioni? Stiamo perdendo milioni e
book_lore.resignation_note.page.1=sono IO quello che se ne deve andare . Sono IO quello a cui viene chiesto di dimettersi. Spero che voi stronzi finalmente impariate dalla sovrabbondanza di errori e toglietevi quel bastone dal culo.
book_lore.resignation_note.page.2=Non tornero venerdì. Mandatemi soltanto la bustapaga.
book_lore.memo_stocks.name=Memorandum intrasocietario
book_lore.memo_stocks.page.0=Relazioni con gli investitori - $ $ Ci sono state alcune evidenti discrepanze nelle cifre fornite per l'ultimo rapporto trimestrale. Sarebbe prudente che il dipartimento finanziario apportasse alcune modifiche, quindi non ci saranno preoccupazioni.
book_lore.memo_schrab_gsa.name=Nota interna
book_lore.memo_schrab_gsa.page.0=Gestione dei contratti - $ $ Legal ha fatto una svolta con la DLA. Ci hanno assegnato un programma di 45 MILIARDI di GSA per ulteriori acquisti e ricerche su saralloy. Secondo le stime attuali, sarebbe il minimo
book_lore.memo_schrab_gsa.page.1=un profitto del 40%% sulle operazioni correlate, per non parlare della possibilità di contratti futuri. A causa della natura riservata, tutte le prove fiscali devono rimanere private.
book_lore.memo_schrab_rd.name=Nota interna
book_lore.memo_schrab_rd.page.0=Ricerca e sviluppo - $ $ Il nostro metodo principare per la produzione di saralloy è il nuovo accelleratore di partecelle. Nonostante ciò, i costi dell'energia sono altamente esorbitanti rispetto a quanto otteniamo.
book_lore.memo_schrab_rd.page.1=Dottor Schrabauer, comunque, ha scoperto una nuova interazione - chiamata "Strana oscillazione leptonica" - che può ridurre significativamente i costi. Attraverso un processo non del tutto compreso, gli elettroni forniti vengono trasmutati in estremamente in
book_lore.memo_schrab_rd.page.2=fotoni ad alta energia, attraverso uno strano fascino. Questa è un'eccezione estrema a molte leggi consolidate sulla conversione delle particelle, ma esperimenti preliminari hanno dimostrato che questi protoni si trasmutano in quark up e down, creando infine saralloy.
book_lore.memo_schrab_rd.page.3=Stranamente, il prototipo richiede tungsteno legato con piccole quantità di saralloy. In aggiunta, uno speciale condensatore è richiesto per negare cariche positive.
book_lore.memo_schrab_nuke.name=Rapporto di ricerca
book_lore.memo_schrab_nuke.author=Doctor Schrabauer
book_lore.memo_schrab_nuke.page.0=La nostra più recente ricerca riguarda gli effeti delle esplosioni nucleari sui materiali. Grazie al denaro della nostra sovvenzione, abbiamo testato *accidentalmente* la nostra teoria sulla sintesi diretta del saralloy dall'uranio.
book_lore.memo_schrab_nuke.page.1=Solo il nostro ciclotrone ha effettivamente creato saralloy. Tuttavia, durante la nostra ripresa sotterranea a Everwerpen, miniscule tracc di saralloy sono state trovate sui minerali d'uranio, proprio sul sito della detonazione. Tutti puri, l'uranio metallico nelle vicinanze si era sottoposto a fissione.
book_lore.memo_schrab_nuke.page.2=Pertanto, data una quantità sufficiente di minerale di uranio concentrato attorno a un esplosivo, o forse anche a una bomba sporca ricca di rifiuti contenenti materiale fissile, si potrebbe ipoteticamente creare abbastanza saralloy da raccogliere manualmente.
book_lore.bf_bomb_1.name=Note private
book_lore.bf_bomb_1.author=M. Porter
book_lore.bf_bomb_1.page.0=Ci è voluto abbastanza tempo, ma il mio trasferimento è stato accettato. Quei neolaureati erano già difficili da gestire, per non parlare di tutta la mancanza di professionalità del protagonista. $ Non tutte buone notizie - questo laboratorio nascondeva ulteriori dettagli e non avevo bisogno di ulteriore caos per un'altra nuova, magica scoperta.
book_lore.bf_bomb_1.page.1=di sicuro questo era il caso. Gli ex studenti avevano i loro dubbi (sorprendente, considerando quanto avevano gli occhi brillanti), ma l'unico... competente? il collega ha effettivamente messo le mani sul volantino del primer. Devono avere più connessioni di quanto pensassi. Il suo promemoria è scoraggiante:
book_lore.bf_bomb_1.page.2=apparentemente, c'è ancora UN ALTRO materiale miracoloso che hanno ricavato da una miscela di antimateria e un isotopo marginale. La brochure lo chiama "SWIRLMAT" - diavolo se lo so - e basta. Non c'è da stupirsi che volessero un fisico teorico,
book_lore.bf_bomb_1.page.3=non sanno nemmeno cosa sia ancora. In ogni caso, praticamente qualsiasi lavoro sarebbe migliore della mia vecchia posizione, quindi non posso lamentarmi molto della scarsa precisione.
book_lore.bf_bomb_2.name=Note private
book_lore.bf_bomb_2.author=M. Porter
book_lore.bf_bomb_2.page.0=Nonostante l'assenza di informazioni in quel primer, Avevo ancora qualche speranza che sapessero qualcosa di più. Affatto. Tutti gli altri ricercatori senior hanno una fiducia cieca in questo materiale; le loro proposte erano praticamente bibliche. Ero quasi senza parole.
book_lore.bf_bomb_2.page.1=Eppure non posso nemmeno biasimarli. Swirlmat non ha dannatamente senso: è completamente diverso da qualsiasi altra sostanza che abbia mai visto prima. Il suo aspetto era quasi spaventoso, letteralmente una massa di colori vorticosi, con linee più scure che permeavano la superficie verde neon.
book_lore.bf_bomb_2.page.2=Ancora peggio, questa cosa è una fonte di energia. L'esistenza del nostro campione è una violazione dell'ALARA: il laboratorio è stato lasciato vuoto al suo arrivo e l'unica persona abbastanza coraggiosa (un certo dottor Melfyn) ha indossato un materiale ignifugo di livello A solo per trasportarlo per 20 metri.
book_lore.bf_bomb_2.page.3=I dati empirici non sono migliori, poiché stiamo infrangendo la prima legge della termodinamica con quanta energia irradia. Trovarsi vicino a quella cosa, anche dietro un metro di piombo, era terrificante. Siamo corsi fuori dalla camera al termine della spettroscopia
book_lore.bf_bomb_2.page.4=e non ne abbiamo ricavato nulla di nuovo. Quegli idioti del team scientifico, Dio, non hanno vacillato nemmeno dopo tutto quello. Assistere a quelle "discussioni" era orribile; quel ciarlatano del capo ricercatore diceva addirittura che il divieto di test sarebbe stato revocato, che avremmo potuto esserlo
book_lore.bf_bomb_2.page.5=costruire bombe dalla merda nelle prossime settimane, chi sano di mente ci lavorerebbe? Diavolo, l'unico assistente sano di mente (un certo Andrew) l'ha soprannominato "balefire" - perché bruciare a morte su una pira funeraria sarebbe indolore in confronto.
book_lore.bf_bomb_3.name=Note private
book_lore.bf_bomb_3.author=M. Porter
book_lore.bf_bomb_3.page.0=Io e la squadra abbiamo fatto dei passi avanti. L'enfasi sulla separazione: isolarmi dai più devoti ha reso il lavoro lì molto più sopportabile. Anche se non abbiamo ancora idea delle effettive proprietà del balefire (è difficile da analizzare
book_lore.bf_bomb_3.page.1=un campione che frigge la tua attrezzatura) le sue interazioni con altra materia si sono rivelate fruttuose. In particolare, hanno sintetizzato una forma "gassosa": Andrew, tra tutti, mi ha informato che si trattava in realtà di un colloide costituito da microscopiche particelle di fuoco funebre, sospese in alcuni
book_lore.bf_bomb_3.page.2=gas nobile. Ogni particella è avvolta da una "bolla" di gas ionizzato carica positivamente, che ne impedisce la sedimentazione. Chi avrebbe potuto immaginare che le radiazioni gamma fatali avessero un beneficio? Non me. $ Scelgo di non pensare a come hanno trasformato il campione
book_lore.bf_bomb_3.page.3=particolato, ma non posso sottovalutare l'utilità di questo fuoco gassoso: ha reso molto più sicuro fare esperimenti. $ A proposito di sicurezza, il capo ricercatore (in un atto di insensibile disprezzo) ha fatto una scoperta che gli ha quasi staccato la testa.
book_lore.bf_bomb_3.page.4=Decise di "sporcarsi" lasciando che una cellula del nostro nuovo colloide interagisse direttamente con un po' di antimateria molto costosa: l'esplosione risultante trasformò il tavolo su cui si trovava in un pezzo di scorie sbiancate dalle radiazioni, scolpito un emisfero quasi perfetto attraverso
book_lore.bf_bomb_3.page.5=la parte superiore e ha dato alla testa una buona dose di ARS. Immagino che ora sappiamo come farlo esplodere, ma Dio, alcune persone...
book_lore.bf_bomb_4.name=Note private
book_lore.bf_bomb_4.author=M. Porter
book_lore.bf_bomb_4.page.0=Non posso proprio sfuggire al mio vecchio lavoro. Sono l'unico posto che assume nonostante tutto questo tumulto dimenticato da Dio, ma non tornerò in quel buco. $ Mi hanno tentato solo perché ne avevo bisogno, in fretta. Ricordi quel trattato sui test atmosferici da cui ci siamo ritirati una settimana fa?
book_lore.bf_bomb_4.page.1=Bene, per una volta lo stronzo responsabile del nostro laboratorio ha azzeccato la cosa. La denuncia è arrivata con una raffica di nuovi “scienziati” che si sono uniti, proprio per poter utilizzare come arma il balefire. La mancanza di pensiero critico qui è sinceramente sconcertante: Dio lo benedica, Andrew ha persino abbandonato la nave
book_lore.bf_bomb_4.page.2=in secondo luogo è stato abbozzato il primo cazzo di BOMB DESIGN. Quel coglione di Melfyn sembrava così contento del suo piccolo meccanismo... forse gli sono venuti dei vermi cerebrali trasportando quel campione? - che prevedeva qualche stupida stronzata usando la base missilistica solidificata e una batteria
book_lore.bf_bomb_4.page.3=AV. $ Apparentemente, la forma è importante per la produzione di energia e il metodo di attivazione o altro, un po' come l'uranio contro il plutonio nelle armi nucleari normali, ma il risultato finale è uno shock iniziale che innesca l'esplosione. Lo trovo divertente, addirittura esilarante.
book_lore.bf_bomb_4.page.4=Tutti pongono tanta enfasi sull'attivazione; ignorano il meccanismo reale di tutto questo perché non hanno la minima idea di come funzioni! Potrebbe anche essere magico a questo punto, eppure stanno ancora cercando di torcerlo e piegarlo, solo per avere più armi da guerra.
book_lore.bf_bomb_5.name=Note private
book_lore.bf_bomb_5.author=M. Porter
book_lore.bf_bomb_5.page.0=È solo che... non riesco a venirne a capo, nemmeno giorni dopo. Era una conclusione scontata, davvero, visto quanto il team scientifico fosse irriverente riguardo alla sicurezza. $ $ Il dottor Melfyn, M.S., se n'è andato. Morto, forse. L'ho visto accadere davanti ai miei occhi, nella loro camera di prova.
book_lore.bf_bomb_5.page.1=Avevamo appena ricevuto un'altra dose di balefire puro e lui aveva recuperato apparecchiature elettriche e una fonte di energia per testare la sua proposta. Non so cosa lo abbia causato (era accesa la corrente? Si era avviata troppo presto?), ma sembrava progredire in modo agonizzante al rallentatore,
book_lore.bf_bomb_5.page.2=mentre la luce verde consumava il tavolo, la batteria e il Dr. Melfyn era a solo un metro di distanza. Anche quando il tavolo si era ridotto a una pozza di metallo bollente sul pavimento, non bruciava. Non so cosa ho visto nei suoi occhi... $ $ Terrore, o stupore
book_lore.bf_bomb_5.page.3=per la sua continua sopravvivenza, forse? Qualunque fosse il nostro materiale "miracoloso", non aveva importanza. Con un brillante lampo di luce, scomparve un attimo dopo. È evaporato? incenerito? annientato? mandato all'inferno stesso, non lo so più!
book_lore.bf_bomb_5.page.4=Il capo ricercatore mi fa schifo. Ha detto che potevamo stare più attenti, continuare a trasportare, qualsiasi altra schifezza che migliorasse il morale avesse vomitato. Quello stronzo non capirà mai che giocare con il fuoco ti brucerà. $ Non mi sono preoccupato
book_lore.bf_bomb_5.page.5=dimettendomi, ho semplicemente preso la mia merda e sono corso a gambe levate. Non che sia importante, comunque; considerando la mancanza di chiamate e il fungo atomico che si è sollevato sul mio (ormai ex) posto di lavoro, hanno fatto saltare tutto o sono entrati a pieno titolo nella giurisdizione militare.
book_lore.bf_bomb_5.page.6=C'è una distinzione fondamentale da fare tra dissezione e VIVISEZIONE, una distinzione che è stata chiaramente persa da loro. Possono sezionare metalli o atomi quanto vogliono, ma penetrare e vivisezionare la realtà stessa porterà solo a qualcosa di più. Melfins. Chi lo sa!
book_lore.bf_bomb_5.page.7=Dopotutto il governo vuole mettere questa merda nelle bombe, forse vedremo un altro paio di guerre, un altro paio di milioni di persone rassegnate a un destino peggiore della morte. Non possono nasconderlo per sempre. $ $ Non mi interessa. Non più. Per favore, Dio, lasciami tornare indietro
book_lore.bf_bomb_5.page.8=alla scienza vera e propria. $ $ Maledizione, Mae, calmati...
book_lore.beacon.name=Libretto di istruzioni del segnalatore luminoso
book_lore.beacon.author=Industrie Flim Flam
book_lore.beacon.page.0=Grazie per aver acquistato un segnalatore luminoso Mk.2 (rev. 1.3)! Questo piccolo opuscolo fornirà una breve introduzione al funzionamento del faro, nonché al suo funzionamento interno.
book_lore.beacon.page.1=Capitolo 1: Architettura $ Ogni unità è composta da quattro parti principali: il circuito di controllo, una lanterna, un corno da nebbia e l'involucro che ospita le altre parti. Per una spiegazione dettagliata del circuito principale, per favore
book_lore.beacon.page.2=fare riferimento allo schema elettrico che si trova all'interno del coperchio di manutenzione dell'involucro. La lanterna è composta da un involucro in policarbonato contenente una lampadina alogena bicolore da 250 Watt con attacco standard da 200mm, ricambi
book_lore.beacon.page.3=per la lampadina può essere ordinata presso i nostri negozi. Le lampadine di terze parti non sono consigliate poiché non possiamo garantire un funzionamento sicuro. La cassa è realizzata in acciaio inossidabile zincato specializzato ed è resistente agli agenti atmosferici.
book_lore.beacon.page.4=Capitolo 2: Lanterna $ Gli usi principali della lanterna sono fornire luce per facilitare la manutenzione in condizioni meteorologiche avverse, nonché un indicatore di stato. Se il test automatico all'accensione (POST) fallisce, il segnalatore lo farà
book_lore.beacon.page.5=si accenderà di rosso, altrimenti si illuminerà di verde. Tieni presente che i colori possono variare a seconda della lampadina sostitutiva.
book_lore.beacon.page.6=Capitolo 3: Corno da nebbia $ Il corno da nebbia è il dispositivo di comunicazione principale del faro. Il faro è progettato per la comunicazione peer-to-peer (P2P) e per la trasmissione di messaggi.
book_lore.beacon.page.7=Capitolo 4: Peer-to-Peer $ Per i dettagli sulla comunicazione, fare riferimento al manuale delle comunicazioni. Segue un breve riassunto su come stabilire una connessione P2P: innanzitutto il beacon deve dare il segnale "AVVIA CONNESSIONE",
book_lore.beacon.page.8=essendo un unico tono lungo. Anche tutti i peer disponibili dovrebbero rispondere con un unico tono lungo (ordine specificato in base alla vicinanza, nonché le linee guida di comunicazione delineate nel manuale, sezione "Risposta a una connessione")
book_lore.beacon.page.9=Una volta che il peer desiderato ha risposto, dare il segnale "ACCETTA CONNESSIONE", ovvero due toni lunghi, anche il peer risponderà con due toni lunghi. Tutte le comunicazioni successive devono avvenire, nella maggior parte dei casi, utilizzando segnali prenegoziati
book_lore.beacon.page.10=utilizzando lo standard FAR-5M. La comunicazione terminerà immediatamente se non è stato negoziato alcuno standard, fungendo da "ping". Se la comunicazione continua è possibile terminare la connessione utilizzando un altro tono singolo lungo "FINE CONNESSIONE".
book_lore.beacon.page.11=Capitolo 5: Garanzia $ [pagina lasciata intenzionalmente vuota]
cannery.f1=[ Premi F1 per aiuto ]
cannery.centrifuge=Centrifuga a gas
cannery.centrifuge.0=La centrifuga a gas può essere fornita di fluidi attraverso i condotti per fluidi.
cannery.centrifuge.1=Molte ricette richiedono più centrifughe. I prodotti intermedi non possono essere trasportati via tubi.
cannery.centrifuge.2=Questo lato funziona come un connettore che darà il prodotto intermedio alla centrifuga adiacente.
cannery.centrifuge.3=L'esafluoruro di uranio può essere processato con due centrifughe, pero questo ti produrra solo combustibile d'uranio e uranio-238.
cannery.centrifuge.4=Per il processo completo che ti da uranio-238 e uranio-235 richiede 4 centrifughe.
cannery.centrifuge.5=Alcune ricette richiedono anche l'aggiornamento dell'overclocking della centrifuga.
cannery.crucible=Crugiolo
cannery.crucible.0=Il crogiolo è usato per fondere i mineali, lingotti o altri materiali metallici per leghe e di modellarli in forme diverse.
cannery.crucible.1=Richiede una fonte di calore esterna che si deve collegare sotto, come un focolare.
cannery.crucible.2=Una volta riscaldata, il crogiolo può essere usato in due modi differenti, con o senza il modello di ricetta.
cannery.crucible.3=Il crogiolo ha due taniche per il materiale fuso:
cannery.crucible.4=La tanica a sinistra è per i §asottoprodotti§r, tutti i materiasi fusi senza un modello di ricetta andranno lì.
cannery.crucible.5=Se il modello di ricetta è installato, i materiali che non sono presenti nel modello saranno contenuti nella tanica a sinistra.
cannery.crucible.6=I materiali in nella tanica di sinistra non reagiscono tra loro, possono essere colati solo dall'uscita verde per lo stampo.
cannery.crucible.7=Il buffer a destra è per le §cricette§r, se il modello di ricetta è installato, tutti i materiali necessari andranno lì.
cannery.crucible.8=I materiali si combineranno lentamente nel materiale in uscita che verrà automaticamente colato dall'uscita rossa.
cannery.crucible.9=Tieni presente che solo questa tanica gestisce le ricette. Se un modello viene installato retroattivamente, i materiali nella tanica del sottoprodotto non verranno combinati, né trasferiti nella tanica della ricetta.
cannery.crucible.10=L'uscita colerà il materiale automaticamente, se l'obiettivo è valido, ad esempio un canale di fonderia o uno stampo.
cannery.crucible.11=Come per tutti i blocchi da fonderia, è possibile utilizzare una pala per rimuovere tutto il materiale dal crogiolo.
cannery.fensu=FEnSU
cannery.fensu.0=Il FEnSU è capace di contenere assurde quantita di energia, oltre 9EHE (è un 9 seguito da 18 zeri).
cannery.fensu.1=C'è solo un connettore di energia che può essere trovato in basso al centro.
cannery.fensu.2=E' anche l'unico punto in cui il FEnSU può riceve un segnale in redstone.
cannery.firebox=Focolare
cannery.firebox.0=Il focolare brucia oggetti infiammabili per generare calore.
cannery.firebox.1=Può bruciare un qualsiasi oggetto infiammabile, sebbene combustibili di qualità superiore come carbone, coke e combustibili solidi brucino più a lungo e a temperature più elevate.
cannery.firebox.2=Il calore è scambiato in cima, dove c'è il contatto in rame. Macchine con contatti identici in basso, possono ricevere calore dal focolare.
cannery.firebox.3=Se il calore non viene utilizzato e il serbatoio di calore si riempie, il focolare si spegne per evitare sprechi di combustibile.
cannery.firebox.4=Una di queste macchine è il motore Stirling, che trasforma il calore direttamente in energia.
cannery.foundryChannel=Canale della fonderia
cannery.foundryChannel.0=I canali della fonderia servono per trasportare i metalli fusi in una tanica o in uno stampo.
cannery.foundryChannel.1=I canali possono ricevere il materiale sia versandolo dall'alto - tramite uno scarico o direttamente da un crogiolo - sia lateralmente da altri canali.
cannery.foundryChannel.2=Durante il trasporto di materiali, i canali daranno la priorità a blocchi come sbocchi e stampi poco profondi.
cannery.foundryChannel.3=Quando non può fornire uno sbocco o uno stampo, il materiale scorrerà in un canale vicino.
cannery.foundryChannel.4=Il materiale rimasto può essere rimosso utilizzando una pala.
cannery.silex=FEL & SILEX
cannery.silex.0=Il laser a elettroni liberi (FEL) utilizza energia e un cristallo laser per creare un potente raggio laser.
cannery.silex.1=Fai attenzione, il laser può bruciare/sciogliere i blocchi deboli...
cannery.silex.2=...ma non quelli a prova di esplosione.
cannery.silex.3=Il FEL viene utilizzato per alimentare la camera di separazione degli isotopi laser (SILEX). Il FEL e il SILEX devono essere ad almeno due isolati di distanza.
cannery.silex.4=Il laser deve entrare attraverso le aperture di vetro del SILEX. Puntarlo male potrebbe distruggerlo.
cannery.silex.5=Le aperture sui lati possono essere utilizzate per collegare i condotti dei fluidi al SILEX.
cannery.silex.6=Oltre ai due connettori posti sui lati, è presente un terzo connettore nascosto nella parte inferiore da cui è possibile estrarre gli oggetti.
cannery.silex.7=Ogni ricetta richiede un tipo di laser specifico. L'utilizzo di un tipo più forte di quello richiesto elaborerà gli elementi più velocemente.
cannery.silex.8=Un FEL può alimentare fino a 5 SILEX. Ogni SILEX deve essere distante un blocco l'uno dall'altro.
cannery.stirling=Motore Stirling
cannery.stirling.0=Il motore Stirling trasforma il calore in energia elettrica.
cannery.stirling.1=Deve essere posizionato sopra una macchina che produce calore, come il focolare.
cannery.stirling.2=La quantità di calore che può utilizzare è tuttavia limitata, una rotazione eccessiva può portare a malfunzionamenti catastrofici.
cannery.stirling.3=La versione aggiornata può sopportare molto più calore senza rompersi.
cannery.willow=Salice Senape
cannery.willow.0=Il salice senape è una pianta che permette la raccolta del cadmio metallico.
cannery.willow.1=I salici possono essere posizionati su terra, erba o anche su terra morta/oleosa, ma richiedono acqua per crescere.
cannery.willow.2=I salici possono essere concimati con farina d'ossa o fertilizzante industriale. Non hanno bisogno della luce per crescere.
cannery.willow.3=Dopo la seconda fase di crescita, avranno bisogno di un ulteriore blocco di spazio sopra di loro per crescere ulteriormente.
cannery.willow.4=Dopo la quarta fase di crescita, richiedono terra morta o oleosa sotto di loro.
cannery.willow.5=Questo può essere fatto piantando manualmente salici su terreno morto/oleoso, oppure avendo nelle vicinanze una torre di fratturazione idraulica che contamina continuamente il terreno.
cannery.willow.6=Dopo aver raggiunto la fase finale, il salice rimuoverà la contaminazione dal terreno, riconvertendo la terra morta/oleosa in terra normale.
cannery.willow.7=Adesso si possono raccogliere le foglie del salice. Rompere il blocco superiore farà cadere una piccola pianta di salice, 3-6 foglie e manterrà intatta la parte inferiore della pianta.
cannery.willow.8=Presto la pianta ricomincerà a crescere, producendo più foglie se la terra viene sostituita con terra oleosa. Le foglie possono essere trasformate in polvere di cadmio utilizzando un acidificantore.
cannery.willow.9=La raccolta delle foglie di salice può essere automatizzata utilizzando la sega circolare automatica, che romperà solo le piante pronte per il raccolto.
cannery.hadron=Acceleratore di Particelle
cannery.hadron.0=Un Acceleratore di Particelle è composto da tre parti principali: un Nucleo, una Camera di Analisi e un set di Bobine Superconduttrici
cannery.hadron.1=Questo è il Componente Nucleo dell'Acceleratore di Particelle, che spara particelle a velocità relativistiche lungo le bobine verso la Camera di Analisi
cannery.hadron.2=Le particelle vengono espulse da qui
cannery.hadron.3=E negli acceleratori circolari, ritornano qui
cannery.hadron.4=Un segmento di bobina è costruito utilizzando 8 Bobine Dense con nulla (o il nucleo) al centro
cannery.hadron.5=Questo segmento di bobina deve essere anch'esso racchiuso all'interno della Placcatura dell'Acceleratore di Particelle
cannery.hadron.6=Per accedere al Componente Nucleo, sarà necessario aggiungere uno o più Terminali di Accesso
cannery.hadron.7=Il Componente Nucleo richiederà anche energia per funzionare, aggiungere una presa di corrente su un bordo
cannery.hadron.8=L'Acceleratore richiederà abbastanza Prese di Corrente per fornire almeno 10KHE di elettricità per unità di Forza della Bobina
cannery.hadron.9=Nota che il segmento di bobina che avvolge il Componente Nucleo non viene considerato nel calcolo della Forza della Bobina
cannery.hadron.10=Questo segmento di bobina non è necessario per gli acceleratori puramente lineari
cannery.hadron.11=Per gli acceleratori circolari, sarà necessario aggiungere angoli per cambiare la direzione della particella
cannery.hadron.12=Le bobine degli angoli esterni possono essere omesse completamente
cannery.hadron.13=La parte finale del nostro Acceleratore è la Camera di Analisi, che è una camera vuota 3x3x3 circondata da blocchi della Camera di Analisi
cannery.hadron.14=Il tuo Acceleratore di Particelle completo dovrebbe apparire qualcosa di simile!
cannery.hadron.math.0=Forza della bobina in neodimio: 50
cannery.hadron.math.1=50 x 8 x 10KHE = 400 x 10KHE = 4MHE
cannery.hadron.math.2=Forza della Bobina di Metallo Stellare: 1,000
cannery.hadron.math.3=1,000 x 8 x 10KHE = 8,000 x 10KHE = 80MHE
cannery.schottky=Diodo di Particelle Schottky
cannery.schottky.0=Questo è un Diodo di Particelle Schottky. Può consentire design più complessi degli acceleratori di particelle e risparmiare elettricità
cannery.schottky.1=Per impostazione predefinita blocca tutte le particelle e deve essere configurato con un Cacciavite
cannery.schottky.2=Questa faccia ora accetterà le particelle in ingresso
cannery.schottky.3=E questa faccia espellerà le particelle che entrano
cannery.schottky.4=Il diodo ora ha due uscite e si comporterà in maniera quantistica, creando particelle virtuali per ciascuna uscita
cannery.schottky.5=Una volta che tutte le particelle virtuali hanno raggiunto una Camera di Analisi, viene scelta la particella con il momento più basso richiesto per la ricetta corrente
cannery.schottky.6=La particella scelta subisce un collasso della funzione d'onda e diventa reale, consumando solo l'energia che la particella collassante richiede
cannery.schottky.7=Se una qualsiasi particella virtuale incontra segmenti malformati, tutte le particelle virtuali verranno scartate e la particella che ha generato l'errore verrà collassata
cannery.schottky.8=Nota che le particelle virtuali non utilizzeranno mai la stessa uscita del Diodo due volte. I loop infiniti falliranno, ma rientrare in un Diodo è comunque accettabile
cannery.schottky.9=Il tuo Diodo di Particelle Schottky deve essere correttamente racchiuso, con percorsi liberi per ciascuna uscita dell'intersezione
=======
book_lore.book_iodine.page.0=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.1=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.2=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
@ -743,6 +1027,7 @@ container.launchPadRusted=Launch Pad
container.launchTable=Large Launch Pad
container.leadBox=Containment Box
container.machineArcWelder=Arc Welder
container.machineArcFurnaceLarge=Arc Furnace
container.machineBoiler=Oil Heater
container.machineCMB=CMB Steel Furnace
container.machineCoal=Combustion Generator
@ -764,6 +1049,7 @@ container.machineRefinery=Oil Refinery
container.machineSelenium=Radial Performance Engine
container.machineShredder=Shredder
container.machineSILEX=SILEX
container.machineSolderingStation=Soldering Station
container.machineSolidifier=Solidifier
container.machineStrandCaster=Strand Caster
container.machineTurbine=Steam Turbine
@ -855,6 +1141,7 @@ crucible.ferro=Ferrouranium Production
crucible.hematite=Iron Production from Hematite
crucible.hss=High-Speed Steel Production
crucible.malachite=Copper Production from Malachite
crucible.magtung=Magnetized Tungsten Production
crucible.redcopper=Red Copper Production
crucible.steel=Steel Production
crucible.steelMeteoric=Steel Production from Meteoric Iron
@ -1866,6 +2153,15 @@ item.apple_euphemium.name=Euphemium Apple
item.apple_lead.name=Lead Apple
item.apple_schrabidium.name=Schrabidium Apple
item.arc_electrode.name=Graphite Electrode
item.arc_electrode.desh.name=Desh Electrode
item.arc_electrode.graphite.name=Graphite Electrode
item.arc_electrode.lanthanium.name=Lanthanium Electrode
item.arc_electrode.saturnite.name=Saturnite Electrode
item.arc_electrode_burnt.name=Molten Electrode
item.arc_electrode_burnt.desh.name=Molten Desh Electrode
item.arc_electrode_burnt.graphite.name=Molten Graphite Electrode
item.arc_electrode_burnt.lanthanium.name=Molten Lanthanium Electrode
item.arc_electrode_burnt.saturnite.name=Molten Saturnite Electrode
item.arc_electrode_burnt.name=Molten Electrode
item.arc_electrode_desh.name=Desh Electrode
item.armor_polish.name=ShiningArmor™ Armor Polish
@ -2259,6 +2555,21 @@ item.chopper_wing.name=Hunter Chopper Wing
item.chunk_ore.rare.name=Rare Earth Ore Chunk
item.cigarette.name=FFI-Brand Cigarette
item.cinnebar.name=Cinnabar
item.circuit.advanced.name=Military Grade Circuit Board
item.circuit.analog.name=Analog Circuit Board
item.circuit.basic.name=Integrated Circuit Board
item.circuit.bismoid.name=Versatile Circuit Board
item.circuit.capacitor.name=Capacitor
item.circuit.capacitor_board.name=Capacitor Board
item.circuit.capacitor_tantalium.name=Tantalium Capacitor
item.circuit.chip.name=Microchip
item.circuit.chip_bismoid.name=Versatile Integrated Circuit
item.circuit.controller.name=Control Unit
item.circuit.controller_advanced.name=Advanced Control Unit
item.circuit.controller_chassis.name=Control Unit Casing
item.circuit.pcb.name=Printed Circuit Board
item.circuit.silicon.name=Printed Silicon Wafer
item.circuit.vacuum_tube.name=Vacuum Tube
item.circuit_aluminium.name=Basic Circuit
item.circuit_arsenic.name=Adaptable Circuit
item.circuit_arsenic_raw.name=Adaptable Circuit Assembly
@ -3387,6 +3698,7 @@ item.nugget_mox_fuel.name=Nugget of MOX Fuel
item.nugget_mox_fuel.desc=Moxie says: §lTAX EVASION.§r
item.nugget_neptunium.name=Neptunium Nugget
item.nugget_neptunium_fuel.name=Neptunium Fuel Nugget
item.nugget_niobium.name=Niobium Nugget
item.nugget_osmiridium.name=Osmiridium Nugget
item.nugget_pb209.name=Lead-209 Nugget
item.nugget_plutonium.name=Plutonium Nugget
@ -4481,6 +4793,7 @@ item.wire_advanced_alloy.name=Super Conductor
item.wire_aluminium.name=Aluminium Wire
item.wire_copper.name=Copper Wire
item.wire_dense.name=Dense %s Wire
item.wire_fine.name=%s Wire
item.wire_gold.name=Gold Wire
item.wire_magnetized_tungsten.name=4000K High Temperature Super Conductor
item.wire_red_copper.name=Red Copper Wire
@ -4587,6 +4900,7 @@ shape.plate=Plate
shape.plateTriple=Cast Plate
shape.shell=Shell
shape.stamp=Press Stamp
shape.wireFine=Wires
shape.wire=Wire
shape.wireDense=Dense Wire
shape.wiresDense=Dense Wires
@ -4619,6 +4933,7 @@ tile.anvil_starmetal.name=Starmetal Anvil
tile.anvil_steel.name=Steel Anvil
tile.ash_digamma.name=Ash
tile.asphalt.name=Asphalt
tile.asphalt_stairs.name=Asphalt Stairs
tile.asphalt_light.name=Glowing Asphalt
tile.barbed_wire.name=Barbed Wire
tile.barbed_wire_acid.name=Caustic Barbed Wire
@ -4886,12 +5201,16 @@ tile.concrete_colored.red.name=Red Concrete
tile.concrete_colored.silver.name=Light Gray Concrete
tile.concrete_colored.white.name=White Concrete
tile.concrete_colored.yellow.name=Yellow Concrete
tile.concrete_colored_ext.bronze.name=Builder's Choice Concrete - Bronze Plating
tile.concrete_colored_ext.hazard.name=Builder's Choice Concrete - Hazard Stripe
tile.concrete_colored_ext.indigo.name=Builder's Choice Concrete - Deep Indigo
tile.concrete_colored_ext.machine.name=Builder's Choice Concrete - Industrial Tinge
tile.concrete_colored_ext.machine_stripe.name=Builder's Choice Concrete - Industrial Stripe
tile.concrete_colored_ext.pink.name=Builder's Choice Concrete - Manly Pink
tile.concrete_colored_ext.purple.name=Builder's Choice Concrete - Mysterious Purple
tile.concrete_colored_ext.sand.name=Builder's Choice Concrete - Desert Storm
tile.concrete_pillar.name=Rebar Reinforced Concrete Pillar
tile.concrete_slab.asphalt.name=Asphalt Slab
tile.concrete_pillar.name=Rebar Reinforced Concrete Pillar
tile.concrete_slab.concrete.name=Concrete Tile Slab
tile.concrete_slab.concrete_asbestos.name=Asbestos Concrete Slab
@ -5039,6 +5358,7 @@ tile.fallout.name=Fallout
tile.fan.name=Fan
tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip
tile.fence_metal.name=Chainlink Fence
tile.fence_metal_post.name=Chainlink Fence Post
tile.field_disturber.name=High Energy Field Jammer
tile.filing_cabinet.green.name=Dusty Filing Cabinet
tile.filing_cabinet.steel.name=Steel Filing Cabinet
@ -5205,6 +5525,7 @@ tile.launch_table.name=Large Launch Pad
tile.leaves_layer.name=Fallen Leaves
tile.lox_barrel.name=LOX Barrel
tile.machine_amgen.name=Ambience Radiation Generator
tile.machine_arc_furnace.name=Electric Arc Furnace
tile.machine_arc_furnace_off.name=Arc Furnace
tile.machine_arc_furnace_on.name=Arc Furnace
tile.machine_arc_welder.name=Arc Welder
@ -5331,6 +5652,7 @@ tile.machine_shredder.name=Shredder
tile.machine_silex.name=Laser Isotope Separation Chamber (SILEX)
tile.machine_siren.name=Siren
tile.machine_solar_boiler.name=Solar Tower Boiler
tile.machine_soldering_station.name=Soldering Station
tile.machine_solidifier.name=Industrial Solidification Machine
tile.machine_solidifier.desc=A universal machine fitted with cooling systems and other$versatile tools for turning fluids solid using various$processes such as freezing and petrochemical polymerization.
tile.machine_spp_bottom.name=ZPE Potential Generator (Bottom)

View File

@ -0,0 +1,141 @@
# Blender v2.79 (sub 0) OBJ File: 'crane_buffer.blend'
# www.blender.org
o Back
v 0.500000 0.000000 0.500000
v 0.500000 0.000000 -0.500000
v 0.500000 0.750000 0.500000
v 0.500000 0.750000 -0.500000
vt 1.000000 0.750000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt -0.000000 0.750000
vn 1.0000 0.0000 0.0000
s off
f 4/1/1 1/2/1 2/3/1
f 4/1/1 3/4/1 1/2/1
o Side
v -0.500000 0.250000 0.375000
v 0.500000 0.000000 0.500000
v -0.500000 0.250000 -0.375000
v 0.500000 0.000000 -0.500000
v -0.500000 0.625000 0.375000
v 0.500000 0.750000 0.500000
v -0.500000 0.625000 -0.375000
v 0.500000 0.750000 -0.500000
v -0.500000 0.000000 -0.500000
v -0.500000 0.000000 0.500000
v -0.500000 0.750000 -0.500000
v -0.500000 0.750000 0.500000
vt 1.000000 0.750000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 0.750000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.125000 0.250000
vt 1.000000 0.000000
vt 0.875000 0.250000
vt -0.000000 0.750000
vt 0.000000 0.000000
vt 1.000000 0.750000
vt 0.875000 0.625000
vt 0.125000 0.625000
vt -0.000000 0.750000
vt -0.000000 0.750000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn -1.0000 0.0000 0.0000
s off
f 15/5/2 8/6/2 13/7/2
f 10/8/3 14/9/3 6/10/3
f 7/11/4 14/12/4 5/13/4
f 7/11/4 15/14/4 13/15/4
f 5/13/4 16/16/4 9/17/4
f 9/17/4 15/14/4 11/18/4
f 15/5/2 12/19/2 8/6/2
f 10/8/3 16/20/3 14/9/3
f 7/11/4 13/15/4 14/12/4
f 7/11/4 11/18/4 15/14/4
f 5/13/4 14/12/4 16/16/4
f 9/17/4 16/16/4 15/14/4
o Inner
v 0.000000 0.250000 -0.375000
v 0.000000 0.250000 0.375000
v 0.000000 0.625000 -0.375000
v 0.000000 0.625000 0.375000
vt 0.875000 0.250000
vt 0.125000 0.625000
vt 0.125000 0.250000
vt 0.875000 0.625000
vn -1.0000 0.0000 0.0000
s off
f 18/21/5 19/22/5 17/23/5
f 18/21/5 20/24/5 19/22/5
o InnerSide
v -0.500000 0.250000 0.375000
v -0.500000 0.250000 -0.375000
v -0.500000 0.625000 0.375000
v -0.500000 0.625000 -0.375000
v 0.000000 0.250000 -0.375000
v 0.000000 0.250000 0.375000
v 0.000000 0.625000 -0.375000
v 0.000000 0.625000 0.375000
vt 0.125000 1.000000
vt 0.875000 0.500000
vt 0.875000 1.000000
vt 0.312500 1.000000
vt 0.687500 0.500000
vt 0.687500 1.000000
vt 0.312500 1.000000
vt 0.687500 0.500000
vt 0.687500 1.000000
vt 0.125000 0.500000
vt 0.312500 0.500000
vt 0.312500 0.500000
vn 0.0000 -1.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 0.0000 -1.0000
s off
f 24/25/6 28/26/6 23/27/6
f 22/28/7 27/29/7 24/30/7
f 23/31/8 26/32/8 21/33/8
f 24/25/6 27/34/6 28/26/6
f 22/28/7 25/35/7 27/29/7
f 23/31/8 28/36/8 26/32/8
o Belt
v -0.500000 0.250000 0.375000
v -0.500000 0.250000 -0.375000
v 0.000000 0.250000 -0.375000
v 0.000000 0.250000 0.375000
vt 0.875000 0.000000
vt 0.125000 0.500000
vt 0.125000 0.000000
vt 0.875000 0.500000
vn 0.0000 1.0000 0.0000
s off
f 29/37/9 31/38/9 30/39/9
f 29/37/9 32/40/9 31/38/9
o Top_Top.001
v 0.500000 0.000000 0.500000
v 0.500000 0.000000 -0.500000
v 0.500000 0.750000 0.500000
v 0.500000 0.750000 -0.500000
v -0.500000 0.000000 -0.500000
v -0.500000 0.000000 0.500000
v -0.500000 0.750000 -0.500000
v -0.500000 0.750000 0.500000
vt 0.999900 0.000100
vt 0.000100 0.999900
vt 0.000100 0.000100
vt 0.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.999900 0.999900
vt 1.000000 0.000000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
s off
f 37/41/10 33/42/10 38/43/10
f 35/44/11 39/45/11 40/46/11
f 37/41/10 34/47/10 33/42/10
f 35/44/11 36/48/11 39/45/11

View File

@ -0,0 +1,355 @@
# Blender v2.79 (sub 0) OBJ File: 'floodlight.blend'
# www.blender.org
o Lamps
v -0.375000 0.625000 -1.062500
v -0.375000 0.625000 -0.312500
v 0.375000 0.625000 -0.312500
v 0.375000 0.625000 -1.062500
v -0.375000 0.562500 -1.062500
v -0.375000 0.562500 -0.312500
v 0.375000 0.562500 -0.312500
v 0.375000 0.562500 -1.062500
v 0.375000 0.562500 0.312500
v 0.375000 0.562500 1.062500
v -0.375000 0.562500 1.062500
v -0.375000 0.562500 0.312500
v 0.375000 0.625000 0.312500
v 0.375000 0.625000 1.062500
v -0.375000 0.625000 1.062500
v -0.375000 0.625000 0.312500
vt 0.666667 0.695652
vt 0.444444 0.717391
vt 0.444444 0.695652
vt 0.666667 0.978261
vt 0.444444 0.978261
vt 0.444444 1.000000
vt 0.666667 1.000000
vt 0.685185 0.978261
vt 0.666667 0.717391
vt 0.685185 0.717391
vt 0.425926 0.717391
vt 0.425926 0.978261
vt 0.425926 0.717391
vt 0.444444 0.978261
vt 0.425926 0.978261
vt 0.685185 0.978261
vt 0.666667 0.717391
vt 0.685185 0.717391
vt 0.444444 1.000000
vt 0.666667 0.978261
vt 0.666667 1.000000
vt 0.444444 0.717391
vt 0.666667 0.695652
vt 0.444444 0.695652
vn -1.0000 0.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 0.0000 -1.0000
s off
f 4/1/1 7/2/1 3/3/1
f 7/2/2 5/4/2 6/5/2
f 2/6/3 5/4/3 1/7/3
f 1/8/4 8/9/4 4/10/4
f 3/11/5 6/5/5 2/12/5
f 14/13/5 11/14/5 15/15/5
f 16/16/4 9/17/4 13/18/4
f 15/19/3 12/20/3 16/21/3
f 10/22/2 12/20/2 11/14/2
f 13/23/1 10/22/1 14/24/1
f 4/1/1 8/9/1 7/2/1
f 7/2/2 8/9/2 5/4/2
f 2/6/3 6/5/3 5/4/3
f 1/8/4 5/4/4 8/9/4
f 3/11/5 7/2/5 6/5/5
f 14/13/5 10/22/5 11/14/5
f 16/16/4 12/20/4 9/17/4
f 15/19/3 11/14/3 12/20/3
f 10/22/2 9/17/2 12/20/2
f 13/23/1 9/17/1 10/22/1
o Lights
v -0.500000 0.375000 -0.187500
v 0.500000 0.375000 -0.187500
v -0.500000 0.375000 -1.187500
v 0.500000 0.375000 -1.187500
v -0.375000 0.625000 -1.062500
v -0.375000 0.625000 -0.312500
v 0.375000 0.625000 -0.312500
v 0.375000 0.625000 -1.062500
v -0.250000 0.125000 -0.937500
v -0.250000 0.125000 -0.437500
v 0.250000 0.125000 -0.437500
v 0.250000 0.125000 -0.937500
v -0.500000 0.625000 -1.187500
v -0.500000 0.625000 -0.187500
v 0.500000 0.625000 -0.187500
v 0.500000 0.625000 -1.187500
v 0.375000 0.750000 0.312500
v 0.375000 0.750000 1.062500
v -0.375000 0.750000 1.062500
v -0.375000 0.750000 0.312500
v 0.375000 0.625000 0.312500
v 0.375000 0.625000 1.062500
v -0.375000 0.625000 1.062500
v -0.375000 0.625000 0.312500
v 0.500000 0.625000 0.187500
v 0.500000 0.625000 1.187500
v -0.500000 0.625000 1.187500
v -0.500000 0.625000 0.187500
v 0.250000 0.125000 0.437500
v 0.250000 0.125000 0.937500
v -0.250000 0.125000 0.937500
v -0.250000 0.125000 0.437500
v -0.375000 0.625000 -1.062500
v -0.375000 0.625000 -0.312500
v 0.375000 0.625000 -0.312500
v 0.375000 0.625000 -1.062500
v 0.375000 0.625000 0.312500
v 0.375000 0.625000 1.062500
v -0.375000 0.625000 1.062500
v -0.375000 0.625000 0.312500
v -0.375000 0.750000 -1.062500
v -0.375000 0.750000 -0.312500
v 0.375000 0.750000 -0.312500
v 0.375000 0.750000 -1.062500
v 0.500000 0.375000 0.187500
v -0.500000 0.375000 0.187500
v 0.500000 0.375000 1.187500
v -0.500000 0.375000 1.187500
vt 0.407407 0.260870
vt 0.629630 0.173913
vt 0.703704 0.260870
vt 0.407407 0.347826
vt 0.703704 0.260870
vt 0.407407 0.347826
vt 0.407407 0.260870
vt 0.703704 0.260870
vt 0.407407 0.347826
vt 0.407407 0.260870
vt 0.703704 0.260870
vt 0.407407 0.347826
vt 0.407407 0.260870
vt 0.629630 0.000000
vt 0.481481 0.173913
vt 0.481481 0.000000
vt 0.481481 0.173913
vt 0.629630 0.173913
vt 0.629630 0.173913
vt 0.629630 0.173913
vt 0.666667 0.652174
vt 0.407407 0.695652
vt 0.444444 0.652174
vt 0.444444 0.391304
vt 0.703704 0.347826
vt 0.666667 0.391304
vt 0.703704 0.695652
vt 0.740741 0.347826
vt 0.962963 0.304348
vt 0.962963 0.347826
vt 0.962963 0.000000
vt 0.740741 0.043478
vt 0.740741 0.000000
vt 0.703704 0.043478
vt 0.740741 0.304348
vt 0.703704 0.304348
vt 1.000000 0.304348
vt 0.962963 0.043478
vt 1.000000 0.043478
vt 0.666667 0.391304
vt 0.703704 0.695652
vt 0.666667 0.652174
vt 0.444444 0.391304
vt 0.703704 0.347826
vt 0.444444 0.652174
vt 0.407407 0.347826
vt 0.407407 0.695652
vt 0.407407 0.260870
vt 0.629630 0.173913
vt 0.703704 0.260870
vt 0.407407 0.260870
vt 0.629630 0.173913
vt 0.703704 0.260870
vt 0.407407 0.260870
vt 0.629630 0.173913
vt 0.703704 0.260870
vt 0.629630 0.000000
vt 0.481481 0.173913
vt 0.481481 0.000000
vt 0.407407 0.347826
vt 0.740741 0.043478
vt 0.962963 0.304348
vt 0.740741 0.304348
vt 0.407407 0.347826
vt 0.407407 0.347826
vt 0.703704 0.260870
vt 0.407407 0.260870
vt 1.000000 0.304348
vt 0.962963 0.043478
vt 1.000000 0.043478
vt 0.703704 0.043478
vt 0.703704 0.304348
vt 0.629630 0.173913
vt 0.962963 0.000000
vt 0.740741 0.000000
vt 0.740741 0.347826
vt 0.962963 0.347826
vt 0.703704 0.347826
vt 0.703704 0.347826
vt 0.703704 0.347826
vt 0.481481 0.173913
vt 0.481481 0.173913
vt 0.481481 0.173913
vt 0.481481 0.173913
vt 0.481481 0.173913
vt 0.703704 0.347826
vt 0.703704 0.347826
vt 0.703704 0.347826
vn 0.7071 -0.7071 0.0000
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn -0.7071 -0.7071 0.0000
vn 0.0000 -0.7071 -0.7071
vn 0.0000 -0.7071 0.7071
vn 0.0000 1.0000 0.0000
s off
f 18/25/6 28/26/6 20/27/6
f 20/27/7 31/28/7 18/25/7
f 17/29/8 29/30/8 19/31/8
f 19/32/9 32/33/9 20/34/9
f 18/35/10 30/36/10 17/37/10
f 25/38/11 27/39/11 26/40/11
f 17/29/12 25/41/12 26/42/12
f 20/34/13 25/43/13 19/32/13
f 17/37/14 27/44/14 18/35/14
f 21/45/15 30/46/15 22/47/15
f 22/47/15 31/28/15 23/48/15
f 23/48/15 32/49/15 24/50/15
f 24/50/15 29/51/15 21/45/15
f 39/52/8 36/53/8 40/54/8
f 37/55/7 34/56/7 38/57/7
f 38/58/10 35/59/10 39/60/10
f 40/61/9 33/62/9 37/63/9
f 34/56/15 36/53/15 35/59/15
f 53/64/15 44/65/15 56/66/15
f 54/67/15 41/68/15 53/64/15
f 55/69/15 42/70/15 54/67/15
f 56/66/15 43/71/15 55/69/15
f 64/72/14 46/73/14 63/74/14
f 61/75/13 48/76/13 62/77/13
f 62/78/12 47/79/12 64/80/12
f 48/81/11 46/82/11 47/83/11
f 63/74/10 43/84/10 64/72/10
f 59/85/15 57/86/15 58/87/15
f 62/77/9 41/88/9 61/75/9
f 64/80/8 44/89/8 62/78/8
f 61/90/7 42/70/7 63/91/7
f 49/92/9 60/93/9 52/94/9
f 51/95/10 58/87/10 50/96/10
f 61/90/6 46/82/6 45/97/6
f 52/98/7 59/85/7 51/99/7
f 50/100/8 57/86/8 49/101/8
f 18/25/6 27/39/6 28/26/6
f 20/27/7 32/49/7 31/28/7
f 17/29/8 30/102/8 29/30/8
f 19/32/9 29/103/9 32/33/9
f 18/35/10 31/104/10 30/36/10
f 25/38/11 28/26/11 27/39/11
f 17/29/12 19/31/12 25/41/12
f 20/34/13 28/105/13 25/43/13
f 17/37/14 26/106/14 27/44/14
f 21/45/15 29/51/15 30/46/15
f 22/47/15 30/46/15 31/28/15
f 23/48/15 31/28/15 32/49/15
f 24/50/15 32/49/15 29/51/15
f 39/52/8 35/59/8 36/53/8
f 37/55/7 33/62/7 34/56/7
f 38/58/10 34/56/10 35/59/10
f 40/61/9 36/53/9 33/62/9
f 34/56/15 33/62/15 36/53/15
f 53/64/15 41/68/15 44/65/15
f 54/67/15 42/70/15 41/68/15
f 55/69/15 43/71/15 42/70/15
f 56/66/15 44/65/15 43/71/15
f 64/72/14 47/107/14 46/73/14
f 61/75/13 45/108/13 48/76/13
f 62/78/12 48/109/12 47/79/12
f 48/81/11 45/97/11 46/82/11
f 63/74/10 42/110/10 43/84/10
f 59/85/15 60/93/15 57/86/15
f 62/77/9 44/111/9 41/88/9
f 64/80/8 43/112/8 44/89/8
f 61/90/7 41/68/7 42/70/7
f 49/92/9 57/86/9 60/93/9
f 51/95/10 59/85/10 58/87/10
f 61/90/6 63/91/6 46/82/6
f 52/98/7 60/93/7 59/85/7
f 50/100/8 58/87/8 57/86/8
o Base
v -0.500000 0.000000 0.187500
v 0.500000 0.000000 0.187500
v -0.500000 0.000000 -0.187500
v 0.500000 0.000000 -0.187500
v -0.375000 0.500000 0.187500
v 0.375000 0.500000 0.187500
v -0.375000 0.500000 -0.187500
v 0.375000 0.500000 -0.187500
v -0.125000 0.750000 -0.187500
v -0.125000 0.750000 0.187500
v 0.125000 0.750000 0.187500
v 0.125000 0.750000 -0.187500
vt 0.111111 0.260870
vt -0.000000 0.608696
vt -0.000000 0.260870
vt 0.259259 0.304348
vt 0.333333 0.478261
vt 0.259259 0.565217
vt 0.111111 0.086957
vt 0.111111 0.608696
vt 0.111111 0.260870
vt 0.259259 0.565217
vt 0.111111 0.608696
vt 0.000000 0.782609
vt -0.000000 0.869565
vt 0.111111 0.956522
vt -0.000000 0.956522
vt 0.259259 0.304348
vt 0.333333 0.478261
vt 0.111111 0.782609
vt -0.000000 0.086957
vt 0.111111 -0.000000
vt 0.333333 0.391304
vt 0.111111 0.869565
vt 0.333333 0.391304
vt 0.000000 -0.000000
vn 0.0000 -1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn -0.9701 0.2425 0.0000
vn 0.0000 0.0000 1.0000
vn 0.9701 0.2425 0.0000
vn 0.0000 1.0000 0.0000
vn 0.7071 0.7071 0.0000
vn -0.7071 0.7071 0.0000
s off
f 67/113/16 66/114/16 65/115/16
f 71/116/17 76/117/17 72/118/17
f 65/115/18 71/119/18 67/113/18
f 67/113/17 72/118/17 68/120/17
f 66/121/19 69/122/19 65/123/19
f 68/120/20 70/124/20 66/114/20
f 75/125/21 73/126/21 74/127/21
f 70/128/19 74/129/19 69/122/19
f 72/130/22 75/125/22 70/124/22
f 69/131/23 73/132/23 71/119/23
f 67/113/16 68/120/16 66/114/16
f 71/116/17 73/133/17 76/117/17
f 65/115/18 69/131/18 71/119/18
f 67/113/17 71/116/17 72/118/17
f 66/121/19 70/128/19 69/122/19
f 68/120/20 72/130/20 70/124/20
f 75/125/21 76/134/21 73/126/21
f 70/128/19 75/135/19 74/129/19
f 72/130/22 76/134/22 75/125/22
f 69/131/23 74/136/23 73/132/23

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 14 KiB