Merge branch 'HbmMods:master' into OC_bugfix
36
changelog
@ -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
|
||||
@ -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),\
|
||||
|
||||
@ -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);
|
||||
|
||||
26
src/main/java/com/hbm/blocks/machine/Floodlight.java
Normal 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 {
|
||||
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
237
src/main/java/com/hbm/blocks/network/CranePartitioner.java
Normal 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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
|
||||
@ -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 });
|
||||
|
||||
|
||||
@ -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() });
|
||||
|
||||
@ -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
|
||||
|
||||
@ -112,7 +112,9 @@ public abstract class EntityDroneBase extends Entity {
|
||||
this.motionZ = dist.zCoord * speed;
|
||||
}
|
||||
}
|
||||
|
||||
if(isCollidedHorizontally){
|
||||
motionY += 1;
|
||||
}
|
||||
this.moveEntity(motionX, motionY, motionZ);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
/*
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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)));
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)));
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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++) {
|
||||
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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)) {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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) });
|
||||
|
||||
@ -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"));
|
||||
|
||||
75
src/main/java/com/hbm/render/block/RenderPartitioner.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
|
||||
@ -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");
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)) {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
141
src/main/resources/assets/hbm/models/blocks/crane_buffer.obj
Normal 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
|
||||
355
src/main/resources/assets/hbm/models/blocks/floodlight.obj
Normal 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
|
||||
|
After Width: | Height: | Size: 309 B |
|
After Width: | Height: | Size: 314 B |
|
After Width: | Height: | Size: 267 B |
|
After Width: | Height: | Size: 319 B |
|
After Width: | Height: | Size: 307 B |
|
After Width: | Height: | Size: 325 B |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.3 KiB |
BIN
src/main/resources/assets/hbm/textures/items/powder_cement.png
Normal file
|
After Width: | Height: | Size: 280 B |
|
After Width: | Height: | Size: 315 B |
|
After Width: | Height: | Size: 418 B |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 14 KiB |