Merge branch 'master' into aaaaaaaaaaa

This commit is contained in:
70000hp 2024-01-18 18:06:58 -05:00
commit ab9a45689b
69 changed files with 2617 additions and 1361 deletions

View File

@ -1,34 +1,8 @@
## Added
* Large Radar
* A giant version of the radar with 3x the scan range
## Changed
* Nuclear craters have been reworked
* The fallout effect no longer creates dead grass, instead it converts the area into three new biomes, the outer crater, crater and inner crater
* The entire crater is now slaked sellafite which now has texture variance to look more like debris, as well as getting darker towards the center
* The biomes being overridden means that nukes are now a solution to thaumcraft taint. Yay!
* There are now new ore variants for the block conversions which match the surrounding sellafite
* Beryllium ore now has a 100% chance of being converted into emerald
* The watz now cools up to 20% of its current heat level instead of 10%, making reactors a lot cooler and therefore react faster, which means more energy and faster depletion rates
* Mud production rates have been halved, to prevent currently working setups from exploding instantly
* This is your reminder that you can achieve more power, mud and depletion by building larger watz powerplants, i.e. stacking more watz segments on top of each other. Your tiny poo reactors make me sick.
* Watz pellets now have a 50% smaller yield, halving the expected time until depletion
* Adjusted the nuclear flash's intensity, the flash will now deal less and less radiation the longer it goes on
* The nuclear flash now bypasses radiation resistance, being only affected by blocks and distance
* Mushroom clouds' initial scale is now based on the total scale instead of all spawning roughly at the same size, causing fireballs to be comically small for huge bombs
* Removed the old mining drill, combustion generator, old watz core, structure marker, all old large reactor parts and CMB furnace for good
* Chemical plants will now eject all their outputs within a single tick if possible, increasing the throughput of fast recipes with many outputs, like asphalt
* Hitting CTRL + ALT when hovering over an item now displays a preview of that item. Useful if you want to get authentic renders for a wiki, or just like staring at things.
* 256k tanks and BAT9000s can now output comparator signals from their fluid ports
* Trenchmaster general damage multiplier has been halved, making it twice as strong
* Updated generation rules for layers like schist and hematite, they will now only replace things tagged as stone, just like most ores
* Mushroom clouds now have two additional outer condensation rings, those are not entirely finished and are still subject to change
* Small radars are now a tad cheaper
## Fixed
* Fixed a rare crash caused by radars force-loading chunks conflicting with certain mods' chunk loading changes
* Fixed PWR fuel rods not having any radiation value assigned to them
* Fixed trenchmaster helmet not having gas mask protection
* Fixed large thermobaric artillery rocket still using the wrong slag block
* Fixed some of the assembly templates having broken names due to using the wrong way of translating the output
* Fixed the soyuz launcher's NEI construction recipe showing the wrong amount of blocks
* Fixed sellafite emerald ore being oredicted as emerald dust
* Fixed fire replacing petrified wood, creating tons of dead trees with holes in them
* Fixed inconsistent scaling with nuclear missiles
* Fixed BFB rods being called ZFB in hot and depleted variants
* Fixed infinite water barrels voiding water completely after the chemplant's input buffer runs full, infinite barrels can no longer void water in chemplants
* Fixed fallout affecting things on Y:0 like bedrock ores and oil

View File

@ -1,6 +1,6 @@
mod_version=1.0.27
# Empty build number makes a release type
mod_build_number=4837
mod_build_number=4845
credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\
\ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\
@ -16,4 +16,4 @@ credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion al
\ (OpenComputers integration), martemen (project settings), Pvndols (thorium fuel recipe, gas turbine),\
\ JamesH2 (blood mechanics, nitric acid, particle emitter), sdddddf80 (recipe configs, chinese localization,\
\ custom machine holograms, I18n improvements), SuperCraftAlex (tooltips) LePeep (coilgun model, BDCL QC),\
\ 70k (textures), Maksymisio (polish localization) Ice-Arrow (research reactor tweaks)
\ 70k (textures, glyphid AI, strand caster), Maksymisio (polish localization) Ice-Arrow (research reactor tweaks)

View File

@ -602,6 +602,7 @@ public class ModBlocks {
public static Block sliding_blast_door;
public static Block fire_door;
public static Block transition_seal;
public static Block silo_hatch;
// 1.12.2 Doors
public static Block secure_access_door;
@ -2115,6 +2116,7 @@ public class ModBlocks {
sliding_blast_door = new BlockDoorGeneric(Material.iron, DoorDecl.SLIDE_DOOR).setBlockName("sliding_blast_door").setHardness(10.0F).setResistance(750.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":sliding_blast_door");
fire_door = new BlockDoorGeneric(Material.iron, DoorDecl.FIRE_DOOR).setBlockName("fire_door").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fire_door");
transition_seal = new BlockDoorGeneric(Material.iron, DoorDecl.TRANSITION_SEAL).setBlockName("transition_seal").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":transition_seal");
silo_hatch = new BlockDoorGeneric(Material.iron, DoorDecl.SILO_HATCH).setBlockName("silo_hatch").setHardness(10.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
secure_access_door = new BlockDoorGeneric(Material.iron, DoorDecl.SECURE_ACCESS_DOOR).setBlockName("secure_access_door").setHardness(20.0F).setResistance(2_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
large_vehicle_door = new BlockDoorGeneric(Material.iron, DoorDecl.LARGE_VEHICLE_DOOR).setBlockName("large_vehicle_door").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
qe_containment = new BlockDoorGeneric(Material.iron, DoorDecl.QE_CONTAINMENT).setBlockName("qe_containment").setHardness(10.0F).setResistance(1_000.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
@ -3052,6 +3054,7 @@ public class ModBlocks {
GameRegistry.registerBlock(blast_door, blast_door.getUnlocalizedName());
GameRegistry.registerBlock(fire_door, fire_door.getUnlocalizedName());
GameRegistry.registerBlock(transition_seal, transition_seal.getUnlocalizedName());
GameRegistry.registerBlock(silo_hatch, silo_hatch.getUnlocalizedName());
GameRegistry.registerBlock(sliding_blast_door, sliding_blast_door.getUnlocalizedName());
//Doors

View File

@ -43,7 +43,7 @@ public class BlockDoorGeneric extends BlockDummyable {
@Override
public int getOffset(){
return 0;
return type.getBlockOffset();
}
@Override
@ -80,8 +80,8 @@ public class BlockDoorGeneric extends BlockDummyable {
Math.min(box.minX, box.maxX), Math.min(box.minY, box.maxY), Math.min(box.minZ, box.maxZ),
Math.max(box.minX, box.maxX), Math.max(box.minY, box.maxY), Math.max(box.minZ, box.maxZ));
if(box.minY == y && box.maxY == y)
return;
if(box.minY == y && box.maxY == y) return;
if(box.minX == box.maxX && box.minY == box.maxY && box.minZ == box.maxZ) return;
if(box != null && box.intersectsWith(entityBox)) {
collidingBoxes.add(box);
@ -91,6 +91,13 @@ public class BlockDoorGeneric extends BlockDummyable {
// return;
//super.addCollisionBoxesToList(worldIn, x, y, z, entityBox, collidingBoxes, entityIn);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
AxisAlignedBB aabb = this.getBoundingBox(world, x, y, z);
if(aabb.minX == aabb.maxX && aabb.minY == aabb.maxY && aabb.minZ == aabb.maxZ) return null;
return aabb;
}
@Override //should fix AI pathfinding
public boolean getBlocksMovement(IBlockAccess world, int x, int y, int z) { //btw the method name is the exact opposite of that it's doing, check net.minecraft.pathfinding.PathNavigate#512

View File

@ -1,5 +1,6 @@
package com.hbm.blocks.generic;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
@ -47,17 +48,19 @@ public class BlockMush extends Block implements IGrowable, IPlantable {
}
}
private static final Set<Block> canGrowOn = Sets.newHashSet(new Block[] {
ModBlocks.waste_earth,
ModBlocks.waste_mycelium,
ModBlocks.waste_trinitite,
ModBlocks.waste_trinitite_red,
ModBlocks.block_waste,
ModBlocks.block_waste_painted,
ModBlocks.block_waste_vitrified
});
private static final Set<Block> canGrowOn = new HashSet();
public boolean canMushGrowHere(World world, int x, int y, int z) {
if(canGrowOn.isEmpty()) {
canGrowOn.add(ModBlocks.waste_earth);
canGrowOn.add(ModBlocks.waste_mycelium);
canGrowOn.add(ModBlocks.waste_trinitite);
canGrowOn.add(ModBlocks.waste_trinitite_red);
canGrowOn.add(ModBlocks.block_waste);
canGrowOn.add(ModBlocks.block_waste_painted);
canGrowOn.add(ModBlocks.block_waste_vitrified);
}
Block block = world.getBlock(x, y - 1, z);
return canGrowOn.contains(block);
}
@ -75,7 +78,7 @@ public class BlockMush extends Block implements IGrowable, IPlantable {
*/
@Override
public boolean func_149851_a(World world, int x, int y, int z, boolean b) {
return this.canMushGrowHere(world, x, y, z);
return canBlockStay(world, x, y, z);
}
/**

View File

@ -205,6 +205,9 @@ public class BlockOre extends Block {
if(this == ModBlocks.ore_cobalt || this == ModBlocks.ore_nether_cobalt) {
return ModItems.fragment_cobalt;
}
if(this == ModBlocks.block_meteor_molten) {
return null;
}
return Item.getItemFromBlock(this);
}
@ -345,8 +348,7 @@ public class BlockOre extends Block {
public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int i) {
if(this == ModBlocks.block_meteor_molten) {
if(!world.isRemote)
world.setBlock(x, y, z, Blocks.lava);
if(!world.isRemote) world.setBlock(x, y, z, Blocks.lava);
}
}
}

View File

@ -10,12 +10,8 @@ import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemMold;
import com.hbm.items.machine.ItemScraps;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityCrucible;
import com.hbm.tileentity.machine.TileEntityFoundryCastingBase;
import com.hbm.tileentity.machine.TileEntityMachineStrandCaster;
import com.hbm.util.I18nUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.item.EntityItem;
@ -30,203 +26,204 @@ import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MachineStrandCaster extends BlockDummyable implements ICrucibleAcceptor, ILookOverlay, IToolable {
public MachineStrandCaster() {
super(Material.iron);
}
public MachineStrandCaster() {
super(Material.iron);
}
//reminder, if the machine is a solid brick, get dimensions will already handle it without the need to use fillSapce
//the order is up, down, forward, backward, left, right
//x is for left(-)/right(+), z is for forward(+)/backward(-), y you already know
@Override
public int[] getDimensions() {
return new int[]{0, 0, 6, 0, 1, 0};
}
// reminder, if the machine is a solid brick, get dimensions will already
// handle it without the need to use fillSapce
// the order is up, down, forward, backward, left, right
// x is for left(-)/right(+), z is for forward(+)/backward(-), y you already
// know
@Override
public int[] getDimensions() {
return new int[] { 0, 0, 6, 0, 1, 0 };
}
@Override
public int getOffset() {
return 0;
}
@Override
public int getOffset() {
return 0;
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if (meta >= 12) return new TileEntityMachineStrandCaster();
if (meta >= 6) return new TileEntityProxyCombo(true, false, true).moltenMetal();
return null;
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityMachineStrandCaster();
if(meta >= 6) return new TileEntityProxyCombo(true, false, true).moltenMetal();
return null;
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
@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;
x += dir.offsetX * o;
z += dir.offsetZ * o;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
//up,down;forward,backward;left,right
MultiblockHandlerXR.fillSpace(world, x, y, z, new int[]{2, 0, 1, 0, 1, 0}, this, dir);
//Fluid ports
this.makeExtra(world, x + rot.offsetX - dir.offsetX, y, z + rot.offsetZ - dir.offsetZ);
this.makeExtra(world, x - dir.offsetX, y, z - dir.offsetZ);
this.makeExtra(world, x - dir.offsetX * 5, y, z - dir.offsetZ * 5);
this.makeExtra(world, x + rot.offsetX - dir.offsetX * 5, y, z + rot.offsetZ - dir.offsetZ * 5);
//Molten slop ports
this.makeExtra(world, x + rot.offsetX - dir.offsetX, y + 2, z + rot.offsetZ - dir.offsetZ);
this.makeExtra(world, x - dir.offsetX, y + 2, z - dir.offsetZ);
this.makeExtra(world, x + rot.offsetX, y + 2, z + rot.offsetZ);
this.makeExtra(world, x, y + 2, z);
}
// up,down;forward,backward;left,right
MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] { 2, 0, 1, 0, 1, 0 }, this, dir);
// Fluid ports
this.makeExtra(world, x + rot.offsetX - dir.offsetX, y, z + rot.offsetZ - dir.offsetZ);
this.makeExtra(world, x - dir.offsetX, y, z - dir.offsetZ);
this.makeExtra(world, x - dir.offsetX * 5, y, z - dir.offsetZ * 5);
this.makeExtra(world, x + rot.offsetX - dir.offsetX * 5, y, z + rot.offsetZ - dir.offsetZ * 5);
// Molten slop ports
this.makeExtra(world, x + rot.offsetX - dir.offsetX, y + 2, z + rot.offsetZ - dir.offsetZ);
this.makeExtra(world, x - dir.offsetX, y + 2, z - dir.offsetZ);
this.makeExtra(world, x + rot.offsetX, y + 2, z + rot.offsetZ);
this.makeExtra(world, x, y + 2, z);
}
@Override
public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) {
@Override
public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) {
TileEntity poured = world.getTileEntity(x, y, z);
if (!(poured instanceof TileEntityProxyCombo && ((TileEntityProxyCombo) poured).moltenMetal)) return false;
TileEntity poured = world.getTileEntity(x, y, z);
if(!(poured instanceof TileEntityProxyCombo && ((TileEntityProxyCombo) poured).moltenMetal)) return false;
int[] pos = this.findCore(world, x, y, z);
if (pos == null) return false;
TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]);
if (!(tile instanceof TileEntityMachineStrandCaster)) return false;
TileEntityMachineStrandCaster caster = (TileEntityMachineStrandCaster) tile;
int[] pos = this.findCore(world, x, y, z);
if(pos == null) return false;
TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]);
if(!(tile instanceof TileEntityMachineStrandCaster)) return false;
TileEntityMachineStrandCaster caster = (TileEntityMachineStrandCaster) tile;
return caster.canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack);
}
return caster.canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack);
}
@Override
public Mats.MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) {
@Override
public Mats.MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) {
TileEntity poured = world.getTileEntity(x, y, z);
if (!(poured instanceof TileEntityProxyCombo && ((TileEntityProxyCombo) poured).moltenMetal)) return stack;
TileEntity poured = world.getTileEntity(x, y, z);
if(!(poured instanceof TileEntityProxyCombo && ((TileEntityProxyCombo) poured).moltenMetal)) return stack;
int[] pos = this.findCore(world, x, y, z);
if (pos == null) return stack;
TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]);
if (!(tile instanceof TileEntityMachineStrandCaster)) return stack;
TileEntityMachineStrandCaster caster = (TileEntityMachineStrandCaster) tile;
int[] pos = this.findCore(world, x, y, z);
if(pos == null) return stack;
TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]);
if(!(tile instanceof TileEntityMachineStrandCaster)) return stack;
TileEntityMachineStrandCaster caster = (TileEntityMachineStrandCaster) tile;
return caster.pour(world, x, y, z, dX, dY, dZ, side, stack);
}
return caster.pour(world, x, y, z, dX, dY, dZ, side, stack);
}
@Override
public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) {
return false;
}
@Override
public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) {
return false;
}
@Override
public Mats.MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) {
return null;
}
@Override
public Mats.MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) {
return null;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if (world.isRemote) {
return true;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if(world.isRemote) {
return true;
}
int[] coords = findCore(world, x, y, z);
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]);
if (cast != null) {
//insert mold
if (player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.mold && cast.slots[0] == null) {
cast.slots[0] = player.getHeldItem().copy();
cast.slots[0].stackSize = 1;
player.getHeldItem().stackSize--;
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:item.upgradePlug", 1.0F, 1.0F);
cast.markDirty();
return true;
int[] coords = findCore(world, x, y, z);
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]);
if(cast != null) {
// insert mold
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.mold && cast.slots[0] == null) {
cast.slots[0] = player.getHeldItem().copy();
cast.slots[0].stackSize = 1;
player.getHeldItem().stackSize--;
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:item.upgradePlug", 1.0F, 1.0F);
cast.markDirty();
return true;
}
}
if (player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool && player.getHeldItem().getItem().getToolClasses(player.getHeldItem()).contains("shovel")) {
if (cast.amount > 0) {
ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount));
if (!player.inventory.addItemStackToInventory(scrap)) {
EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap);
world.spawnEntityInWorld(item);
} else {
player.inventoryContainer.detectAndSendChanges();
}
cast.amount = 0;
cast.type = null;
cast.markDirty();
}
return true;
}
}
return this.standardOpenBehavior(world, x, y, z, player, 0);
}
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool && player.getHeldItem().getItem().getToolClasses(player.getHeldItem()).contains("shovel")) {
if(cast.amount > 0) {
ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount));
if(!player.inventory.addItemStackToInventory(scrap)) {
EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap);
world.spawnEntityInWorld(item);
} else {
player.inventoryContainer.detectAndSendChanges();
}
cast.amount = 0;
cast.type = null;
cast.markDirty();
}
return true;
}
}
return this.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override
public void breakBlock(World world, int x, int y, int z, Block b, int i) {
@Override
public void breakBlock(World world, int x, int y, int z, Block b, int i) {
TileEntity te = world.getTileEntity(x, y, z);
if (te instanceof TileEntityMachineStrandCaster) {
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) te;
TileEntity te = world.getTileEntity(x, y, z);
if(te instanceof TileEntityMachineStrandCaster) {
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) te;
if (cast.amount > 0) {
ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount));
EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap);
world.spawnEntityInWorld(item);
cast.amount = 0; //just for safety
}
}
super.breakBlock(world, x, y, z, b, i);
}
if(cast.amount > 0) {
ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount));
EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap);
world.spawnEntityInWorld(item);
cast.amount = 0; // just for safety
}
}
super.breakBlock(world, x, y, z, b, i);
}
public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) {
int[] coords = findCore(world, x, y, z);
if (coords == null) return;
public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) {
int[] coords = findCore(world, x, y, z);
if(coords == null)
return;
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]);
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]);
List<String> text = new ArrayList();
if (cast != null) {
if (cast.slots[0] == null) {
text.add(EnumChatFormatting.RED + I18nUtil.resolveKey("foundry.noCast"));
} else if (cast.slots[0].getItem() == ModItems.mold) {
ItemMold.Mold mold = ((ItemMold) cast.slots[0].getItem()).getMold(cast.slots[0]);
text.add(EnumChatFormatting.BLUE + mold.getTitle());
}
}
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xFF4000, 0x401000, text);
}
List<String> text = new ArrayList();
if(cast != null) {
if(cast.slots[0] == null) {
text.add(EnumChatFormatting.RED + I18nUtil.resolveKey("foundry.noCast"));
} else if(cast.slots[0].getItem() == ModItems.mold) {
ItemMold.Mold mold = ((ItemMold) cast.slots[0].getItem()).getMold(cast.slots[0]);
text.add(EnumChatFormatting.BLUE + mold.getTitle());
}
}
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xFF4000, 0x401000, text);
}
@Override
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
x += dir.offsetX * o;
z += dir.offsetZ * o;
@Override
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
x += dir.offsetX * o;
z += dir.offsetZ * o;
if (!MultiblockHandlerXR.checkSpace(world, x, y, z, getDimensions(), x, y, z, dir)) return false;
return MultiblockHandlerXR.checkSpace(world, x, y, z, new int[]{2, 0, 1, 0, 1, 0}, x, y, z, dir);
}
if(!MultiblockHandlerXR.checkSpace(world, x, y, z, getDimensions(), x, y, z, dir))
return false;
return MultiblockHandlerXR.checkSpace(world, x, y, z, new int[] { 2, 0, 1, 0, 1, 0 }, x, y, z, dir);
}
@Override
public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) {
if (tool != ToolType.SCREWDRIVER)
return false;
@Override
public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) {
if(tool != ToolType.SCREWDRIVER)
return false;
int[] coords = findCore(world, x, y, z);
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]);
int[] coords = findCore(world, x, y, z);
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]);
if (cast.slots[0] == null)
return false;
if(cast.slots[0] == null)
return false;
if (!player.inventory.addItemStackToInventory(cast.slots[0].copy())) {
EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, cast.slots[0].copy());
world.spawnEntityInWorld(item);
} else {
player.inventoryContainer.detectAndSendChanges();
}
if(!player.inventory.addItemStackToInventory(cast.slots[0].copy())) {
EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, cast.slots[0].copy());
world.spawnEntityInWorld(item);
} else {
player.inventoryContainer.detectAndSendChanges();
}
cast.markDirty();
cast.slots[0] = null;
cast.markDirty();
cast.slots[0] = null;
return true;
}
return true;
}
}

View File

@ -58,7 +58,7 @@ public class MobConfig {
public static boolean rampantMode = false;
public static boolean rampantNaturalScoutSpawn = false;
public static double rampantScoutSpawnThresh = 20;
public static double rampantScoutSpawnThresh = 14;
public static int rampantScoutSpawnChance = 600;
public static boolean scoutInitialSpawn = false;
public static boolean rampantExtendedTargetting = false;
@ -101,7 +101,7 @@ public class MobConfig {
spawnMax = CommonConfig.createConfigDouble(config, CATEGORY, "12.G07_spawnMax", "Maximum amount of glyphids being able to exist at once through natural spawning", 50);
targetingThreshold = CommonConfig.createConfigDouble(config, CATEGORY, "12.G08_targetingThreshold", "Minimum amount of soot required for glyphids' extended targeting range to activate", 1D);
scoutSwarmSpawnChance = CommonConfig.createConfigInt(config, CATEGORY,"12.G10_scoutSwarmSpawn", "How likely are scouts to spawn in swarms, 1 in x chance format", 2);
scoutSwarmSpawnChance = CommonConfig.createConfigInt(config, CATEGORY,"12.G10_scoutSwarmSpawn", "How likely are scouts to spawn in swarms, 1 in x chance format", 3);
largeHiveChance = CommonConfig.createConfigInt(config, CATEGORY,"12.G11_largeHiveChance", "The chance for a large hive to spawn, formula: 1/x", 5);
largeHiveThreshold = CommonConfig.createConfigInt(config, CATEGORY,"12.G12_largeHiveThreshold", "The soot threshold for a large hive to spawn", 20);

View File

@ -108,6 +108,7 @@ public class WorldConfig {
public static int meteorShowerChance = 20 * 60 * 5;
public static int meteorShowerDuration = 6000;
public static boolean enableCraterBiomes = true;
public static int craterBiomeId = 80;
public static int craterBiomeInnerId = 81;
public static int craterBiomeOuterId = 82;
@ -227,6 +228,7 @@ public class WorldConfig {
meteorShowerDuration = CommonConfig.createConfigInt(config, CATEGORY_METEOR, "5.05_meteorShowerDuration", "Max duration of meteor shower in ticks", 20 * 60 * 30);
final String CATEGORY_BIOMES = CommonConfig.CATEGORY_BIOMES;
enableCraterBiomes = CommonConfig.createConfigBool(config, CATEGORY_BIOMES, "17.B_toggle", "Enables the biome change caused by nuclear explosions", true);
craterBiomeId = CommonConfig.createConfigInt(config, CATEGORY_BIOMES, "17.B00_craterBiomeId", "The numeric ID for the crater biome", 80);
craterBiomeInnerId = CommonConfig.createConfigInt(config, CATEGORY_BIOMES, "17.B01_craterBiomeInnerId", "The numeric ID for the inner crater biome", 81);
craterBiomeOuterId = CommonConfig.createConfigInt(config, CATEGORY_BIOMES, "17.B02_craterBiomeOuterId", "The numeric ID for the outer crater biome", 82);

View File

@ -128,7 +128,11 @@ public class ToolRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.bismuth_tool, 1), new Object[] { "TBT", "SRS", "SCS", 'T', TA.nugget(), 'B', ModItems.nugget_bismuth, 'S', ANY_RESISTANTALLOY.ingot(), 'R', ModItems.reacher, 'C', ModItems.circuit_aluminium });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.sat_designator, 1), new Object[] { "RRD", "PIC", " P", 'P', GOLD.plate(), 'R', Items.redstone, 'C', ModItems.circuit_gold, 'D', ModItems.sat_chip, 'I', GOLD.ingot() });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.sat_relay), new Object[] { ModItems.sat_chip, ModItems.ducttape, ModItems.radar_linker });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pipette, 1), new Object[] { " L", " G ", "G ", 'L', ANY_RUBBER.ingot(), 'G', KEY_CLEARGLASS});
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pipette_boron, 1), new Object[] { " P", " B ", "B ", 'P', RUBBER.ingot(), 'B', ModBlocks.glass_boron});
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pipette_laboratory, 1), new Object[] { " C", " R ", "P ", 'C', ModItems.circuit_aluminium, 'R', RUBBER.ingot(), 'P', ModItems.pipette_boron });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.mirror_tool), new Object[] { " A ", " IA", "I ", 'A', AL.ingot(), 'I', IRON.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.rbmk_tool), new Object[] { " A ", " IA", "I ", 'A', PB.ingot(), 'I', IRON.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.power_net_tool), new Object[] { "WRW", " I ", " B ", 'W', ModItems.wire_red_copper, 'R', REDSTONE.dust(), 'I', IRON.ingot(), 'B', ModItems.battery_su });

View File

@ -4,6 +4,7 @@ import com.hbm.blocks.ModBlocks;
import com.hbm.config.BombConfig;
import com.hbm.config.FalloutConfigJSON;
import com.hbm.config.FalloutConfigJSON.FalloutEntry;
import com.hbm.config.WorldConfig;
import com.hbm.entity.item.EntityFallingBlockNT;
import com.hbm.saveddata.AuxSavedData;
import com.hbm.world.WorldUtil;
@ -114,6 +115,7 @@ public class EntityFalloutRain extends Entity {
}
public static BiomeGenBase getBiomeChange(double dist, int scale) {
if(!WorldConfig.enableCraterBiomes) return null;
if(scale >= 150 && dist < 15) return BiomeGenCraterBase.craterInnerBiome;
if(scale >= 100 && dist < 55) return BiomeGenCraterBase.craterBiome;
if(scale >= 25) return BiomeGenCraterBase.craterOuterBiome;
@ -153,13 +155,14 @@ public class EntityFalloutRain extends Entity {
int depth = 0;
for(int y = 255; y >= 0; y--) {
for(int y = 255; y >= 1; y--) {
if(depth >= 3) return;
Block b = worldObj.getBlock(x, y, z);
if(b.getMaterial() == Material.air) continue;
if(b == Blocks.bedrock) return;
Block ab = worldObj.getBlock(x, y + 1, z);
int meta = worldObj.getBlockMetadata(x, y, z);
@ -175,7 +178,7 @@ public class EntityFalloutRain extends Entity {
}
if(dist < 65 && b.isFlammable(worldObj, x, y, z, ForgeDirection.UP)) {
if(rand.nextInt(5) == 0)
if(rand.nextInt(5) == 0 && worldObj.getBlock(x, y + 1, z).isAir(worldObj, x, y + 1, z))
setBlock(x, y + 1, z, Blocks.fire);
}

View File

@ -176,8 +176,7 @@ public class EntityGlyphid extends EntityMob {
protected Entity findPlayerToAttack() {
if(this.isPotionActive(Potion.blindness)) return null;
EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, useExtendedTargeting() ? 128D : 16D);
return entityplayer;
return this.worldObj.getClosestVulnerablePlayerToEntity(this, useExtendedTargeting() ? 128D : 16D);
}
@Override
@ -316,7 +315,7 @@ public class EntityGlyphid extends EntityMob {
if(source.isFireDamage()) {
amount *= 0.7F;
} else if(source.getDamageType().equals("player")) {
amount *= 1.5F;
amount *= getScale() < 1.25 ? 1.5 : getScale() < 1.3 ? 0.8 : 0.5;
} else if(source == ModDamageSource.acid || source.equals(new DamageSource(ModDamageSource.s_acid))){
amount = 0;
} else if(source == DamageSource.inWall) {

View File

@ -60,7 +60,7 @@ public class EntityGlyphidBlaster extends EntityGlyphidBombardier {
@Override
public float getBombDamage() {
return 10F;
return 15F;
}
@Override

View File

@ -46,7 +46,7 @@ public class EntityGlyphidBombardier extends EntityGlyphid {
if(this.ticksExisted % 60 == 1) {
boolean topAttack = rand.nextBoolean();
boolean topAttack = false;
double velX = e.posX - lastX;
double velY = e.posY - lastY;
@ -55,7 +55,11 @@ public class EntityGlyphidBombardier extends EntityGlyphid {
if(this.lastTarget != e || Vec3.createVectorHelper(velX, velY, velZ).lengthVector() > 30) {
velX = velY = velZ = 0;
}
if (this.getDistanceToEntity(e) > 20) {
topAttack = true;
}
int prediction = topAttack ? 60 : 20;
Vec3 delta = Vec3.createVectorHelper(e.posX - posX + velX * prediction, (e.posY + e.height / 2) - (posY + 1) + velY * prediction, e.posZ - posZ + velZ * prediction);
double len = delta.lengthVector();
@ -91,7 +95,7 @@ public class EntityGlyphidBombardier extends EntityGlyphid {
}
public float getBombDamage() {
return 1.5F;
return 5F;
}
public int getBombCount() {

View File

@ -1,12 +1,26 @@
package com.hbm.entity.mob;
import com.hbm.entity.projectile.EntityRubble;
import com.hbm.lib.Library;
import com.hbm.main.ResourceManager;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.init.Blocks;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import java.util.List;
public class EntityGlyphidDigger extends EntityGlyphid {
protected Entity lastTarget;
protected double lastX;
protected double lastY;
protected double lastZ;
public EntityGlyphidDigger(World world) {
super(world);
@ -18,17 +32,121 @@ public class EntityGlyphidDigger extends EntityGlyphid {
@Override
public double getScale() {
return 1.25D;
return 1.3D;
}
@Override
protected void applyEntityAttributes() {
super.applyEntityAttributes();
this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(35D);
this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(50D);
this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(1D);
this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(5D);
}
public int timer = 0;
@Override
public void onUpdate(){
super.onUpdate();
Entity e = this.getEntityToAttack();
if (e != null) {
this.lastX = e.posX;
this.lastY = e.posY;
this.lastZ = e.posZ;
if (--timer <= 0) {
groundSlam();
timer = 120;
}
}
}
/**
* Mainly composed of crusty old power fist code, with some touch ups
**/
public void groundSlam(){
if (!worldObj.isRemote && entityToAttack instanceof EntityLivingBase && this.getDistanceToEntity(entityToAttack) < 30) {
Entity e = this.getEntityToAttack();
boolean topAttack = false;
int l = 6;
float part = -1F / 16F;
int bugX = (int) posX;
int bugY = (int) posY;
int bugZ = (int) posZ;
Vec3 vec0 = getLookVec();
List<int[]> list = Library.getBlockPosInPath(bugX, bugY, bugZ, l, vec0);
for (int i = 0; i < 8; i++) {
vec0.rotateAroundY(part);
list.addAll(Library.getBlockPosInPath(bugX, bugY - 1, bugZ, l, vec0));
}
double velX = e.posX - lastX;
double velY = e.posY - lastY;
double velZ = e.posZ - lastZ;
if(this.lastTarget != e) {
velX = velY = velZ = 0;
}
if (this.getDistanceToEntity(e) > 20) {
topAttack = true;
}
int prediction = 60;
Vec3 delta = Vec3.createVectorHelper(e.posX - posX + velX * prediction, (e.posY + e.height / 2) - (posY + 1) + velY * prediction, e.posZ - posZ + velZ * prediction);
double len = delta.lengthVector();
if(len < 3) return;
double targetYaw = -Math.atan2(delta.xCoord, delta.zCoord);
double x = Math.sqrt(delta.xCoord * delta.xCoord + delta.zCoord * delta.zCoord);
double y = delta.yCoord;
double v0 = 1.2;
double v02 = v0 * v0;
double g = 0.03D;
double upperLower = topAttack ? 1 : -1;
double targetPitch = Math.atan((v02 + Math.sqrt(v02*v02 - g*(g*x*x + 2*y*v02)) * upperLower) / (g*x));
Vec3 fireVec = null;
if(!Double.isNaN(targetPitch)) {
fireVec = Vec3.createVectorHelper(v0, 0, 0);
fireVec.rotateAroundZ((float) -targetPitch);
fireVec.rotateAroundY((float) -(targetYaw + Math.PI * 0.5));
}
for (int[] ints : list) {
int x1 = ints[0];
int y1 = ints[1];
int z1 = ints[2];
Block b = worldObj.getBlock(x1, y1, z1);
float k = b.getExplosionResistance(null);
if (k < 200 && b.isNormalCube()) {
EntityRubble rubble = new EntityRubble(worldObj);
rubble.posX = x1 + 0.5F;
rubble.posY = y1 + 2;
rubble.posZ = z1 + 0.5F;
rubble.setMetaBasedOnBlock(b, worldObj.getBlockMetadata(x1, y1, z1));
if(fireVec != null)
rubble.setThrowableHeading(fireVec.xCoord, fireVec.yCoord, fireVec.zCoord, (float) v0, rand.nextFloat());
worldObj.spawnEntityInWorld(rubble);
worldObj.setBlock(x1, y1, z1, Blocks.air);
}
}
}
}
@Override
public boolean isArmorBroken(float amount) {
return this.rand.nextInt(100) <= Math.min(Math.pow(amount * 0.25, 2), 100);

View File

@ -81,6 +81,7 @@ public class EntityGlyphidScout extends EntityGlyphid {
target.setLocationAndAngles(dirVec.xCoord, dirVec.yCoord, dirVec.zCoord, 0, 0);
target.maxAge = 300;
target.radius = 6;
target.setWaypointType(TASK_BUILD_HIVE);
worldObj.spawnEntityInWorld(target);
hasTarget = true;
@ -111,6 +112,10 @@ public class EntityGlyphidScout extends EntityGlyphid {
hasTarget = true;
}
}
//fixes edge case where glyphids have no task and yet hasTarget is true
if(taskWaypoint == null && hasTarget){
hasTarget = false;
}
if (getCurrentTask() == TASK_TERRAFORM && super.isAtDestination() && canBuildHiveHere()) {
communicate(TASK_TERRAFORM, taskWaypoint);
@ -291,6 +296,14 @@ public class EntityGlyphidScout extends EntityGlyphid {
return false;
}
@Override
protected Entity findPlayerToAttack() {
if(this.isPotionActive(Potion.blindness)) return null;
//no extended targeting, and a low attack distance, ensures the scouts are focused in expanding, and not in chasing the player
return this.worldObj.getClosestVulnerablePlayerToEntity(this, 10);
}
///RAMPANT MODE STUFFS
/** Finds the direction from the bug's location to the target and adds it to their current coord

View File

@ -12,16 +12,11 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
public class EntityRubble extends EntityThrowable {
public class EntityRubble extends EntityThrowableNT {
public EntityRubble(World p_i1773_1_)
public EntityRubble(World world)
{
super(p_i1773_1_);
}
public EntityRubble(World p_i1774_1_, EntityLivingBase p_i1774_2_)
{
super(p_i1774_1_, p_i1774_2_);
super(world);
}
@Override
@ -30,19 +25,18 @@ public class EntityRubble extends EntityThrowable {
this.dataWatcher.addObject(17, (int)Integer.valueOf(0));
}
public EntityRubble(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_)
{
super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_);
public EntityRubble(World world, double x, double y, double z) {
super(world, x, y, z);
}
@Override
protected void onImpact(MovingObjectPosition p_70184_1_)
protected void onImpact(MovingObjectPosition mop)
{
if (p_70184_1_.entityHit != null)
if (mop.entityHit != null)
{
byte b0 = 15;
p_70184_1_.entityHit.attackEntityFrom(ModDamageSource.rubble, b0);
mop.entityHit.attackEntityFrom(ModDamageSource.rubble, b0);
}
if(this.ticksExisted > 2) {
@ -55,7 +49,12 @@ public class EntityRubble extends EntityThrowable {
PacketDispatcher.wrapper.sendToAllAround(new ParticleBurstPacket((int)Math.floor(posX), (int)posY, (int)Math.floor(posZ), this.dataWatcher.getWatchableObjectInt(16), this.dataWatcher.getWatchableObjectInt(17)), new TargetPoint(worldObj.provider.dimensionId, posX, posY, posZ, 50));
}
}
@Override
protected float getAirDrag() {
return 1F;
}
public void setMetaBasedOnBlock(Block b, int i) {
this.dataWatcher.updateObject(16, Block.getIdFromBlock(b));

View File

@ -11,6 +11,7 @@ import java.util.UUID;
import com.hbm.config.MobConfig;
import com.hbm.config.RadiationConfig;
import com.hbm.entity.mob.EntityGlyphidDigger;
import com.hbm.entity.mob.EntityGlyphidScout;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
@ -354,7 +355,8 @@ public class PollutionHandler {
&& !event.world.isRemote
&& event.world.provider.dimensionId == 0
&& event.type == EnumCreatureType.monster
&& event.world.canBlockSeeTheSky(event.x, event.y, event.z)) {
&& event.world.canBlockSeeTheSky(event.x, event.y, event.z)
&& !event.isCanceled()) {
if (event.world.rand.nextInt(MobConfig.rampantScoutSpawnChance) == 0) {
@ -362,8 +364,12 @@ public class PollutionHandler {
if (soot >= MobConfig.rampantScoutSpawnThresh) {
EntityGlyphidScout scout = new EntityGlyphidScout(event.world);
//escort for the scout, which can also deal with obstacles
EntityGlyphidDigger digger = new EntityGlyphidDigger(event.world);
scout.setLocationAndAngles(event.x, event.y, event.z, event.world.rand.nextFloat() * 360.0F, 0.0F);
digger.setLocationAndAngles(event.x, event.y, event.z, event.world.rand.nextFloat() * 360.0F, 0.0F);
event.world.spawnEntityInWorld(scout);
event.world.spawnEntityInWorld(digger);
}
}
}

View File

@ -314,8 +314,8 @@ public class OreDictManager {
GOLD.plate(plate_gold).dust(powder_gold).ore(ore_gneiss_gold);
LAPIS.dust(powder_lapis);
NETHERQUARTZ.gem(Items.quartz).dust(powder_quartz).ore(Blocks.quartz_ore);
DIAMOND.dust(powder_diamond).ore(gravel_diamond);
EMERALD.dust(powder_emerald);
DIAMOND.dust(powder_diamond).ore(gravel_diamond, ore_sellafield_diamond);
EMERALD.dust(powder_emerald).ore(ore_sellafield_emerald);
/*
* RADIOACTIVE

View File

@ -1,7 +1,9 @@
package com.hbm.inventory.fluid.tank;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.lwjgl.opengl.GL11;
@ -15,6 +17,7 @@ import com.hbm.packet.TEFluidPacket;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@ -22,8 +25,9 @@ import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper;
public class FluidTank {
public static final List<FluidLoadingHandler> loadingHandlers = new ArrayList();
public static final Set<Item> noDualUnload = new HashSet();
static {
loadingHandlers.add(new FluidLoaderStandard());

View File

@ -4,15 +4,18 @@ import org.lwjgl.opengl.GL11;
import com.hbm.inventory.container.ContainerFunnel;
import com.hbm.lib.RefStrings;
import com.hbm.packet.NBTControlPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.machine.TileEntityMachineFunnel;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
public class GUIFunnel extends GuiContainer {
public class GUIFunnel extends GuiInfoContainer {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_funnel.png");
private TileEntityMachineFunnel funnel;
@ -24,6 +27,25 @@ public class GUIFunnel extends GuiContainer {
this.xSize = 176;
this.ySize = 168;
}
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
super.drawScreen(mouseX, mouseY, f);
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 159, guiTop + 73, 10, 10, mouseX, mouseY, "Mode: " + (funnel.mode == funnel.MODE_3x3 ? "3x3 only" : funnel.mode == funnel.MODE_2x2 ? "2x2 only" : "3x3 then 2x2"));
}
@Override
protected void mouseClicked(int x, int y, int i) {
super.mouseClicked(x, y, i);
if(this.checkClick(x, y, 159, 73, 10, 10)) {
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
NBTTagCompound data = new NBTTagCompound();
data.setBoolean("toggle", true);
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, funnel.xCoord, funnel.yCoord, funnel.zCoord));
}
}
@Override
protected void drawGuiContainerForegroundLayer(int i, int j) {
@ -38,5 +60,7 @@ public class GUIFunnel extends GuiContainer {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
drawTexturedModalRect(guiLeft + 159, guiTop + 73, 176, funnel.mode * 10, 10, 10);
}
}

View File

@ -2,7 +2,6 @@ package com.hbm.inventory.gui;
import com.hbm.inventory.container.ContainerMachineStrandCaster;
import com.hbm.inventory.material.Mats;
import com.hbm.inventory.material.NTMMaterial.SmeltingBehavior;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityMachineStrandCaster;
import com.hbm.util.I18nUtil;
@ -21,78 +20,77 @@ import java.util.List;
public class GUIMachineStrandCaster extends GuiInfoContainer {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_strand_caster.png");
private TileEntityMachineStrandCaster caster;
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_strand_caster.png");
private TileEntityMachineStrandCaster caster;
public GUIMachineStrandCaster(InventoryPlayer invPlayer, TileEntityMachineStrandCaster tedf) {
super(new ContainerMachineStrandCaster(invPlayer, tedf));
caster = tedf;
public GUIMachineStrandCaster(InventoryPlayer invPlayer, TileEntityMachineStrandCaster tedf) {
super(new ContainerMachineStrandCaster(invPlayer, tedf));
caster = tedf;
this.xSize = 176;
this.ySize = 214;
}
this.xSize = 176;
this.ySize = 214;
}
@Override
public void drawScreen(int x, int y, float interp) {
super.drawScreen(x, y, interp);
@Override
public void drawScreen(int x, int y, float interp) {
super.drawScreen(x, y, interp);
drawStackInfo(x, y, 16, 17);
drawStackInfo(x, y, 16, 17);
caster.water.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 14, 16, 24);
caster.steam.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 64, 16, 24);
}
caster.water.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 14, 16, 24);
caster.steam.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 65, 16, 24);
}
@Override
protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.caster.hasCustomInventoryName() ? this.caster.getInventoryName() : I18n.format(this.caster.getInventoryName());
@Override
protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.caster.hasCustomInventoryName() ? this.caster.getInventoryName() : I18n.format(this.caster.getInventoryName());
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 4, 0xffffff);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
}
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 4, 0xffffff);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
}
@Override
protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
@Override
protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
if (caster.amount != 0) {
if(caster.amount != 0) {
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
int targetHeight = Math.min((caster.amount) * 79 / caster.getCapacity(), 92);
int targetHeight = Math.min((caster.amount) * 79 / caster.getCapacity(), 92);
int hex = caster.type.moltenColor;
//hex = 0xC18336;
Color color = new Color(hex);
GL11.glColor3f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F);
drawTexturedModalRect(guiLeft + 17, guiTop + 93 - targetHeight, 176, 89 - targetHeight, 34, targetHeight);
GL11.glEnable(GL11.GL_BLEND);
GL11.glColor4f(1F, 1F, 1F, 0.3F);
drawTexturedModalRect(guiLeft + 17, guiTop + 93 - targetHeight, 176, 89 - targetHeight, 34, targetHeight);
GL11.glDisable(GL11.GL_BLEND);
int hex = caster.type.moltenColor;
// hex = 0xC18336;
Color color = new Color(hex);
GL11.glColor3f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F);
drawTexturedModalRect(guiLeft + 17, guiTop + 93 - targetHeight, 176, 89 - targetHeight, 34, targetHeight);
GL11.glEnable(GL11.GL_BLEND);
GL11.glColor4f(1F, 1F, 1F, 0.3F);
drawTexturedModalRect(guiLeft + 17, guiTop + 93 - targetHeight, 176, 89 - targetHeight, 34, targetHeight);
GL11.glDisable(GL11.GL_BLEND);
}
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
GL11.glColor3f(255, 255, 255);
}
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
GL11.glColor3f(255, 255, 255);
caster.water.renderTank(guiLeft + 82, guiTop + 38, this.zLevel, 16, 24);
caster.steam.renderTank(guiLeft + 82, guiTop + 90, this.zLevel, 16, 24);
caster.water.renderTank(guiLeft + 82, guiTop + 38, this.zLevel, 16, 24);
caster.steam.renderTank(guiLeft + 82, guiTop + 89, this.zLevel, 16, 24);
}
}
protected void drawStackInfo(int mouseX, int mouseY, int x, int y) {
protected void drawStackInfo(int mouseX, int mouseY, int x, int y) {
List<String> list = new ArrayList();
List<String> list = new ArrayList();
if (caster.type == null) list.add(EnumChatFormatting.RED + "Empty");
else
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey(caster.type.getUnlocalizedName()) + ": " + Mats.formatAmount(caster.amount, Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)));
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + x, guiTop + y, 36, 81, mouseX, mouseY, list);
}
if(caster.type == null)
list.add(EnumChatFormatting.RED + "Empty");
else
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey(caster.type.getUnlocalizedName()) + ": " + Mats.formatAmount(caster.amount, Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)));
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + x, guiTop + y, 36, 81, mouseX, mouseY, list);
}
}

View File

@ -9,6 +9,7 @@ import com.hbm.handler.WeaponAbility;
import com.hbm.handler.guncfg.*;
import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.inventory.material.MaterialShapes;
import com.hbm.inventory.material.Mats;
import com.hbm.items.ItemAmmoEnums.*;
@ -934,6 +935,9 @@ public class ModItems {
public static Item fluid_barrel_full;
public static Item fluid_barrel_empty;
public static Item fluid_barrel_infinite;
public static Item pipette;
public static Item pipette_boron;
public static Item pipette_laboratory;
public static Item disperser_canister_empty;
public static Item disperser_canister;
@ -3005,6 +3009,7 @@ public class ModItems {
component_limiter = new Item().setUnlocalizedName("component_limiter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_limiter");
component_emitter = new Item().setUnlocalizedName("component_emitter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":component_emitter");
chlorine_pinwheel = new ItemInfiniteFluid(Fluids.CHLORINE, 1, 2).setUnlocalizedName("chlorine_pinwheel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":chlorine_pinwheel");
FluidTank.noDualUnload.add(chlorine_pinwheel);
ring_starmetal = new Item().setUnlocalizedName("ring_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ring_starmetal");
flywheel_beryllium = new Item().setUnlocalizedName("flywheel_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flywheel_beryllium");
deuterium_filter = new Item().setUnlocalizedName("deuterium_filter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":deuterium_filter");
@ -3235,8 +3240,6 @@ public class ModItems {
singularity_spark = new ItemDrop().setUnlocalizedName("singularity_spark").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity_spark_alt");
pellet_antimatter = new ItemDrop().setUnlocalizedName("pellet_antimatter").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":pellet_antimatter");
crystal_xen = new ItemDrop().setUnlocalizedName("crystal_xen").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":crystal_xen");
inf_water = new ItemInfiniteFluid(Fluids.WATER, 50).setUnlocalizedName("inf_water").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":inf_water");
inf_water_mk2 = new ItemInfiniteFluid(Fluids.WATER, 500).setUnlocalizedName("inf_water_mk2").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":inf_water_mk2");
stamp_stone_flat = new ItemStamp(10, StampType.FLAT).setUnlocalizedName("stamp_stone_flat").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_flat");
stamp_stone_plate = new ItemStamp(10, StampType.PLATE).setUnlocalizedName("stamp_stone_plate").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_stone_plate");
@ -4652,7 +4655,16 @@ public class ModItems {
fluid_barrel_empty = new Item().setUnlocalizedName("fluid_barrel_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel");
fluid_barrel_full = new ItemFluidTank().setUnlocalizedName("fluid_barrel_full").setContainerItem(ModItems.fluid_barrel_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel");
fluid_barrel_infinite = new ItemInfiniteFluid(null, 1_000_000_000).setUnlocalizedName("fluid_barrel_infinite").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel_infinite");
pipette = new ItemPipette().setUnlocalizedName("pipette").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette");
pipette_boron = new ItemPipette().setUnlocalizedName("pipette_boron").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette_boron");
pipette_laboratory = new ItemPipette().setUnlocalizedName("pipette_laboratory").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":pipette_laboratory");
inf_water = new ItemInfiniteFluid(Fluids.WATER, 50).setUnlocalizedName("inf_water").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":inf_water");
inf_water_mk2 = new ItemInfiniteFluid(Fluids.WATER, 500).setUnlocalizedName("inf_water_mk2").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":inf_water_mk2");
FluidTank.noDualUnload.add(fluid_barrel_infinite);
FluidTank.noDualUnload.add(inf_water);
FluidTank.noDualUnload.add(inf_water_mk2);
disperser_canister_empty = new Item().setUnlocalizedName("disperser_canister_empty").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":disperser_canister");
disperser_canister = new ItemDisperser().setUnlocalizedName("disperser_canister").setContainerItem(ModItems.disperser_canister_empty).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":disperser_canister");
@ -6381,6 +6393,11 @@ public class ModItems {
GameRegistry.registerItem(fluid_barrel_full, fluid_barrel_full.getUnlocalizedName());
GameRegistry.registerItem(fluid_barrel_infinite, fluid_barrel_infinite.getUnlocalizedName());
//Pipette
GameRegistry.registerItem(pipette, pipette.getUnlocalizedName());
GameRegistry.registerItem(pipette_boron, pipette_boron.getUnlocalizedName());
GameRegistry.registerItem(pipette_laboratory, pipette_laboratory.getUnlocalizedName());
//Disperser Canister
GameRegistry.registerItem(disperser_canister_empty, disperser_canister_empty.getUnlocalizedName());
GameRegistry.registerItem(disperser_canister, disperser_canister.getUnlocalizedName());

View File

@ -50,6 +50,7 @@ public class ArmorTrenchmaster extends ArmorFSB {
@Override
public void handleHurt(LivingHurtEvent event) {
super.handleHurt(event);
EntityLivingBase e = event.entityLiving;
@ -68,6 +69,7 @@ public class ArmorTrenchmaster extends ArmorFSB {
@Override
public void handleAttack(LivingAttackEvent event) {
super.handleAttack(event);
EntityLivingBase e = event.entityLiving;

View File

@ -57,84 +57,6 @@ public class ItemMachineUpgrade extends Item {
}
}
if(this.type == UpgradeType.SPEED) {
list.add(EnumChatFormatting.RED + "Mining Drill:");
list.add("Delay -" + (15 * this.tier) + "% / Consumption +" + (300 * this.tier) + "HE/t");
list.add(EnumChatFormatting.RED + "Laser Miner:");
list.add("Delay ÷" + (1 + this.tier) + " / Consumption +" + (625 * this.tier) + "HE/t");
list.add(EnumChatFormatting.RED + "Electric Furnace:");
list.add("Delay -" + (25 * this.tier) + "% / Consumption +" + (50 * this.tier) + "HE/t");
list.add(EnumChatFormatting.RED + "Assembly Machine:");
list.add("Delay -" + (25 * this.tier) + "% / Consumption +" + (300 * this.tier) + "HE/t");
list.add(EnumChatFormatting.RED + "Chemical Plant:");
list.add("Delay -" + (25 * this.tier) + "% / Consumption +" + (300 * this.tier) + "HE/t");
list.add(EnumChatFormatting.RED + "Oil Wells:");
list.add("Delay -" + (25 * this.tier) + "% / Consumption +" + (25 * this.tier) + "%");
list.add(EnumChatFormatting.RED + "Crystallizer:");
list.add("Delay -" + (20 * this.tier) + "% / Consumption +" + (1000 * this.tier) + "HE/t");
list.add(EnumChatFormatting.RED + "Cyclotron:");
list.add("Speed x" + (1 + this.tier));
list.add(EnumChatFormatting.RED + "Flare Stack:");
list.add("Speed x" + (1 + this.tier));
list.add(EnumChatFormatting.RED + "Maxwell:");
list.add("Damage +" + (0.25 * (double)this.tier) + "dmg/t");
}
if(this.type == UpgradeType.EFFECT) {
list.add(EnumChatFormatting.RED + "Mining Drill:");
list.add("Radius +" + this.tier + "m / Consumption +" + (80 * this.tier) + "HE/t");
list.add(EnumChatFormatting.RED + "Crystallizer:");
list.add("+" + (5 * this.tier) + "% chance of not consuming an item / Acid consumption +" + (1000 * this.tier) + "mB");
list.add(EnumChatFormatting.RED + "Cyclotron:");
list.add("-" + (100 - 100 / (this.tier + 1)) + "% chance of incrementing overheat counter");
list.add(EnumChatFormatting.RED + "Flare Stack:");
list.add("+" + (100 * this.tier / 3) + "% power production");
list.add(EnumChatFormatting.RED + "Maxwell:");
list.add("Range +" + (3 * this.tier) + "m");
}
if(this.type == UpgradeType.POWER) {
list.add(EnumChatFormatting.RED + "Mining Drill:");
list.add("Consumption -" + (30 * this.tier) + "HE/t / Delay +" + (5 * this.tier) + "%");
list.add(EnumChatFormatting.RED + "Electric Furnace:");
list.add("Consumption -" + (15 * this.tier) + "HE/t / Delay +" + (10 * this.tier) + "%");
list.add(EnumChatFormatting.RED + "Assembly Machine:");
list.add("Consumption -" + (30 * this.tier) + "HE/t / Delay +" + (5 * this.tier) + "%");
list.add(EnumChatFormatting.RED + "Chemical Plant:");
list.add("Consumption -" + (30 * this.tier) + "HE/t / Delay +" + (5 * this.tier) + "%");
list.add(EnumChatFormatting.RED + "Oil Wells:");
list.add("Consumption -" + (25 * this.tier) + "% / Delay +" + (10 * this.tier) + "%");
list.add(EnumChatFormatting.RED + "Cyclotron:");
list.add("Consumption -" + (100 * this.tier) + "kHE/t");
list.add(EnumChatFormatting.RED + "Maxwell:");
list.add("Consumption -" + (150 * this.tier) + "HE/t");
list.add("Consumption when firing -" + (1500 * this.tier) + "HE/t");
}
if(this == ModItems.upgrade_fortune_1) {
list.add(EnumChatFormatting.RED + "Mining Drill:");
list.add("Fortune +1 / Delay +15");
}
if(this == ModItems.upgrade_fortune_2) {
list.add(EnumChatFormatting.RED + "Mining Drill:");
list.add("Fortune +2 / Delay +30");
}
if(this == ModItems.upgrade_fortune_3) {
list.add(EnumChatFormatting.RED + "Mining Drill:");
list.add("Fortune +3 / Delay +45");
}
if(this.type == UpgradeType.AFTERBURN) {
list.add(EnumChatFormatting.RED + "Turbofan:");
list.add("Production x" + (this.tier + 1) + " / Consumption x" + (this.tier + 2));
list.add(EnumChatFormatting.RED + "Maxwell:");
list.add("Afterburn +" + (this.tier * 3) + "s");
list.add(EnumChatFormatting.RED + "Oil Wells:");
list.add("Burn " + (this.tier * 10) + "mB of gas for " + (this.tier * 50) + "HE/t");
}
if(this == ModItems.upgrade_radius) {
list.add(EnumChatFormatting.RED + "Forcefield Range Upgrade");
list.add("Radius +16 / Consumption +500");

View File

@ -0,0 +1,202 @@
package com.hbm.items.tool;
import api.hbm.fluid.IFillableItem;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.items.ModItems;
import com.hbm.util.I18nUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import java.util.List;
public class ItemPipette extends Item implements IFillableItem {
public ItemPipette() {
this.canRepair = false;
this.setMaxDamage(1);
}
@SideOnly(Side.CLIENT) protected IIcon overlayIcon;
@SideOnly(Side.CLIENT) protected IIcon emptyIcon;
public short getMaxFill() {
if(this == ModItems.pipette_laboratory) return 50;
else return 1_000;
}
public void initNBT(ItemStack stack) {
stack.stackTagCompound = new NBTTagCompound();
this.setFill(stack, Fluids.NONE, (short) 0); // sets "type" and "fill" NBT
stack.stackTagCompound.setShort("capacity", this.getMaxFill()); // set "capacity"
}
public FluidType getType(ItemStack stack) {
if(!stack.hasTagCompound()) {
initNBT(stack);
}
return Fluids.fromID(stack.stackTagCompound.getShort("type"));
}
public short getCapacity(ItemStack stack) {
if(!stack.hasTagCompound()) {
initNBT(stack);
}
return stack.stackTagCompound.getShort("capacity");
}
public void setFill(ItemStack stack, FluidType type, short fill) {
if(!stack.hasTagCompound()) {
initNBT(stack);
}
stack.stackTagCompound.setShort("type", (short) type.getID());
stack.stackTagCompound.setShort("fill", fill);
}
public short getFill(ItemStack stack) {
if(!stack.hasTagCompound()) {
initNBT(stack);
}
return stack.stackTagCompound.getShort("fill");
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if(!stack.hasTagCompound()) {
initNBT(stack);
}
if(!world.isRemote) {
if(this.getFill(stack) == 0) {
int a;
if(this == ModItems.pipette_laboratory)
a = !player.isSneaking() ? Math.min(this.getCapacity(stack) + 1, 50) : Math.max(this.getCapacity(stack) - 1, 1);
else
a = !player.isSneaking() ? Math.min(this.getCapacity(stack) + 50, 1_000) : Math.max(this.getCapacity(stack) - 50, 50);
stack.stackTagCompound.setShort("capacity", (short) a);
player.addChatMessage(new ChatComponentText(a + "/" + this.getMaxFill() + "mB"));
} else {
player.addChatMessage(new ChatComponentText(I18nUtil.resolveKey("desc.item.pipette.noEmpty")));
}
}
return stack;
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
if(this == ModItems.pipette_laboratory) {
list.add(I18nUtil.resolveKey("desc.item.pipette.corrosive"));
list.add(I18nUtil.resolveKey("desc.item.pipette.laboratory"));
}
if(this == ModItems.pipette_boron)
list.add(I18nUtil.resolveKey("desc.item.pipette.corrosive"));
if(this == ModItems.pipette)
list.add(I18nUtil.resolveKey("desc.item.pipette.noCorrosive"));
list.add("Fluid: " + this.getType(stack).getLocalizedName());
list.add("Amount: " + this.getFill(stack) + "/" + this.getCapacity(stack) + "mB (" + this.getMaxFill() + "mB)");
}
@Override
public boolean acceptsFluid(FluidType type, ItemStack stack) {
return (type == this.getType(stack) || this.getFill(stack) == 0) && (!type.isAntimatter());
}
@Override
public int tryFill(FluidType type, int amount, ItemStack stack) {
if(!acceptsFluid(type, stack))
return amount;
if(this.getFill(stack) == 0)
this.setFill(stack, type, (short) 0);
int req = this.getCapacity(stack) - this.getFill(stack);
int toFill = Math.min(req, amount);
this.setFill(stack, type, (short) (this.getFill(stack) + toFill));
// fizzling checks
if(this.getFill(stack) > 0 && (this.getType(stack).isCorrosive() && type != Fluids.ACID)) {
if(this == ModItems.pipette) {
stack.stackSize = 0;
}
}
return amount - toFill;
}
@Override
public boolean providesFluid(FluidType type, ItemStack stack) {
return this.getType(stack) == type;
}
@Override
public int tryEmpty(FluidType type, int amount, ItemStack stack) {
if(providesFluid(type, stack)) {
int toUnload = Math.min(amount, this.getFill(stack));
this.setFill(stack, type, (short) (this.getFill(stack) - toUnload));
if(this.getFill(stack) == 0)
this.setFill(stack, Fluids.NONE, (short) 0);
return toUnload;
}
return amount;
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister icon) {
super.registerIcons(icon);
if(this == ModItems.pipette_laboratory)
this.overlayIcon = icon.registerIcon("hbm:pipette_laboratory_overlay");
else
this.overlayIcon = icon.registerIcon("hbm:pipette_overlay");
this.emptyIcon = icon.registerIcon("hbm:pipette_empty");
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(ItemStack stack, int pass) {
if(getFill(stack) == 0 && pass == 1) return this.emptyIcon;
return pass == 1 ? this.overlayIcon : getIconFromDamageForRenderPass(stack.getItemDamage(), pass);
}
@Override
@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses() {
return true;
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int pass) {
if(pass == 0) {
return 0xffffff;
} else {
int j = this.getType(stack).getColor();
if(j < 0) {
j = 0xffffff;
}
return j;
}
}
}

View File

@ -3,7 +3,7 @@ package com.hbm.lib;
public class RefStrings {
public static final String MODID = "hbm";
public static final String NAME = "Hbm's Nuclear Tech Mod";
public static final String VERSION = "1.0.27 BETA (4837)";
public static final String VERSION = "1.0.27 BETA (4845)";
//HBM's Beta Naming Convention:
//V T (X)
//V -> next release version

View File

@ -41,6 +41,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
@ -90,6 +91,7 @@ import com.hbm.render.entity.mob.*;
import com.hbm.render.entity.projectile.*;
import com.hbm.render.entity.rocket.*;
import com.hbm.render.item.*;
import com.hbm.render.item.ItemRenderMissileGeneric.RenderMissileType;
import com.hbm.render.item.block.*;
import com.hbm.render.item.weapon.*;
import com.hbm.render.loader.HmfModelLoader;
@ -415,10 +417,36 @@ public class ClientProxy extends ServerProxy {
MinecraftForgeClient.registerItemRenderer(ModItems.cmb_sword, new ItemRenderTransformer(rtp, ttp_high, stp, rfp, tfp, sfp, rir, tir, sir));
MinecraftForgeClient.registerItemRenderer(ModItems.dnt_sword, new ItemRenderTransformer(rtp, ttp_high, stp, rfp, tfp, sfp, rir, tir, sir));
/*for(ItemSwordMeteorite sword : ItemSwordMeteorite.swords) {
MinecraftForgeClient.registerItemRenderer(sword, new ItemRenderTransformer(rtp, ttp_high, stp, rfp, tfp, sfp, rir, tir, sir));
}*/
ItemRenderMissileGeneric.init();
MinecraftForgeClient.registerItemRenderer(ModItems.missile_taint, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER0));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_micro, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER0));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_bhole, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER0));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_schrabidium, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER0));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_emp, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER0));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_stealth, new ItemRenderMissileGeneric(RenderMissileType.TYPE_STEALTH));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_generic, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER1));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_incendiary, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER1));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_cluster, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER1));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_buster, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER1));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_decoy, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER1));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_anti_ballistic, new ItemRenderMissileGeneric(RenderMissileType.TYPE_ABM));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_strong, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER2));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_incendiary_strong, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER2));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_cluster_strong, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER2));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_buster_strong, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER2));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_emp_strong, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER2));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_burst, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER3));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_inferno, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER3));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_rain, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER3));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_drill, new ItemRenderMissileGeneric(RenderMissileType.TYPE_TIER3));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_nuclear, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_nuclear_cluster, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_volcano, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_endo, new ItemRenderMissileGeneric(RenderMissileType.TYPE_THERMAL));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_exo, new ItemRenderMissileGeneric(RenderMissileType.TYPE_THERMAL));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_doomsday, new ItemRenderMissileGeneric(RenderMissileType.TYPE_DOOMSDAY));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_carrier, new ItemRenderMissileGeneric(RenderMissileType.TYPE_CARRIER));
MinecraftForgeClient.registerItemRenderer(ModItems.missile_shuttle, new ItemRenderMissileGeneric(RenderMissileType.TYPE_ROBIN));
//test crap
MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.test_bomb_advanced), new ItemRenderTestBombAdvanced());

View File

@ -295,7 +295,7 @@ public class MainRegistry {
OreDictManager.registerGroups(); //important to run first
OreDictManager.registerOres();
BiomeGenCraterBase.initDictionary();
if(WorldConfig.enableCraterBiomes) BiomeGenCraterBase.initDictionary();
Library.superuser.add("192af5d7-ed0f-48d8-bd89-9d41af8524f8");
Library.superuser.add("5aee1e3d-3767-4987-a222-e7ce1fbdf88e");

View File

@ -349,6 +349,9 @@ public class ResourceManager {
public static WavefrontObjDisplayList large_vehicle_door = new WavefrontObjDisplayList(new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/doors/large_vehicle_door.obj")));
public static final ResourceLocation qe_containment_decal = new ResourceLocation(RefStrings.MODID, "textures/models/doors/qe_containment_decal.png");
public static final ResourceLocation silo_hatch_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/silo_hatch.png");
public static WavefrontObjDisplayList silo_hatch = new WavefrontObjDisplayList(new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/doors/silo_hatch.obj")));
//Lantern
public static final IModelCustom lantern = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/trinkets/lantern.obj"));

View File

@ -18,6 +18,7 @@ public class RenderMissileNuclear extends Render {
GL11.glPushMatrix();
GL11.glTranslatef((float) p_76986_2_, (float) p_76986_4_, (float) p_76986_6_);
GL11.glScalef(1.5F, 1.5F, 1.5F);
GL11.glRotatef(missile.prevRotationYaw + (missile.rotationYaw - missile.prevRotationYaw) * p_76986_9_ - 90.0F, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(missile.prevRotationPitch + (missile.rotationPitch - missile.prevRotationPitch) * p_76986_9_, 0.0F, 0.0F, 1.0F);

View File

@ -0,0 +1,192 @@
package com.hbm.render.item;
import java.util.HashMap;
import java.util.function.Consumer;
import org.lwjgl.opengl.GL11;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.items.ModItems;
import com.hbm.main.ResourceManager;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.model.IModelCustom;
public class ItemRenderMissileGeneric implements IItemRenderer {
public static HashMap<ComparableStack, Consumer<TextureManager>> renderers = new HashMap();
protected RenderMissileType type;
public static enum RenderMissileType {
TYPE_TIER0,
TYPE_TIER1,
TYPE_TIER2,
TYPE_TIER3,
TYPE_STEALTH,
TYPE_ABM,
TYPE_NUCLEAR,
TYPE_THERMAL,
TYPE_DOOMSDAY,
TYPE_CARRIER,
TYPE_ROBIN
}
public ItemRenderMissileGeneric(RenderMissileType type) {
this.type = type;
}
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
switch(type) {
case EQUIPPED:
case EQUIPPED_FIRST_PERSON:
case ENTITY:
case INVENTORY:
return true;
default: return false;
}
}
@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
return helper == ItemRendererHelper.ENTITY_BOBBING || helper == ItemRendererHelper.ENTITY_ROTATION;
}
@Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
Consumer<TextureManager> renderer = renderers.get(new ComparableStack(item).makeSingular());
if(renderer == null) return;
GL11.glPushMatrix();
double guiScale = 1;
double guiOffset = 0;
switch(this.type) {
case TYPE_TIER0: guiScale = 2.25D; guiOffset = 7.5D; break;
case TYPE_TIER1: guiScale = 2.5D; guiOffset = 8.5D; break;
case TYPE_TIER2: guiScale = 2D; guiOffset = 6.5D; break;
case TYPE_TIER3: guiScale = 1.25D; guiOffset = 1D; break;
case TYPE_STEALTH: guiScale = 1.75D; guiOffset = 4.75D; break;
case TYPE_ABM: guiScale = 2.25D; guiOffset = 7D; break;
case TYPE_NUCLEAR: guiScale = 1.75D; guiOffset = 4D; break;
case TYPE_THERMAL: guiScale = 1.75D; guiOffset = 4.5D; break;
case TYPE_DOOMSDAY: guiScale = 1.5D; guiOffset = 3D; break;
case TYPE_CARRIER: guiScale = 0.625D; guiOffset = -17D; break;
case TYPE_ROBIN: guiScale = 1.25D; guiOffset = 2D; break;
}
switch(type) {
case EQUIPPED:
double s = 0.15;
GL11.glTranslated(0.5, -0.25, 0);
GL11.glScaled(s, s, s);
break;
case EQUIPPED_FIRST_PERSON:
double heldScale = 0.1;
GL11.glTranslated(0.5, 0.25, 0);
GL11.glScaled(heldScale, heldScale, heldScale);
break;
case ENTITY:
double s2 = 0.15;
GL11.glScaled(s2, s2, s2);
break;
case INVENTORY:
RenderHelper.enableGUIStandardItemLighting();
GL11.glScaled(guiScale, guiScale, guiScale);
GL11.glRotated(135, 0, 0, 1);
GL11.glRotatef(System.currentTimeMillis() / 15 % 360, 0, 1, 0);
GL11.glTranslated(0, -16 + guiOffset, 0);
break;
default: break;
}
GL11.glDisable(GL11.GL_CULL_FACE);
renderer.accept(Minecraft.getMinecraft().renderEngine);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glPopMatrix();
}
public static Consumer<TextureManager> generateStandard(ResourceLocation texture, IModelCustom model) { return generateWithScale(texture, model, 1F); }
public static Consumer<TextureManager> generateLarge(ResourceLocation texture, IModelCustom model) { return generateWithScale(texture, model, 1.5F); }
public static Consumer<TextureManager> generateDouble(ResourceLocation texture, IModelCustom model) { return generateWithScale(texture, model, 2F); }
public static Consumer<TextureManager> generateWithScale(ResourceLocation texture, IModelCustom model, float scale) {
return x -> {
GL11.glScalef(scale, scale, scale);
GL11.glShadeModel(GL11.GL_SMOOTH);
x.bindTexture(texture); model.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
};
}
public static void init() {
renderers.put(new ComparableStack(ModItems.missile_taint), generateDouble(ResourceManager.missileTaint_tex, ResourceManager.missileTaint));
renderers.put(new ComparableStack(ModItems.missile_micro), generateDouble(ResourceManager.missileMicro_tex, ResourceManager.missileTaint));
renderers.put(new ComparableStack(ModItems.missile_bhole), generateDouble(ResourceManager.missileMicroBHole_tex, ResourceManager.missileTaint));
renderers.put(new ComparableStack(ModItems.missile_schrabidium), generateDouble(ResourceManager.missileMicroSchrab_tex, ResourceManager.missileTaint));
renderers.put(new ComparableStack(ModItems.missile_emp), generateDouble(ResourceManager.missileMicroEMP_tex, ResourceManager.missileTaint));
renderers.put(new ComparableStack(ModItems.missile_stealth), x -> {
GL11.glShadeModel(GL11.GL_SMOOTH);
x.bindTexture(ResourceManager.missileStealth_tex); ResourceManager.missileStealth.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
});
renderers.put(new ComparableStack(ModItems.missile_generic), generateStandard(ResourceManager.missileV2_HE_tex, ResourceManager.missileV2));
renderers.put(new ComparableStack(ModItems.missile_incendiary), generateStandard(ResourceManager.missileV2_IN_tex, ResourceManager.missileV2));
renderers.put(new ComparableStack(ModItems.missile_cluster), generateStandard(ResourceManager.missileV2_CL_tex, ResourceManager.missileV2));
renderers.put(new ComparableStack(ModItems.missile_buster), generateStandard(ResourceManager.missileV2_BU_tex, ResourceManager.missileV2));
renderers.put(new ComparableStack(ModItems.missile_decoy), generateStandard(ResourceManager.missileV2_decoy_tex, ResourceManager.missileV2));
renderers.put(new ComparableStack(ModItems.missile_anti_ballistic), generateStandard(ResourceManager.missileAA_tex, ResourceManager.missileABM));
renderers.put(new ComparableStack(ModItems.missile_strong), generateLarge(ResourceManager.missileStrong_HE_tex, ResourceManager.missileStrong));
renderers.put(new ComparableStack(ModItems.missile_incendiary_strong), generateLarge(ResourceManager.missileStrong_IN_tex, ResourceManager.missileStrong));
renderers.put(new ComparableStack(ModItems.missile_cluster_strong), generateLarge(ResourceManager.missileStrong_CL_tex, ResourceManager.missileStrong));
renderers.put(new ComparableStack(ModItems.missile_buster_strong), generateLarge(ResourceManager.missileStrong_BU_tex, ResourceManager.missileStrong));
renderers.put(new ComparableStack(ModItems.missile_emp_strong), generateLarge(ResourceManager.missileStrong_EMP_tex, ResourceManager.missileStrong));
renderers.put(new ComparableStack(ModItems.missile_burst), generateStandard(ResourceManager.missileHuge_HE_tex, ResourceManager.missileHuge));
renderers.put(new ComparableStack(ModItems.missile_inferno), generateStandard(ResourceManager.missileHuge_IN_tex, ResourceManager.missileHuge));
renderers.put(new ComparableStack(ModItems.missile_rain), generateStandard(ResourceManager.missileHuge_CL_tex, ResourceManager.missileHuge));
renderers.put(new ComparableStack(ModItems.missile_drill), generateStandard(ResourceManager.missileHuge_BU_tex, ResourceManager.missileHuge));
renderers.put(new ComparableStack(ModItems.missile_nuclear), generateLarge(ResourceManager.missileNuclear_tex, ResourceManager.missileNuclear));
renderers.put(new ComparableStack(ModItems.missile_nuclear_cluster), generateLarge(ResourceManager.missileMIRV_tex, ResourceManager.missileNuclear));
renderers.put(new ComparableStack(ModItems.missile_volcano), generateLarge(ResourceManager.missileVolcano_tex, ResourceManager.missileNuclear));
renderers.put(new ComparableStack(ModItems.missile_endo), generateLarge(ResourceManager.missileEndo_tex, ResourceManager.missileThermo));
renderers.put(new ComparableStack(ModItems.missile_exo), generateLarge(ResourceManager.missileExo_tex, ResourceManager.missileThermo));
renderers.put(new ComparableStack(ModItems.missile_doomsday), generateDouble(ResourceManager.missileDoomsday_tex, ResourceManager.missileDoomsday));
renderers.put(new ComparableStack(ModItems.missile_carrier), x -> {
GL11.glScalef(2F, 2F, 2F);
x.bindTexture(ResourceManager.missileCarrier_tex);
ResourceManager.missileCarrier.renderAll();
GL11.glTranslated(0.0D, 0.5D, 0.0D);
GL11.glTranslated(1.25D, 0.0D, 0.0D);
x.bindTexture(ResourceManager.missileBooster_tex);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(-2.5D, 0.0D, 0.0D);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(1.25D, 0.0D, 0.0D);
GL11.glTranslated(0.0D, 0.0D, 1.25D);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(0.0D, 0.0D, -2.5D);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(0.0D, 0.0D, 1.25D);
});
renderers.put(new ComparableStack(ModItems.missile_shuttle), generateStandard(ResourceManager.missileShuttle_tex, ResourceManager.missileShuttle));
}
}

View File

@ -6,10 +6,14 @@ import com.hbm.render.util.RenderItemStack;
import com.hbm.render.util.RenderMiscEffects;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureUtil;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.client.IItemRenderer;
public class ItemRendererMeteorSword implements IItemRenderer {
@ -17,16 +21,16 @@ public class ItemRendererMeteorSword implements IItemRenderer {
float r;
float g;
float b;
public ItemRendererMeteorSword(float r, float g, float b) {
this.r = r;
this.g = g;
this.b = b;
}
@Override
public boolean handleRenderType(ItemStack stack, ItemRenderType type) {
return type == ItemRenderType.INVENTORY;
return type != ItemRenderType.ENTITY;
}
@Override
@ -39,56 +43,138 @@ public class ItemRendererMeteorSword implements IItemRenderer {
GL11.glPushMatrix();
RenderHelper.enableGUIStandardItemLighting();
Minecraft mc = Minecraft.getMinecraft();
RenderItemStack.renderItem.renderItemIntoGUI(mc.fontRenderer, mc.renderEngine, item, 0, 0);
switch(type) {
mc.renderEngine.bindTexture(RenderMiscEffects.glint);
case EQUIPPED_FIRST_PERSON:
GL11.glRotated(180, 0, 1, 0);
GL11.glRotated(-90, 0, 0, 1);
GL11.glTranslated(0.5, 0.5, 0);
GL11.glTranslated(-0.5, -0.5, 0);
GL11.glRotated(180, 0, 1, 0);
GL11.glRotated(-90, 0, 0, 1);
GL11.glTranslated(0.5, 0.5, 0);
GL11.glScaled(1.36 * 2, 1.36 * 2, 0.68 * 2);
GL11.glTranslated(-0.5, -0.5, 0.25);
break;
case EQUIPPED:
GL11.glRotated(180, 0, 1, 0);
GL11.glRotated(-90, 0, 0, 1);
GL11.glTranslated(0.2, 0.55, 0);
GL11.glRotated(45, 0, 0, 1);
GL11.glRotated(180, 0, 1, 0);
GL11.glRotated(-45, 0, 0, 1);
GL11.glScaled(1.7, 1.7, 0.85);
break;
case INVENTORY:
break;
default: break;
}
GL11.glDepthFunc(GL11.GL_EQUAL);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDepthMask(false);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_BLEND);
for (int j1 = 0; j1 < 2; ++j1) {
OpenGlHelper.glBlendFunc(772, 1, 0, 0);
float f = 0.00390625F;
float f1 = 0.00390625F;
float f2 = (float)(Minecraft.getSystemTime() % (long)(3000 + j1 * 1873)) / (3000.0F + (float)(j1 * 1873)) * 256.0F;
float f3 = 0.0F;
Tessellator tessellator = Tessellator.instance;
float f4 = 4.0F;
if(data.length > 1 && data[1] instanceof EntityLivingBase) {
EntityLivingBase entity = (EntityLivingBase) data[1];
IIcon iicon = entity.getItemIcon(item, 0);
if (j1 == 1)
{
f4 = -1.0F;
}
float in = 0.36F;
GL11.glColor4f(r * in, g * in, b * in, 1.0F);
int p_77018_2_ = 0;
int p_77018_4_ = 16;
int p_77018_3_ = 0;
int p_77018_5_ = 16;
int zLevel = 0;
if(iicon == null) {
return;
}
tessellator.startDrawingQuads();
tessellator.addVertexWithUV((double)(p_77018_2_ + 0), (double)(p_77018_3_ + p_77018_5_), (double)zLevel, (double)((f2 + (float)p_77018_5_ * f4) * f), (double)((f3 + (float)p_77018_5_) * f1));
tessellator.addVertexWithUV((double)(p_77018_2_ + p_77018_4_), (double)(p_77018_3_ + p_77018_5_), (double)zLevel, (double)((f2 + (float)p_77018_4_ + (float)p_77018_5_ * f4) * f), (double)((f3 + (float)p_77018_5_) * f1));
tessellator.addVertexWithUV((double)(p_77018_2_ + p_77018_4_), (double)(p_77018_3_ + 0), (double)zLevel, (double)((f2 + (float)p_77018_4_) * f), (double)((f3 + 0.0F) * f1));
tessellator.addVertexWithUV((double)(p_77018_2_ + 0), (double)(p_77018_3_ + 0), (double)zLevel, (double)((f2 + 0.0F) * f), (double)((f3 + 0.0F) * f1));
tessellator.draw();
}
Minecraft.getMinecraft().getTextureManager().bindTexture(Minecraft.getMinecraft().getTextureManager().getResourceLocation(item.getItemSpriteNumber()));
TextureUtil.func_152777_a(false, false, 1.0F);
Tessellator tessellator = Tessellator.instance;
ItemRenderer.renderItemIn2D(tessellator, iicon.getMaxU(), iicon.getMinV(), iicon.getMinU(), iicon.getMaxV(), iicon.getIconWidth(), iicon.getIconHeight(), 0.0625F);
renderGlint3D(tessellator, 0.0625F);
} else {
RenderItemStack.renderItemStackNoEffect(0, 0, 0, item);
renderGlintFlat();
}
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glDepthMask(true);
GL11.glDisable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glPopMatrix();
}
public void renderGlintFlat() {
Minecraft mc = Minecraft.getMinecraft();
mc.renderEngine.bindTexture(RenderMiscEffects.glint);
GL11.glDepthFunc(GL11.GL_EQUAL);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDepthMask(false);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_BLEND);
for(int j1 = 0; j1 < 2; ++j1) {
OpenGlHelper.glBlendFunc(772, 1, 0, 0);
float scaleU = 0.00390625F;
float scaleV = 0.00390625F;
float anim = (float) (Minecraft.getSystemTime() % (long) (3000 + j1 * 1873)) / (3000.0F + (float) (j1 * 1873)) * 256.0F;
float offsetV = 0.0F;
Tessellator tessellator = Tessellator.instance;
float sizeMultU = 4.0F;
if(j1 == 1) {
sizeMultU = -1.0F;
}
float in = 0.36F;
GL11.glColor4f(r * in, g * in, b * in, 1.0F);
int x = 0;
int sizeX = 16;
int y = 0;
int sizeY = 16;
int zLevel = 0;
tessellator.startDrawingQuads();
tessellator.addVertexWithUV(x + 0, y + sizeY, zLevel, (anim + sizeY * sizeMultU) * scaleU, (offsetV + sizeY) * scaleV);
tessellator.addVertexWithUV(x + sizeX, y + sizeY, zLevel, (anim + sizeX + sizeY * sizeMultU) * scaleU, (offsetV + sizeY) * scaleV);
tessellator.addVertexWithUV(x + sizeX, y + 0, zLevel, (anim + sizeX) * scaleU, (offsetV + 0.0F) * scaleV);
tessellator.addVertexWithUV(x + 0, y + 0, zLevel, (anim + 0.0F) * scaleU, (offsetV + 0.0F) * scaleV);
tessellator.draw();
}
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glDepthMask(true);
GL11.glDisable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDepthFunc(GL11.GL_LEQUAL);
}
public void renderGlint3D(Tessellator tessellator, float depth) {
Minecraft mc = Minecraft.getMinecraft();
mc.renderEngine.bindTexture(RenderMiscEffects.glint);
GL11.glDepthFunc(GL11.GL_EQUAL);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE);
float in = 0.36F;
GL11.glColor4f(r * in, g * in, b * in, 1.0F);
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glPushMatrix();
float scale = 0.125F;
GL11.glScalef(scale, scale, scale);
float offset = (float) (Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F;
GL11.glTranslatef(offset, 0.0F, 0.0F);
GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F);
ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, depth);
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glScalef(scale, scale, scale);
offset = (float) (Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F;
GL11.glTranslatef(-offset, 0.0F, 0.0F);
GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F);
ItemRenderer.renderItemIn2D(tessellator, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, depth);
GL11.glPopMatrix();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDepthFunc(GL11.GL_LEQUAL);
}
}

View File

@ -1,11 +1,15 @@
package com.hbm.render.tileentity;
import java.util.function.Consumer;
import org.lwjgl.opengl.GL11;
import com.hbm.items.ModItems;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderMissileGeneric;
import com.hbm.tileentity.bomb.TileEntityLaunchPad;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
@ -29,188 +33,8 @@ public class RenderLaunchPadTier1 extends TileEntitySpecialRenderer {
if(toRender != null) {
GL11.glTranslated(0, 1, 0);
//TODO: add a registry for missile rendering to be reused here and for the entity renderer
if(toRender.getItem() == ModItems.missile_generic) {
bindTexture(ResourceManager.missileV2_HE_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileV2.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_decoy) {
bindTexture(ResourceManager.missileV2_decoy_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileV2.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_stealth) {
bindTexture(ResourceManager.missileStealth_tex);
ResourceManager.missileStealth.renderAll();
}
if(toRender.getItem() == ModItems.missile_strong) {
GL11.glScalef(1.5F, 1.5F, 1.5F);
bindTexture(ResourceManager.missileStrong_HE_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileStrong.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_cluster) {
GL11.glScalef(1.0F, 1.0F, 1.0F);
bindTexture(ResourceManager.missileV2_CL_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileV2.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_nuclear) {
GL11.glScalef(1.5F, 1.5F, 1.5F);
bindTexture(ResourceManager.missileNuclear_tex);
ResourceManager.missileNuclear.renderAll();
}
if(toRender.getItem() == ModItems.missile_incendiary) {
GL11.glScalef(1.0F, 1.0F, 1.0F);
bindTexture(ResourceManager.missileV2_IN_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileV2.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_buster) {
GL11.glScalef(1.0F, 1.0F, 1.0F);
bindTexture(ResourceManager.missileV2_BU_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileV2.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_incendiary_strong) {
GL11.glScalef(1.5F, 1.5F, 1.5F);
bindTexture(ResourceManager.missileStrong_IN_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileStrong.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_cluster_strong) {
GL11.glScalef(1.5F, 1.5F, 1.5F);
bindTexture(ResourceManager.missileStrong_CL_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileStrong.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_buster_strong) {
GL11.glScalef(1.5F, 1.5F, 1.5F);
bindTexture(ResourceManager.missileStrong_BU_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileStrong.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_burst) {
bindTexture(ResourceManager.missileHuge_HE_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileHuge.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_inferno) {
bindTexture(ResourceManager.missileHuge_IN_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileHuge.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_rain) {
bindTexture(ResourceManager.missileHuge_CL_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileHuge.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_drill) {
bindTexture(ResourceManager.missileHuge_BU_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileHuge.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_endo) {
GL11.glScalef(1.5F, 1.5F, 1.5F);
bindTexture(ResourceManager.missileEndo_tex);
ResourceManager.missileThermo.renderAll();
}
if(toRender.getItem() == ModItems.missile_exo) {
GL11.glScalef(1.5F, 1.5F, 1.5F);
bindTexture(ResourceManager.missileExo_tex);
ResourceManager.missileThermo.renderAll();
}
if(toRender.getItem() == ModItems.missile_nuclear_cluster) {
GL11.glScalef(1.5F, 1.5F, 1.5F);
bindTexture(ResourceManager.missileMIRV_tex);
ResourceManager.missileNuclear.renderAll();
}
if(toRender.getItem() == ModItems.missile_doomsday) {
GL11.glScalef(2F, 2F, 2F);
bindTexture(ResourceManager.missileDoomsday_tex);
ResourceManager.missileDoomsday.renderAll();
}
if(toRender.getItem() == ModItems.missile_taint) {
GL11.glScalef(2F, 2F, 2F);
bindTexture(ResourceManager.missileTaint_tex);
ResourceManager.missileTaint.renderAll();
}
if(toRender.getItem() == ModItems.missile_micro) {
GL11.glScalef(2F, 2F, 2F);
bindTexture(ResourceManager.missileMicro_tex);
ResourceManager.missileTaint.renderAll();
}
if(toRender.getItem() == ModItems.missile_carrier) {
GL11.glScalef(2F, 2F, 2F);
bindTexture(ResourceManager.missileCarrier_tex);
ResourceManager.missileCarrier.renderAll();
GL11.glTranslated(0.0D, 0.5D, 0.0D);
GL11.glTranslated(1.25D, 0.0D, 0.0D);
bindTexture(ResourceManager.missileBooster_tex);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(-2.5D, 0.0D, 0.0D);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(1.25D, 0.0D, 0.0D);
GL11.glTranslated(0.0D, 0.0D, 1.25D);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(0.0D, 0.0D, -2.5D);
ResourceManager.missileBooster.renderAll();
GL11.glTranslated(0.0D, 0.0D, 1.25D);
}
if(toRender.getItem() == ModItems.missile_anti_ballistic) {
GL11.glScalef(1.0F, 1.0F, 1.0F);
bindTexture(ResourceManager.missileAA_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileABM.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_bhole) {
GL11.glScalef(2F, 2F, 2F);
bindTexture(ResourceManager.missileMicroBHole_tex);
ResourceManager.missileTaint.renderAll();
}
if(toRender.getItem() == ModItems.missile_schrabidium) {
GL11.glScalef(2F, 2F, 2F);
bindTexture(ResourceManager.missileMicroSchrab_tex);
ResourceManager.missileTaint.renderAll();
}
if(toRender.getItem() == ModItems.missile_emp) {
GL11.glScalef(2F, 2F, 2F);
bindTexture(ResourceManager.missileMicroEMP_tex);
ResourceManager.missileTaint.renderAll();
}
if(toRender.getItem() == ModItems.missile_emp_strong) {
GL11.glScalef(1.5F, 1.5F, 1.5F);
bindTexture(ResourceManager.missileStrong_EMP_tex);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.missileStrong.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
if(toRender.getItem() == ModItems.missile_volcano) {
GL11.glScalef(1.5F, 1.5F, 1.5F);
bindTexture(ResourceManager.missileVolcano_tex);
ResourceManager.missileNuclear.renderAll();
}
if(toRender.getItem() == ModItems.missile_shuttle) {
GL11.glScalef(1.0F, 1.0F, 1.0F);
bindTexture(ResourceManager.missileShuttle_tex);
ResourceManager.missileShuttle.renderAll();
}
Consumer<TextureManager> renderer = ItemRenderMissileGeneric.renderers.get(new ComparableStack(toRender).makeSingular());
if(renderer != null) renderer.accept(this.field_147501_a.field_147553_e);
}
}

View File

@ -7,7 +7,6 @@ import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.gui.GUIMachineRadarNT;
import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderBase;
import com.hbm.tileentity.machine.TileEntityMachineRadarNT;
import com.hbm.tileentity.machine.TileEntityMachineRadarScreen;
import api.hbm.entity.RadarEntry;
@ -56,6 +55,7 @@ public class RenderRadarScreen extends TileEntitySpecialRenderer implements IIte
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glShadeModel(GL11.GL_SMOOTH);
tess.draw();
@ -70,8 +70,8 @@ public class RenderRadarScreen extends TileEntitySpecialRenderer implements IIte
for(RadarEntry entry : screen.entries) {
double sX = (entry.posX - screen.refX) / ((double) TileEntityMachineRadarNT.radarRange + 1) * (0.875D);
double sZ = (entry.posZ - screen.refZ) / ((double) TileEntityMachineRadarNT.radarRange + 1) * (0.875D);
double sX = (entry.posX - screen.refX) / ((double) screen.range + 1) * (0.875D);
double sZ = (entry.posZ - screen.refZ) / ((double) screen.range + 1) * (0.875D);
double size = 0.0625D;
tess.addVertexWithUV(0.38, 1 - sZ + size, 0.5 - sX + size, 216D / 256D, (entry.blipLevel * 8F + 8F) / 256F);
tess.addVertexWithUV(0.38, 1 - sZ + size, 0.5 - sX - size, 224D / 256D, (entry.blipLevel * 8F + 8F) / 256F);

View File

@ -16,7 +16,6 @@ import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.opengl.GL11;
import java.awt.*;
import java.nio.DoubleBuffer;
public class RenderStrandCaster extends TileEntitySpecialRenderer implements IItemRendererProvider {
@ -70,7 +69,7 @@ public class RenderStrandCaster extends TileEntitySpecialRenderer implements IIt
buf.put(new double[] { 0, 0, -1, 0.5} );
buf.rewind();
GL11.glClipPlane(GL11.GL_CLIP_PLANE0, buf);
GL11.glTranslated(0,0,-offset + 3.4);
GL11.glTranslated(0,0,Math.max(-offset + 3.4, 0));
ResourceManager.strand_caster.renderPart("plate");
GL11.glDisable(GL11.GL_CLIP_PLANE0);
GL11.glPopMatrix();

View File

@ -45,6 +45,7 @@ public class RenderAccessoryUtility {
private static ResourceLocation vaer = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapeVaer.png");
private static ResourceLocation adam = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapeAdam.png");
private static ResourceLocation alcater = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapeAlcater.png");
private static ResourceLocation jame = new ResourceLocation(RefStrings.MODID + ":textures/models/capes/CapeJame.png");
public static ResourceLocation getCloakFromPlayer(EntityPlayer player) {
@ -127,6 +128,9 @@ public class RenderAccessoryUtility {
if(uuid.equals(Library.Alcater)) {
return alcater;
}
if(uuid.equals(Library.ege444)) {
return jame;
}
if(Library.contributors.contains(uuid)) {
return wiki;
}

View File

@ -862,6 +862,65 @@ public abstract class DoorDecl {
};
public static final DoorDecl SILO_HATCH = new DoorDecl() {
@Override public String getOpenSoundEnd() { return "hbm:door.wgh_big_stop"; };
@Override public String getOpenSoundLoop() { return "hbm:door.wgh_big_start"; };
@Override public String getOpenSoundStart() { return null; };
@Override public String getCloseSoundStart() { return null; };
@Override public String getCloseSoundEnd() { return "hbm:door.wgh_big_stop"; };
@Override public float getSoundVolume() { return 2; }
@Override
@SideOnly(Side.CLIENT)
public void getTranslation(String partName, float openTicks, boolean child, float[] trans) {
if("Hatch".equals(partName)) {
set(trans, 0, 0.25F * Library.smoothstep(getNormTime(openTicks, 0, 10), 0, 1), 0);
} else {
set(trans, 0, 0, 0);
}
};
@Override
@SideOnly(Side.CLIENT)
public void getOrigin(String partName, float[] orig) {
if("Hatch".equals(partName)) {
set(orig, 0F, 0.875F, -1.875F);
return;
}
set(orig, 0, 0, 0);
super.getOrigin(partName, orig);
};
@Override
@SideOnly(Side.CLIENT)
public void getRotation(String partName, float openTicks, float[] rot) {
if("Hatch".equals(partName)) {
set(rot, Library.smoothstep(getNormTime(openTicks, 20, 100), 0, 1) * -240, 0, 0);
return;
}
super.getRotation(partName, openTicks, rot);
};
@Override
@SideOnly(Side.CLIENT)
public boolean doesRender(String partName, boolean child) {
return true;
};
@Override public int timeToOpen() { return 60; };
@Override public int[][] getDoorOpenRanges() { return new int[][] { { 1, 0, 1, -3, 3, 0 }, { 0, 0, 1, -3, 3, 0 }, { -1, 0, 1, -3, 3, 0 } }; }
@Override public float getDoorRangeOpenTime(int ticks, int idx) { return getNormTime(ticks, 20, 20); };
@Override public int getBlockOffset() { return 2; }
@Override public int[] getDimensions() { return new int[] { 0, 0, 2, 2, 2, 2 }; }
@Override @SideOnly(Side.CLIENT) public ResourceLocation getTextureForPart(String partName) { return ResourceManager.silo_hatch_tex; }
@Override public ResourceLocation getTextureForPart(int skinIndex, String partName) { return ResourceManager.silo_hatch_tex; }
@Override @SideOnly(Side.CLIENT) public WavefrontObjDisplayList getModel() { return ResourceManager.silo_hatch; }
};
public static final DoorDecl LARGE_VEHICLE_DOOR = new DoorDecl() {
@Override
@ -948,6 +1007,10 @@ public abstract class DoorDecl {
public abstract int[][] getDoorOpenRanges();
public abstract int[] getDimensions();
public int getBlockOffset() {
return 0;
}
public float getDoorRangeOpenTime(int ticks, int idx) {
return getNormTime(ticks);

View File

@ -22,8 +22,10 @@ public interface IUpgradeInfoProvider {
public static final String KEY_ACID = "upgrade.acid";
public static final String KEY_BURN = "upgrade.burn";
public static final String KEY_CONSUMPTION = "upgrade.consumption";
public static final String KEY_COOLANT_CONSUMPTION = "upgrade.coolantConsumption";
public static final String KEY_DELAY = "upgrade.delay";
public static final String KEY_EFFICIENCY = "upgrade.efficiency";
public static final String KEY_FORTUNE = "upgrade.fortune";
public static final String KEY_OVERHEAT_CHANCE = "upgrade.overheatChance";
public static final String KEY_RANGE = "upgrade.range";
}

View File

@ -7,7 +7,6 @@ import com.hbm.items.machine.ItemMold.Mold;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;

View File

@ -86,6 +86,12 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements
public String getName() {
return "container.chemplant";
}
// last successful load
int lsl0 = 0;
int lsl1 = 0;
int lsu0 = 0;
int lsu1 = 0;
@Override
public void updateEntity() {
@ -98,11 +104,21 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements
this.isProgressing = false;
this.power = Library.chargeTEFromItems(slots, 0, power, maxPower);
if(!tanks[0].loadTank(17, 19, slots) && (slots[17] == null || slots[17].getItem() != ModItems.fluid_barrel_infinite)) tanks[0].unloadTank(17, 19, slots);
if(!tanks[1].loadTank(18, 20, slots) && (slots[18] == null || slots[18].getItem() != ModItems.fluid_barrel_infinite)) tanks[1].unloadTank(18, 20, slots);
int fluidDelay = 40;
if(lsu0 >= fluidDelay && tanks[0].loadTank(17, 19, slots)) lsl0 = 0;
if(lsu1 >= fluidDelay && tanks[1].loadTank(18, 20, slots)) lsl1 = 0;
if(lsl0 >= fluidDelay && slots[17] != null && !FluidTank.noDualUnload.contains(slots[17].getItem())) if(tanks[0].unloadTank(17, 19, slots)) lsu0 = 0;
if(lsl1 >= fluidDelay && slots[18] != null && !FluidTank.noDualUnload.contains(slots[18].getItem())) if(tanks[1].unloadTank(18, 20, slots)) lsu1 = 0;
tanks[2].unloadTank(9, 11, slots);
tanks[3].unloadTank(10, 12, slots);
if(lsl0 < fluidDelay) lsl0++;
if(lsl1 < fluidDelay) lsl1++;
if(lsu0 < fluidDelay) lsu0++;
if(lsu1 < fluidDelay) lsu1++;
loadItems();
unloadItems();

View File

@ -3,6 +3,7 @@ package com.hbm.tileentity.machine;
import java.util.List;
import java.util.Map.Entry;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.BombConfig;
import com.hbm.entity.effect.EntityBlackHole;
import com.hbm.entity.logic.EntityBalefire;
@ -21,12 +22,15 @@ import com.hbm.inventory.gui.GUIMachineCyclotron;
import com.hbm.inventory.recipes.CyclotronRecipes;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemMachineUpgrade;
import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType;
import com.hbm.lib.Library;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.IConditionalInvAccess;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.IUpgradeInfoProvider;
import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.util.I18nUtil;
import com.hbm.util.Tuple.Pair;
import com.hbm.util.fauxpointtwelve.DirPos;
@ -42,14 +46,15 @@ import net.minecraft.item.Item;
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 TileEntityMachineCyclotron extends TileEntityMachineBase implements IFluidSource, IFluidAcceptor, IEnergyUser, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess {
public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IFluidSource, IFluidAcceptor, IEnergyUser, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess, IUpgradeInfoProvider {
public long power;
public static final long maxPower = 100000000;
public int consumption = 1000000;
public int consumption = 1_000_000;
public boolean isOn;
@ -98,7 +103,7 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements
if(isOn) {
int defConsumption = consumption - 100000 * getConsumption();
int defConsumption = consumption - 100_000 * getConsumption();
if(canProcess() && power >= defConsumption) {
@ -111,14 +116,16 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements
this.markDirty();
}
int safety = this.getSafety();
if(coolant.getFill() > 0) {
countdown = 0;
if(worldObj.rand.nextInt(3) == 0)
if(worldObj.rand.nextInt(3 * safety) == 0)
coolant.setFill(coolant.getFill() - 1);
} else if(worldObj.rand.nextInt(this.getSafety()) == 0) {
} else if(worldObj.rand.nextInt(safety) == 0) {
countdown++;
@ -576,4 +583,32 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements
return new int[] {6, 7, 8};
}
@Override
public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) {
return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.EFFECT;
}
@Override
public void provideInfo(UpgradeType type, int level, List<String> info, boolean extendedInfo) {
info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_cyclotron));
if(type == UpgradeType.SPEED) {
info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (100 - 100 / (level + 1)) + "%"));
}
if(type == UpgradeType.POWER) {
info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 10) + "%"));
}
if(type == UpgradeType.EFFECT) {
info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_COOLANT_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%"));
info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_OVERHEAT_CHANCE, "-" + (100 - 100 / (level + 1)) + "%"));
}
}
@Override
public int getMaxLevel(UpgradeType type) {
if(type == UpgradeType.SPEED) return 3;
if(type == UpgradeType.POWER) return 3;
if(type == UpgradeType.EFFECT) return 3;
return 0;
}
}

View File

@ -852,7 +852,7 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements
public void provideInfo(UpgradeType type, int level, List<String> info, boolean extendedInfo) {
info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_excavator));
if(type == UpgradeType.SPEED) {
info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (100 - 100 / (level / 2 + 1)) + "%"));
info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (100 - 200 / (level + 2)) + "%"));
info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%"));
}
if(type == UpgradeType.POWER) {

View File

@ -1,5 +1,6 @@
package com.hbm.tileentity.machine;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.container.ContainerFunnel;
import com.hbm.inventory.gui.GUIFunnel;
import com.hbm.tileentity.IGUIProvider;
@ -8,6 +9,7 @@ import com.hbm.tileentity.machine.TileEntityMachineAutocrafter.InventoryCrafting
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
@ -15,9 +17,15 @@ import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
public class TileEntityMachineFunnel extends TileEntityMachineBase implements IGUIProvider {
public class TileEntityMachineFunnel extends TileEntityMachineBase implements IGUIProvider, IControlReceiver {
public int mode = 0;
public static final int MODE_ALL = 0;
public static final int MODE_3x3 = 1;
public static final int MODE_2x2 = 2;
public TileEntityMachineFunnel() {
super(18);
@ -37,9 +45,9 @@ public class TileEntityMachineFunnel extends TileEntityMachineBase implements IG
if(slots[i] != null) {
int stacksize = 9;
ItemStack compressed = slots[i].stackSize < 9 ? null : this.getFrom9(slots[i]);
ItemStack compressed = (mode == MODE_2x2 || slots[i].stackSize < 9) ? null : this.getFrom9(slots[i]);
if(compressed == null) {
compressed = slots[i].stackSize < 4 ? null : this.getFrom4(slots[i]);
compressed = (mode == MODE_3x3 || slots[i].stackSize < 4) ? null : this.getFrom4(slots[i]);
stacksize = 4;
}
@ -54,8 +62,20 @@ public class TileEntityMachineFunnel extends TileEntityMachineBase implements IG
}
}
}
this.networkPackNT(15);
}
}
@Override
public void serialize(ByteBuf buf) {
buf.writeInt(this.mode);
}
@Override
public void deserialize(ByteBuf buf) {
this.mode = buf.readInt();
}
public int[] topAccess = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
public int[] bottomAccess = new int[] { 9, 10, 11, 12, 13, 14, 15, 16, 17 };
@ -104,6 +124,18 @@ public class TileEntityMachineFunnel extends TileEntityMachineBase implements IG
}
return null;
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.mode = nbt.getInteger("mode");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setInteger("mode", mode);
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
@ -115,4 +147,16 @@ public class TileEntityMachineFunnel extends TileEntityMachineBase implements IG
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUIFunnel(player.inventory, this);
}
@Override
public boolean hasPermission(EntityPlayer player) {
return this.isUseableByPlayer(player);
}
@Override
public void receiveControl(NBTTagCompound data) {
this.mode++;
if(mode > 2) mode = 0;
this.markDirty();
}
}

View File

@ -1,12 +1,34 @@
package com.hbm.tileentity.machine;
import java.io.IOException;
import com.google.gson.JsonObject;
import com.google.gson.stream.JsonWriter;
import com.hbm.lib.Library;
import com.hbm.tileentity.IConfigurableMachine;
import com.hbm.util.fauxpointtwelve.DirPos;
import net.minecraft.util.AxisAlignedBB;
public class TileEntityMachineRadarLarge extends TileEntityMachineRadarNT {
public static int radarLargeRange = 3_000;
@Override
public String getConfigName() {
return "radar_large";
}
@Override
public void readIfPresent(JsonObject obj) {
radarLargeRange = IConfigurableMachine.grab(obj, "I:radarLargeRange", radarLargeRange);
}
@Override
public void writeConfig(JsonWriter writer) throws IOException {
writer.name("I:radarLargeRange").value(radarLargeRange);
}
@Override
public int getRange() {
return radarLargeRange;

View File

@ -8,7 +8,6 @@ import java.util.function.Function;
import com.google.gson.JsonObject;
import com.google.gson.stream.JsonWriter;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.WeaponConfig;
import com.hbm.extprop.HbmLivingProps;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.container.ContainerMachineRadarNT;
@ -19,11 +18,8 @@ import com.hbm.items.ModItems;
import com.hbm.items.tool.ItemCoordinateBase;
import com.hbm.lib.Library;
import com.hbm.main.MainRegistry;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.Satellite;
import com.hbm.saveddata.satellites.Satellite.Interfaces;
import com.hbm.saveddata.satellites.SatelliteHorizons;
import com.hbm.saveddata.satellites.SatelliteLaser;
import com.hbm.tileentity.IConfigurableMachine;
@ -40,12 +36,10 @@ import api.hbm.entity.IRadarDetectable;
import api.hbm.entity.IRadarDetectableNT;
import api.hbm.entity.IRadarDetectableNT.RadarScanParams;
import api.hbm.entity.RadarEntry;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
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;
@ -59,7 +53,6 @@ import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraftforge.common.util.ForgeDirection;
/**
* Now with SmЯt lag-free entity detection! (patent pending)
@ -88,7 +81,6 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I
public static int maxPower = 100_000;
public static int consumption = 500;
public static int radarRange = 1_000;
public static int radarLargeRange = 3_000;
public static int radarBuffer = 30;
public static int radarAltitude = 55;
public static int chunkLoadCap = 10;
@ -109,7 +101,6 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I
maxPower = IConfigurableMachine.grab(obj, "L:powerCap", maxPower);
consumption = IConfigurableMachine.grab(obj, "L:consumption", consumption);
radarRange = IConfigurableMachine.grab(obj, "I:radarRange", radarRange);
radarLargeRange = IConfigurableMachine.grab(obj, "I:radarLargeRange", radarLargeRange);
radarBuffer = IConfigurableMachine.grab(obj, "I:radarBuffer", radarBuffer);
radarAltitude = IConfigurableMachine.grab(obj, "I:radarAltitude", radarAltitude);
chunkLoadCap = IConfigurableMachine.grab(obj, "I:chunkLoadCap", chunkLoadCap);
@ -121,7 +112,6 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I
writer.name("L:powerCap").value(maxPower);
writer.name("L:consumption").value(consumption);
writer.name("I:radarRange").value(radarRange);
writer.name("I:radarLargeRange").value(radarLargeRange);
writer.name("I:radarBuffer").value(radarBuffer);
writer.name("I:radarAltitude").value(radarAltitude);
writer.name("B:generateChunks").value(generateChunks);
@ -214,6 +204,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I
screen.refX = xCoord;
screen.refY = yCoord;
screen.refZ = zCoord;
screen.range = this.getRange();
screen.linked = true;
}
}
@ -335,7 +326,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I
if(this.power < consumption) return;
this.power -= consumption;
int scan = this.scanRange();
int scan = this.getRange();
RadarScanParams params = new RadarScanParams(this.scanMissiles, this.scanShells, this.scanPlayers, this.smartMode);
@ -401,10 +392,6 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I
return 0;
}
protected int scanRange() {
return radarRange;
}
@Override
public void setPower(long i) {
@ -462,12 +449,9 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I
int z = data.getInteger("launchPosZ");
int y = 60; //one day I will make radars transmit Y coordinate as well and you will be butchered alhamdulila
worldObj.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F);
sat.onCoordAction(world,player,x,y,z);
sat.onCoordAction(world, player, x, y, z);
}
}
}
if(link != null && link.getItem() == ModItems.radar_linker) {
BlockPos pos = ItemCoordinateBase.getPosition(link);

View File

@ -21,6 +21,7 @@ public class TileEntityMachineRadarScreen extends TileEntity implements IBufPack
public int refX;
public int refY;
public int refZ;
public int range;
public boolean linked;
@Override
@ -43,6 +44,7 @@ public class TileEntityMachineRadarScreen extends TileEntity implements IBufPack
buf.writeInt(refX);
buf.writeInt(refY);
buf.writeInt(refZ);
buf.writeInt(range);
buf.writeInt(entries.size());
for(RadarEntry entry : entries) entry.toBytes(buf);
}
@ -53,6 +55,7 @@ public class TileEntityMachineRadarScreen extends TileEntity implements IBufPack
refX = buf.readInt();
refY = buf.readInt();
refZ = buf.readInt();
range = buf.readInt();
int count = buf.readInt();
this.entries.clear();
for(int i = 0; i < count; i++) {

View File

@ -34,35 +34,34 @@ import net.minecraftforge.common.util.ForgeDirection;
//god thank you bob for this base class
public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase implements IGUIProvider, ICrucibleAcceptor, ISidedInventory, IFluidStandardTransceiver, INBTPacketReceiver, IInventory {
public FluidTank water;
public FluidTank steam;
public FluidTank water;
public FluidTank steam;
public String getName() {
return "container.machineStrandCaster";
}
public String getName() {
return "container.machineStrandCaster";
}
@Override
public String getInventoryName() {
return getName();
}
@Override
public String getInventoryName() {
return getName();
}
public TileEntityMachineStrandCaster() {
super(7);
water = new FluidTank(Fluids.WATER, 64_000);
steam = new FluidTank(Fluids.SPENTSTEAM, 64_000);
}
public TileEntityMachineStrandCaster() {
super(7);
water = new FluidTank(Fluids.WATER, 64_000);
steam = new FluidTank(Fluids.SPENTSTEAM, 64_000);
}
@Override
public void updateEntity() {
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
if (!worldObj.isRemote) {
if (this.lastType != this.type || this.lastAmount != this.amount) {
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
this.lastType = this.type;
this.lastAmount = this.amount;
}
if(this.lastType != this.type || this.lastAmount != this.amount) {
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
this.lastType = this.type;
this.lastAmount = this.amount;
}
if (this.amount >= this.getCapacity()) {
//In case of overfill problems, spit out the excess as scrap
@ -72,262 +71,258 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase
worldObj.spawnEntityInWorld(item);
}
this.amount = this.getCapacity();
}
}
if(this.amount == 0) {
this.type = null;
}
if (this.amount == 0) {
this.type = null;
}
this.updateConnections();
this.updateConnections();
ItemMold.Mold mold = this.getInstalledMold();
ItemMold.Mold mold = this.getInstalledMold();
if(canProcess()) {
if (canProcess()) {
int itemsCasted = Math.min(amount / mold.getCost(), 9);
int itemsCasted = Math.min(amount / mold.getCost(), 9);
for(int j = 0; j < itemsCasted; j++) {
this.amount -= mold.getCost();
for (int j = 0; j < itemsCasted; j++) {
this.amount -= mold.getCost();
ItemStack out = mold.getOutput(type);
ItemStack out = mold.getOutput(type);
for(int i = 1; i < 7; i++) {
if(slots[i] == null) {
slots[i] = out.copy();
break;
}
for (int i = 1; i < 7; i++) {
if (slots[i] == null) {
slots[i] = out.copy();
break;
}
if(slots[i].isItemEqual(out) && slots[i].stackSize + out.stackSize <= out.getMaxStackSize()) {
slots[i].stackSize += out.stackSize;
break;
}
if (slots[i].isItemEqual(out) && slots[i].stackSize + out.stackSize <= out.getMaxStackSize()) {
slots[i].stackSize += out.stackSize;
break;
}
}
}
markChanged();
}
}
markChanged();
water.setFill(water.getFill() - getWaterRequired() * itemsCasted);
steam.setFill(steam.getFill() + getWaterRequired() * itemsCasted);
}
}
water.setFill(water.getFill() - getWaterRequired() * itemsCasted);
steam.setFill(steam.getFill() + getWaterRequired() * itemsCasted);
}
}
NBTTagCompound data = new NBTTagCompound();
NBTTagCompound data = new NBTTagCompound();
water.writeToNBT(data, "w");
steam.writeToNBT(data, "s");
water.writeToNBT(data, "w");
steam.writeToNBT(data, "s");
this.networkPack(data, 150);
this.networkPack(data, 150);
}
}
public boolean canProcess() {
ItemMold.Mold mold = this.getInstalledMold();
if(type != null && mold != null && this.amount >= mold.getCost() * 9 && mold.getOutput(type) != null) {
for(int i = 1; i < 7; i++) {
if(slots[i] == null || slots[i].isItemEqual(mold.getOutput(type)) && slots[i].stackSize + mold.getOutput(type).stackSize <= mold.getOutput(type).getMaxStackSize())
return water.getFill() >= getWaterRequired() && steam.getFill() < steam.getMaxFill();
public boolean canProcess() {
ItemMold.Mold mold = this.getInstalledMold();
if (type != null && mold != null && this.amount >= mold.getCost() * 9 && mold.getOutput(type) != null) {
for (int i = 1; i < 7; i++) {
if (slots[i] == null || slots[i].isItemEqual(mold.getOutput(type)) && slots[i].stackSize + mold.getOutput(type).stackSize <= mold.getOutput(type).getMaxStackSize())
return water.getFill() >= getWaterRequired() && steam.getFill() < steam.getMaxFill();
}
}
}
}
return false;
}
return false;
}
public DirPos[] getFluidConPos() {
public DirPos[] getFluidConPos() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
return new DirPos[] {
new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ, rot),
new DirPos(xCoord - rot.offsetX - dir.offsetX, yCoord, zCoord - rot.offsetZ - dir.offsetZ, rot.getOpposite()),
new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX * 5, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ * 5, rot),
new DirPos(xCoord - rot.offsetX - dir.offsetX * 5, yCoord, zCoord - rot.offsetZ - dir.offsetZ * 5, rot.getOpposite())
};
}
return new DirPos[]{
new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ, rot),
new DirPos(xCoord - rot.offsetX - dir.offsetX, yCoord, zCoord - rot.offsetZ - dir.offsetZ, rot.getOpposite()),
new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX * 5, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ * 5, rot),
new DirPos(xCoord - rot.offsetX - dir.offsetX * 5, yCoord, zCoord - rot.offsetZ + dir.offsetZ * 5, rot.getOpposite()),
};
}
public int[][] getMetalPourPos() {
public int[][] getMetalPourPos() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
return new int[][] {
new int[] { xCoord + rot.offsetX - dir.offsetX, yCoord + 2, zCoord + rot.offsetZ - dir.offsetZ },
new int[] { xCoord - dir.offsetX, yCoord + 2, zCoord - dir.offsetZ },
new int[] { xCoord + rot.offsetX, yCoord + 2, zCoord + rot.offsetZ },
new int[] { xCoord, yCoord + 2, zCoord }
};
}
return new int[][]{
new int[]{xCoord + rot.offsetX - dir.offsetX, yCoord + 2, zCoord + rot.offsetZ - dir.offsetZ},
new int[]{xCoord - dir.offsetX, yCoord + 2, zCoord - dir.offsetZ},
new int[]{xCoord + rot.offsetX, yCoord + 2, zCoord + rot.offsetZ},
new int[]{xCoord, yCoord + 2, zCoord},
};
}
@Override
public ItemMold.Mold getInstalledMold() {
if(slots[0] == null)
return null;
@Override
public ItemMold.Mold getInstalledMold() {
if (slots[0] == null) return null;
if(slots[0].getItem() == ModItems.mold) {
return ((ItemMold) slots[0].getItem()).getMold(slots[0]);
}
if (slots[0].getItem() == ModItems.mold) {
return ((ItemMold) slots[0].getItem()).getMold(slots[0]);
}
return null;
}
return null;
}
@Override
public int getMoldSize() {
return getInstalledMold().size;
}
@Override
public int getMoldSize() {
return getInstalledMold().size;
}
@Override
public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) {
@Override
public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) {
if(side != ForgeDirection.UP)
return false;
for(int[] pos : getMetalPourPos()) {
if(pos[0] == x && pos[1] == y && pos[2] == z) {
return this.standardCheck(world, x, y, z, side, stack);
}
}
return false;
if (side != ForgeDirection.UP) return false;
for (int[] pos : getMetalPourPos()) {
if (pos[0] == x && pos[1] == y && pos[2] == z) {
return this.standardCheck(world, x, y, z, side, stack);
}
}
return false;
}
}
@Override
public boolean standardCheck(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) {
if(this.type != null && this.type != stack.material) return false;
return !(this.amount >= this.getCapacity() || getInstalledMold() == null);
}
@Override
public boolean standardCheck(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) {
if (this.type != null && this.type != stack.material) return false;
return !(this.amount >= this.getCapacity() || getInstalledMold() == null);
}
@Override
public int getCapacity() {
ItemMold.Mold mold = this.getInstalledMold();
return mold == null ? 50000 : mold.getCost() * 10;
}
@Override
public int getCapacity() {
ItemMold.Mold mold = this.getInstalledMold();
return mold == null ? 50000 : mold.getCost() * 10;
}
private int getWaterRequired() {
return getInstalledMold() != null ? 5 * getInstalledMold().getCost() : 50;
}
private int getWaterRequired() {
return getInstalledMold() != null ? 5 * getInstalledMold().getCost() : 50;
}
private void updateConnections() {
for(DirPos pos : getFluidConPos()) {
this.trySubscribe(water.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
this.sendFluid(steam, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
}
}
private void updateConnections() {
for (DirPos pos : getFluidConPos()) {
this.trySubscribe(water.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
}
for (DirPos pos : getFluidConPos()) {
sendFluid(steam, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
}
}
@Override
public FluidTank[] getSendingTanks() {
return new FluidTank[] { steam };
}
@Override
public FluidTank[] getSendingTanks() {
return new FluidTank[]{steam};
}
@Override
public FluidTank[] getReceivingTanks() {
return new FluidTank[] { water };
}
@Override
public FluidTank[] getReceivingTanks() {
return new FluidTank[]{water};
}
@Override
public FluidTank[] getAllTanks() {
return new FluidTank[] { water, steam };
}
@Override
public FluidTank[] getAllTanks() {
return new FluidTank[]{water, steam};
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerMachineStrandCaster(player.inventory, this);
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerMachineStrandCaster(player.inventory, this);
}
@Override
@SideOnly(Side.CLIENT)
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUIMachineStrandCaster(player.inventory, this);
}
@Override
@SideOnly(Side.CLIENT)
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUIMachineStrandCaster(player.inventory, this);
}
public void networkPack(NBTTagCompound nbt, int range) {
if(!worldObj.isRemote)
PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new NetworkRegistry.TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range));
}
public void networkPack(NBTTagCompound nbt, int range) {
if (!worldObj.isRemote)
PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new NetworkRegistry.TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range));
}
@Override
public void networkUnpack(NBTTagCompound nbt) {
water.readFromNBT(nbt, "w");
steam.readFromNBT(nbt, "s");
@Override
public void networkUnpack(NBTTagCompound nbt) {
water.readFromNBT(nbt, "w");
steam.readFromNBT(nbt, "s");
}
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
water.writeToNBT(nbt, "w");
steam.writeToNBT(nbt, "s");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
water.writeToNBT(nbt, "w");
steam.writeToNBT(nbt, "s");
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
water.readFromNBT(nbt, "w");
steam.readFromNBT(nbt, "s");
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
water.readFromNBT(nbt, "w");
steam.readFromNBT(nbt, "s");
}
@Override
public boolean isItemValidForSlot(int i, ItemStack stack) {
@Override
public boolean isItemValidForSlot(int i, ItemStack stack) {
if(i == 0) {
return stack.getItem() == ModItems.mold;
}
if (i == 0) {
return stack.getItem() == ModItems.mold;
}
return false;
}
return false;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
@Override
public int[] getAccessibleSlotsFromSide(int meta) {
return new int[] { 1, 2, 3, 4, 5, 6 };
}
@Override
public int[] getAccessibleSlotsFromSide(int meta) {
return new int[]{1, 2, 3, 4, 5, 6};
}
public void markChanged() {
this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this);
}
public void markChanged() {
this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this);
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) {
return false;
} else {
return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 128;
}
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
if (worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) {
return false;
} else {
return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 128;
}
}
@Override
public boolean canInsertItem(int slot, ItemStack itemStack, int side) {
return this.isItemValidForSlot(slot, itemStack);
}
@Override
public boolean canExtractItem(int slot, ItemStack itemStack, int side) {
return !this.isItemValidForSlot(slot, itemStack);
}
@Override
public boolean canInsertItem(int slot, ItemStack itemStack, int side) {
return this.isItemValidForSlot(slot, itemStack);
}
AxisAlignedBB bb = null;
@Override
public boolean canExtractItem(int slot, ItemStack itemStack, int side) {
return !this.isItemValidForSlot(slot, itemStack);
}
AxisAlignedBB bb = null;
@Override
public AxisAlignedBB getRenderBoundingBox() {
if (bb == null) {
bb = AxisAlignedBB.getBoundingBox(
xCoord - 7,
yCoord,
zCoord - 7,
xCoord + 7,
yCoord + 3,
zCoord + 7
);
}
return bb;
}
@Override
public AxisAlignedBB getRenderBoundingBox() {
if(bb == null) {
bb = AxisAlignedBB.getBoundingBox(
xCoord - 7,
yCoord,
zCoord - 7,
xCoord + 7,
yCoord + 3,
zCoord + 7);
}
return bb;
}
}

View File

@ -4299,6 +4299,10 @@ tile.ore_random.name=%s-Erz
tile.ore_rare.name=Seltenerden-Erz
tile.ore_reiium.name=Reiit
tile.ore_schrabidium.name=Schrabidiumerz
tile.ore_sellafield_diamond.name=Sellafit-Diamanterz
tile.ore_sellafield_emerald.name=Sellafit-Smaragderz
tile.ore_sellafield_schrabidium.name=Sellafit-Schrabidiumerz
tile.ore_sellafield_uranium_scorched.name=Verschmortes Sellafit-Uranerz
tile.ore_sulfur.name=Schwefelerz
tile.ore_tektite_osmiridium.name=Osmiridiumreiches Tektit
tile.ore_thorium.name=Thoriumerz

View File

@ -1004,7 +1004,11 @@ desc.item.kitArmor=Armor will be displaced by new set.
desc.item.kitHaz=Armor will be displaced by hazmat suit.
desc.item.kitPack=What a bargain!
desc.item.kitPool=Please empty inventory before opening!
desc.item.pileRod=§eUse on drilled graphite to insert$§eUse screwdriver to extract$
desc.item.pileRod=§eUse on drilled graphite to insert$§eUse screwdriver to extract$
desc.item.pipette.corrosive=Can handle corrosive liquids.
desc.item.pipette.laboratory=Now with 50x more precision!
desc.item.pipette.noCorrosive=§eCannot handle corrosive liquids.
desc.item.pipette.noEmpty=§ePipette not empty!
desc.item.rtgDecay=Decays to: %s
desc.item.rtgHeat=Power Level: %s
desc.item.storage.capacity=Capacity %s%%s
@ -3646,6 +3650,9 @@ item.powder_xe135_tiny.name=Tiny Pile of Xenon-135 Powder
item.powder_yellowcake.name=Yellowcake
item.powder_zirconium.name=Zirconium Powder
item.power_net_tool.name=Cable Network Analysis Tool
item.pipette.name=Pipette
item.pipette_boron.name=Boron Pipette
item.pipette_laboratory.name=Laboratory Grade Pipette
item.primer_357.name=.357 Magnum Primer (x24)
item.primer_44.name=.44 Magnum Primer (x24)
item.primer_50.name=Large Caliber Primer (x12)
@ -3669,8 +3676,8 @@ item.pwr_fuel.men.name=MEN PWR Fuel Rod
item.pwr_fuel.mep.name=MEP PWR Fuel Rod
item.pwr_fuel.meu.name=MEU PWR Fuel Rod
item.pwr_fuel.mox.name=MOX PWR Fuel Rod
item.pwr_fuel_depleted.bfb_am_mix.name=Depleted Fuel Grade Americium PWR ZFB Rod
item.pwr_fuel_depleted.bfb_pu241.name=Depleted Plutonium-241 PWR ZFB Rod
item.pwr_fuel_depleted.bfb_am_mix.name=Depleted Fuel Grade Americium PWR BFB Rod
item.pwr_fuel_depleted.bfb_pu241.name=Depleted Plutonium-241 PWR BFB Rod
item.pwr_fuel_depleted.hea242.name=Depleted HEA-242 PWR Fuel Rod
item.pwr_fuel_depleted.hen237.name=Depleted HEN-237 PWR Fuel Rod
item.pwr_fuel_depleted.hep239.name=Depleted HEP-239 PWR Fuel Rod
@ -3684,8 +3691,8 @@ item.pwr_fuel_depleted.men.name=Depleted MEN PWR Fuel Rod
item.pwr_fuel_depleted.mep.name=Depleted MEP PWR Fuel Rod
item.pwr_fuel_depleted.meu.name=Depleted MEU PWR Fuel Rod
item.pwr_fuel_depleted.mox.name=Depleted MOX PWR Fuel Rod
item.pwr_fuel_hot.bfb_am_mix.name=Hot Fuel Grade Americium PWR ZFB Rod
item.pwr_fuel_hot.bfb_pu241.name=Hot Plutonium-241 PWR ZFB Rod
item.pwr_fuel_hot.bfb_am_mix.name=Hot Fuel Grade Americium PWR BFB Rod
item.pwr_fuel_hot.bfb_pu241.name=Hot Plutonium-241 PWR BFB Rod
item.pwr_fuel_hot.hea242.name=Hot HEA-242 PWR Fuel Rod
item.pwr_fuel_hot.hen237.name=Hot HEN-237 PWR Fuel Rod
item.pwr_fuel_hot.hep239.name=Hot HEP-239 PWR Fuel Rod
@ -5291,6 +5298,10 @@ tile.ore_random.name=%s Ore
tile.ore_rare.name=Rare Earth Ore
tile.ore_reiium.name=Reiite
tile.ore_schrabidium.name=Schrabidium Ore
tile.ore_sellafield_diamond.name=Sellafite Diamond Ore
tile.ore_sellafield_emerald.name=Sellafite Emerald Ore
tile.ore_sellafield_schrabidium.name=Sellafite Schrabidium Ore
tile.ore_sellafield_uranium_scorched.name=Scorched Sellafite Uranium Ore
tile.ore_sulfur.name=Sulfur Ore
tile.ore_tektite_osmiridium.name=Osmiridium-Infused Tektite
tile.ore_thorium.name=Thorium Ore
@ -5657,9 +5668,11 @@ turret.players=Target Players: %s
upgrade.acid=Acid required %s
upgrade.burn=Burn %smb/t for %sHE
upgrade.consumption=Consumption %s
upgrade.coolantConsumption=Coolant Consumption %s
upgrade.delay=Process time %s
upgrade.efficiency=Efficiency %s
upgrade.fortune=Fortune %s
upgrade.overheatChance=Overheat chance %s
upgrade.range=Range %s
upgrade.gui.title=§lAcceptable Upgrades:§r

View File

@ -1463,6 +1463,8 @@ upgrade.delay=Время %s
upgrade.efficiency=Эффективность %s
upgrade.fortune=Удача %s
upgrade.range=Радиус %s
upgrade.coolantConsumption=Потребление охладителя %s
upgrade.overheatChance=Шанс перегрева %s
upgrade.gui.title=§lПринимаемые улучшения:§r
upgrade.gui.afterburner= * §dФорсаж§r: Стакается до %s уровней
@ -1790,6 +1792,7 @@ tile.turret_tau.name=Турель с тау-пушкой
tile.turret_spitfire.name=Турель без названия [WIP]
tile.turret_cwis.name=”Фэленкс” Mk-15 CIWS
tile.turret_cheapo.name=Дешёвая пулемётная турель
tile.machine_radar_large.name=Большой радар
tile.machine_radar.name=Радар
container.radar=Радар
item.radar_linker.name=Радарный соединитель
@ -1985,8 +1988,8 @@ tile.machine_excavator.name=Большой горный бур
tile.machine_assembler.name=Сборочная машина
container.assembler=Сборочная машина
tile.machine_assemfac.name=Сборочный завод
tile.machine_autocrafter.name=Стол автокрафта
container.autocrafter=Стол автокрафта
tile.machine_autocrafter.name=Автоматический верстак
container.autocrafter=Автоматический верстак
container.machineFunnel=Комбинаторная воронка
tile.machine_funnel.name=Комбинаторная воронка
tile.machine_funnel.descАвтоматически сжимает предметы в сетке 2x2 или 3x3 для крафтинга$Верх: Вход$Низ: Выход$Бок: Выход для очистки ингредиентов
@ -2130,6 +2133,8 @@ tile.machine_liquefactor.desc=Мощная машина для превраще
container.machineSolidifier=Отвердитель
tile.machine_solidifier.name=Промышленный отвердитель
tile.machine_solidifier.desc=Универсальная машина, оснащенная системами охлаждения и другими$универсальными инструментами для превращения жидкостей в твердые вещества с использованием различных$процессов, таких как замораживание и нефтехимическая полимеризация.
container.machineStrandCaster=Машина непрерывного литья заготовок
tile.machine_strand_caster.name=Машина непрерывного литья заготовок
tile.conveyor.name=Конвейер
tile.conveyor.desc=Moves items dropped on it$Can be rotated clockwise with a screwdriver$Shift-click with screwdriver to bend
@ -3191,6 +3196,10 @@ tile.ore_cobalt.name=Кобальтовая руда
tile.stone_porous.name=Пористый камень
tile.ore_random.name=Руда %s
tile.ore_bedrock.name=Бедроковая руда
tile.ore_sellafield_diamond.name=Селлафитовая алмазная руда
tile.ore_sellafield_emerald.name=Селлафитовая изумрудная руда
tile.ore_sellafield_schrabidium.name=Селлафитовая шрабидиевая руда
tile.ore_sellafield_uranium_scorched.name=Обожженная селлафитовая урановая руда
item.ore.asbestos=Асбестовая
item.ore.borax=Буровая
@ -3816,6 +3825,14 @@ item.fluid_barrel_full.name=Жидкостная бочка:
item.fluid_tank_lead_empty.name=Пустой резервуар для опасных материалов
item.fluid_tank_lead_full.name=Резервуар с опасными материалами:
item.fluid_barrel_infinite.name=Бесконечная жидкостная бочка
desc.item.pileRod=§eПКМ по просверленному графиту для вставки$§eПКМ отвёрткой чтобы извлечь$
desc.item.pipette.corrosive=Может работать с коррозийными жидкостями.
desc.item.pipette.laboratory=Теперь с 50-кратной точностью!
desc.item.pipette.noCorrosive=§eНе может работать с коррозийными жидкостями.
desc.item.pipette.noEmpty=§eПипетка не пуста!
item.pipette.name=Пипетка
item.pipette_boron.name=Борная пипетка
item.pipette_laboratory.name=Лабораторная пипетка
item.rod_of_discord.name=Жезл раздора
item.rod_empty.name=Пустой стержень

View File

@ -0,0 +1,344 @@
# Blender v2.79 (sub 0) OBJ File: 'silo_hatch.blend'
# www.blender.org
o Hatch
v -1.750000 0.750000 1.750000
v 1.750000 0.750000 1.750000
v -1.750000 0.750000 -1.750000
v 1.750000 0.750000 -1.750000
v -1.750000 1.000000 -1.750000
v -1.750000 1.000000 1.750000
v 1.750000 1.000000 1.750000
v 1.750000 1.000000 -1.750000
v -1.500000 0.750000 -1.500000
v -1.500000 0.750000 1.500000
v 1.500000 0.750000 1.500000
v 1.500000 0.750000 -1.500000
v -1.500000 0.500000 -1.500000
v -1.500000 0.500000 1.500000
v 1.500000 0.500000 1.500000
v 1.500000 0.500000 -1.500000
v -1.000000 0.750000 -1.500000
v 1.000000 0.750000 -1.500000
v -1.000000 0.750000 -2.000000
v 1.000000 0.750000 -2.000000
v -1.000000 0.500000 -2.000000
v -1.000000 0.500000 -1.500000
v 1.000000 0.500000 -1.500000
v 1.000000 0.500000 -2.000000
vt 0.588235 0.333333
vt 0.970588 0.309524
vt 1.000000 0.333333
vt 1.000000 0.357143
vt 0.588235 0.690476
vt 0.588235 0.357143
vt 1.000000 0.333333
vt 0.588235 0.357143
vt 0.588235 0.333333
vt 1.000000 0.333333
vt 0.588235 0.357143
vt 0.588235 0.333333
vt 1.000000 0.333333
vt 0.588235 0.357143
vt 0.588235 0.333333
vt 0.970588 0.309524
vt 0.970588 0.309524
vt 0.970588 0.309524
vt 0.617647 0.309524
vt 0.970588 0.285714
vt 0.617647 0.309524
vt 0.970588 0.285714
vt 0.617647 0.309524
vt 0.970588 0.285714
vt 0.617647 0.309524
vt 0.970588 0.285714
vt 0.970588 0.000000
vt 0.617647 0.285714
vt 0.617647 -0.000000
vt 0.852941 0.809524
vt 0.617647 0.761905
vt 0.852941 0.761905
vt 0.617647 0.738095
vt 0.852941 0.690476
vt 0.852941 0.738095
vt 0.558824 0.761905
vt 0.911765 0.738095
vt 0.911765 0.761905
vt 1.000000 0.690476
vt 1.000000 0.357143
vt 1.000000 0.357143
vt 1.000000 0.357143
vt 0.617647 0.285714
vt 0.617647 0.285714
vt 0.617647 0.285714
vt 0.617647 0.809524
vt 0.617647 0.690476
vt 0.558824 0.738095
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
s off
f 1/1/1 11/2/1 2/3/1
f 7/4/2 5/5/2 6/6/2
f 3/7/3 8/8/3 4/9/3
f 2/3/4 6/6/4 1/1/4
f 4/10/5 7/11/5 2/12/5
f 1/13/6 5/14/6 3/15/6
f 2/12/1 12/16/1 4/10/1
f 4/9/1 9/17/1 3/7/1
f 3/15/1 10/18/1 1/13/1
f 11/19/5 16/20/5 12/16/5
f 9/21/6 14/22/6 10/18/6
f 12/23/3 13/24/3 9/17/3
f 10/25/4 15/26/4 11/2/4
f 16/27/1 14/28/1 13/29/1
f 17/30/2 20/31/2 19/32/2
f 24/33/1 22/34/1 21/35/1
f 18/36/5 24/33/5 20/31/5
f 20/31/3 21/35/3 19/32/3
f 19/32/6 22/37/6 17/38/6
f 1/1/1 10/25/1 11/2/1
f 7/4/2 8/39/2 5/5/2
f 3/7/3 5/40/3 8/8/3
f 2/3/4 7/4/4 6/6/4
f 4/10/5 8/41/5 7/11/5
f 1/13/6 6/42/6 5/14/6
f 2/12/1 11/19/1 12/16/1
f 4/9/1 12/23/1 9/17/1
f 3/15/1 9/21/1 10/18/1
f 11/19/5 15/43/5 16/20/5
f 9/21/6 13/44/6 14/22/6
f 12/23/3 16/45/3 13/24/3
f 10/25/4 14/28/4 15/26/4
f 16/27/1 15/26/1 14/28/1
f 17/30/2 18/46/2 20/31/2
f 24/33/1 23/47/1 22/34/1
f 18/36/5 23/48/5 24/33/5
f 20/31/3 24/33/3 21/35/3
f 19/32/6 21/35/6 22/37/6
o Frame
v -2.500000 0.000000 2.500000
v 2.500000 0.000000 2.500000
v -2.500000 0.000000 -2.500000
v 2.500000 0.000000 -2.500000
v -2.500000 0.250000 2.500000
v 2.500000 0.250000 2.500000
v -2.500000 0.250000 -2.500000
v 2.500000 0.250000 -2.500000
v -2.250000 1.000000 2.250000
v 2.250000 1.000000 2.250000
v -2.250000 1.000000 -2.250000
v 2.250000 1.000000 -2.250000
v -1.500000 0.000000 1.500000
v 1.500000 0.000000 1.500000
v -1.500000 0.000000 -1.500000
v 1.500000 0.000000 -1.500000
v -1.500000 0.750000 -1.500000
v -1.500000 0.750000 1.500000
v 1.500000 0.750000 1.500000
v 1.500000 0.750000 -1.500000
v -1.750000 0.750000 1.750000
v 1.750000 0.750000 1.750000
v -1.750000 0.750000 -1.750000
v 1.750000 0.750000 -1.750000
v -1.750000 1.000000 1.750000
v 1.750000 1.000000 1.750000
v -1.750000 1.000000 -1.750000
v 1.750000 1.000000 -1.750000
v -1.000000 0.750000 -1.750000
v 1.000000 0.750000 -1.750000
v 1.000000 0.500000 -1.500000
v -1.000000 0.500000 -1.500000
v -1.000000 1.000000 -1.750000
v 1.000000 1.000000 -1.750000
v -1.000000 1.000000 -2.000000
v 1.000000 1.000000 -2.000000
v -1.000000 0.500000 -2.000000
v 1.000000 0.500000 -2.000000
v -1.000000 0.750000 -1.500000
v 1.000000 0.750000 -1.500000
vt 0.117647 0.761905
vt 0.470588 0.761905
vt 0.176471 0.809524
vt 0.588235 0.500000
vt 0.029412 0.571429
vt -0.000000 0.500000
vt 0.588235 0.476190
vt 0.000000 0.500000
vt 0.000000 0.476190
vt 0.588235 0.476190
vt -0.000000 0.476190
vt 0.588235 0.476190
vt -0.000000 0.500000
vt -0.000000 0.476190
vt 0.588235 0.476190
vt -0.000000 0.500000
vt -0.000000 0.476190
vt 0.470588 0.380952
vt 0.588235 0.500000
vt 0.029412 0.571429
vt 0.588235 0.500000
vt 0.029412 0.571429
vt 0.588235 0.500000
vt 0.029412 0.571429
vt 0.000000 0.000000
vt 0.117647 0.380952
vt 0.470588 0.833333
vt 0.117647 0.761905
vt 0.470588 0.761905
vt 0.470588 0.833333
vt 0.117647 0.761905
vt 0.470588 0.761905
vt 0.470588 0.833333
vt 0.117647 0.761905
vt 0.470588 0.761905
vt 0.470588 0.095238
vt 0.588235 0.000000
vt 0.117647 0.095238
vt 0.088235 0.857143
vt 0.117647 0.833333
vt 0.088235 0.857143
vt 0.117647 0.833333
vt 0.176471 0.857143
vt 0.117647 0.833333
vt 0.176471 0.833333
vt 0.088235 0.857143
vt 0.117647 0.833333
vt 0.500000 0.857143
vt 0.088235 0.880952
vt 0.500000 0.857143
vt 0.088235 0.880952
vt 0.500000 0.857143
vt 0.088235 0.880952
vt 0.500000 0.619048
vt 0.558824 0.571429
vt 0.500000 0.952381
vt 0.558824 1.000000
vt 0.176471 0.928571
vt 0.411765 0.976190
vt 0.176471 0.976190
vt 0.088235 0.619048
vt 0.029412 1.000000
vt 0.176471 0.880952
vt 0.411765 0.928571
vt 0.117647 0.928571
vt 0.117647 0.904762
vt 0.147059 0.904762
vt 0.176471 0.880952
vt 0.088235 0.857143
vt 0.500000 0.857143
vt 0.411765 0.880952
vt 0.411765 0.857143
vt 0.470588 0.833333
vt 0.411765 0.833333
vt 0.441176 0.904762
vt 0.470588 0.928571
vt 0.411765 0.809524
vt 0.558824 0.571429
vt 0.558824 0.571429
vt 0.558824 0.571429
vt 0.500000 0.880952
vt 0.500000 0.880952
vt 0.500000 0.880952
vt 0.088235 0.952381
vt 0.411765 0.880952
vt 0.147059 0.880952
vt 0.088235 0.880952
vt 0.500000 0.880952
vt 0.176471 0.952381
vt 0.411765 0.952381
vt 0.441176 0.880952
vt 0.470588 0.904762
vn 0.0000 0.0000 1.0000
vn 0.9487 0.3162 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 -1.0000 0.0000
vn -0.9487 0.3162 0.0000
vn 0.0000 0.3162 -0.9487
vn 0.0000 0.3162 0.9487
vn 0.0000 1.0000 0.0000
s off
f 39/49/7 40/50/7 56/51/7
f 32/52/8 34/53/8 30/54/8
f 26/55/7 29/56/7 25/57/7
f 28/58/9 30/54/9 26/59/9
f 25/60/10 31/61/10 27/62/10
f 27/63/11 32/64/11 28/65/11
f 25/57/12 38/66/12 26/55/12
f 29/67/13 35/68/13 31/61/13
f 31/69/14 36/70/14 32/64/14
f 30/71/15 33/72/15 29/56/15
f 27/73/12 37/74/12 25/57/12
f 42/75/11 38/76/11 37/77/11
f 43/78/10 40/79/10 38/80/10
f 41/81/9 37/82/9 39/83/9
f 26/55/12 40/84/12 28/85/12
f 28/85/12 39/86/12 27/73/12
f 42/75/16 46/87/16 43/88/16
f 43/78/16 48/89/16 44/90/16
f 53/91/16 41/92/16 63/93/16
f 41/81/16 45/94/16 42/95/16
f 45/96/11 50/97/11 46/87/11
f 46/98/10 52/99/10 48/89/10
f 47/100/9 49/101/9 45/94/9
f 50/102/16 33/72/16 34/103/16
f 52/104/16 34/103/16 36/105/16
f 61/106/7 60/107/7 59/108/7
f 49/109/16 35/110/16 33/72/16
f 56/111/16 62/112/16 61/106/16
f 59/113/9 57/114/9 53/115/9
f 57/116/7 47/117/7 53/91/7
f 48/118/7 58/119/7 54/120/7
f 35/110/16 60/107/16 36/105/16
f 44/121/16 54/120/16 64/122/16
f 54/123/10 60/124/10 62/112/10
f 63/93/7 41/92/7 56/51/7
f 41/92/7 39/49/7 56/51/7
f 40/50/7 44/121/7 55/125/7
f 44/121/7 64/122/7 55/125/7
f 40/50/7 55/125/7 56/51/7
f 32/52/8 36/126/8 34/53/8
f 26/55/7 30/71/7 29/56/7
f 28/58/9 32/52/9 30/54/9
f 25/60/10 29/67/10 31/61/10
f 27/63/11 31/69/11 32/64/11
f 25/57/12 37/74/12 38/66/12
f 29/67/13 33/127/13 35/68/13
f 31/69/14 35/128/14 36/70/14
f 30/71/15 34/103/15 33/72/15
f 27/73/12 39/86/12 37/74/12
f 42/75/11 43/88/11 38/76/11
f 43/78/10 44/90/10 40/79/10
f 41/81/9 42/95/9 37/82/9
f 26/55/12 38/66/12 40/84/12
f 28/85/12 40/84/12 39/86/12
f 42/75/16 45/96/16 46/87/16
f 43/78/16 46/98/16 48/89/16
f 53/91/16 47/117/16 41/92/16
f 41/81/16 47/100/16 45/94/16
f 45/96/11 49/129/11 50/97/11
f 46/98/10 50/130/10 52/99/10
f 47/100/9 51/131/9 49/101/9
f 50/102/16 49/109/16 33/72/16
f 52/104/16 50/102/16 34/103/16
f 61/106/7 62/112/7 60/107/7
f 49/109/16 51/132/16 35/110/16
f 56/111/16 55/133/16 62/112/16
f 63/134/9 56/111/9 53/115/9
f 56/111/9 61/106/9 53/115/9
f 61/106/9 59/113/9 53/115/9
f 57/116/7 51/135/7 47/117/7
f 48/118/7 52/136/7 58/119/7
f 35/110/16 51/132/16 59/108/16
f 51/132/16 57/137/16 59/108/16
f 58/138/16 52/104/16 60/107/16
f 52/104/16 36/105/16 60/107/16
f 35/110/16 59/108/16 60/107/16
f 44/121/16 48/118/16 54/120/16
f 55/133/10 64/139/10 54/123/10
f 54/123/10 58/140/10 60/124/10
f 62/112/10 55/133/10 54/123/10

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 497 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 515 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 566 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 466 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 851 B