Merge remote-tracking branch 'HbmMods/master' into structure-2
49
changelog
@ -1,39 +1,20 @@
|
||||
## Added
|
||||
* Large Radar
|
||||
* A giant version of the radar with 3x the scan range
|
||||
* Strand caster
|
||||
* Watercooled foundry basin that processes large amounts of material at once
|
||||
* Silo hatch
|
||||
* The final missing door from 1.12, remade from scratch
|
||||
* Comes with a brand-new model that fits perfectly over 3x3 missile launch tubes
|
||||
* Has a 5x5 frame
|
||||
|
||||
## 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 lot cheaper
|
||||
* Increased crucible pouring speed by 50%
|
||||
* Simplified door recipes
|
||||
|
||||
## 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 molten meteorite cobble dropping itself in addition to turning into lava
|
||||
* Fixed S~Cola RAD not being radish-colored
|
||||
* 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
|
||||
* Fixed projectiles not being able to pass through open doors
|
||||
* Fixed material dupe caused by strand caster overflowing
|
||||
* Fixed rampant mode glyphid scout spawn ignoring light level
|
||||
* Fixed glyphid diggers' debris attack being able to break concrete
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
mod_version=1.0.27
|
||||
# Empty build number makes a release type
|
||||
mod_build_number=4844
|
||||
mod_build_number=4845
|
||||
|
||||
credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\
|
||||
\ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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 });
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -23,7 +23,6 @@ import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.EnumCreatureAttribute;
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.entity.monster.EntityMob;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
@ -176,8 +175,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 +314,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) {
|
||||
|
||||
@ -60,7 +60,7 @@ public class EntityGlyphidBlaster extends EntityGlyphidBombardier {
|
||||
|
||||
@Override
|
||||
public float getBombDamage() {
|
||||
return 10F;
|
||||
return 15F;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -1,12 +1,26 @@
|
||||
package com.hbm.entity.mob;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
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.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(this, worldObj, x1, y1, z1, posX, posY, posZ);
|
||||
|
||||
if (k < ModBlocks.concrete.getExplosionResistance(this) && 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);
|
||||
|
||||
@ -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
|
||||
@ -312,4 +325,23 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
}
|
||||
return PollutionHandler.targetCoords;
|
||||
}
|
||||
|
||||
/** Vanilla implementation, minus the RNG */
|
||||
@Override
|
||||
public boolean isValidLightLevel() {
|
||||
int x = MathHelper.floor_double(this.posX);
|
||||
int y = MathHelper.floor_double(this.boundingBox.minY);
|
||||
int z = MathHelper.floor_double(this.posZ);
|
||||
|
||||
int light = this.worldObj.getBlockLightValue(x, y, z);
|
||||
|
||||
if(this.worldObj.isThundering()) {
|
||||
int skylightSubtracted = this.worldObj.skylightSubtracted;
|
||||
this.worldObj.skylightSubtracted = 10;
|
||||
light = this.worldObj.getBlockLightValue(x, y, z);
|
||||
this.worldObj.skylightSubtracted = skylightSubtracted;
|
||||
}
|
||||
|
||||
return light <= 7;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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,14 @@ public class PollutionHandler {
|
||||
|
||||
if (soot >= MobConfig.rampantScoutSpawnThresh) {
|
||||
EntityGlyphidScout scout = new EntityGlyphidScout(event.world);
|
||||
scout.setLocationAndAngles(event.x, event.y, event.z, event.world.rand.nextFloat() * 360.0F, 0.0F);
|
||||
event.world.spawnEntityInWorld(scout);
|
||||
if(scout.isValidLightLevel()) {
|
||||
//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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -315,7 +315,7 @@ public class OreDictManager {
|
||||
LAPIS.dust(powder_lapis);
|
||||
NETHERQUARTZ.gem(Items.quartz).dust(powder_quartz).ore(Blocks.quartz_ore);
|
||||
DIAMOND.dust(powder_diamond).ore(gravel_diamond, ore_sellafield_diamond);
|
||||
EMERALD.dust(powder_emerald, ore_sellafield_emerald);
|
||||
EMERALD.dust(powder_emerald).ore(ore_sellafield_emerald);
|
||||
|
||||
/*
|
||||
* RADIOACTIVE
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1212,13 +1212,14 @@ public class AssemblerRecipes {
|
||||
new OreDictStack(DURA.bolt(), 16),
|
||||
new ComparableStack(ModItems.motor, 2)
|
||||
}, 200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.large_vehicle_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 36), new OreDictStack("plateAdvancedAlloy", 4), new ComparableStack(ModItems.plate_polymer, 2), new OreDictStack("blockSteel", 4), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 16), new OreDictStack("dyeGreen", 4)}, 500);
|
||||
makeRecipe(new ComparableStack(ModBlocks.water_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 12), new OreDictStack("plateAdvancedAlloy", 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeRed", 1)}, 500);
|
||||
makeRecipe(new ComparableStack(ModBlocks.qe_containment, 1), new AStack[]{new OreDictStack(STEEL.plate(), 24), new OreDictStack("plateAdvancedAlloy", 8), new ComparableStack(ModItems.plate_polymer, 8), new OreDictStack("blockSteel", 2), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 32), new OreDictStack("dyeBlack", 4)}, 500);
|
||||
makeRecipe(new ComparableStack(ModBlocks.qe_sliding_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModItems.plate_polymer, 2), new OreDictStack("blockSteel", 1), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeWhite", 4), new ComparableStack(Blocks.glass, 4)}, 200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.round_airlock_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 32), new OreDictStack("plateAdvancedAlloy", 12), new ComparableStack(ModItems.plate_polymer, 12), new OreDictStack("blockSteel", 6), new ComparableStack(ModItems.motor, 6), new OreDictStack(DURA.bolt(), 16), new OreDictStack("dyeGreen", 4)}, 500);
|
||||
makeRecipe(new ComparableStack(ModBlocks.secure_access_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 48), new OreDictStack("plateAdvancedAlloy", 16), new ComparableStack(ModItems.plate_polymer, 2), new OreDictStack("blockSteel", 6), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 32), new OreDictStack("dyeRed", 8)}, 1000);
|
||||
makeRecipe(new ComparableStack(ModBlocks.sliding_seal_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 12), new OreDictStack("plateAdvancedAlloy", 4), new ComparableStack(ModItems.plate_polymer, 2), new OreDictStack("blockSteel", 1), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeWhite", 2)}, 500);
|
||||
makeRecipe(new ComparableStack(ModBlocks.large_vehicle_door, 1), new AStack[]{new OreDictStack(STEEL.plateCast(), 16), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 16), new OreDictStack("dyeGreen", 4)}, 400);
|
||||
makeRecipe(new ComparableStack(ModBlocks.water_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 16), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeRed", 1)}, 200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.qe_containment, 1), new AStack[]{new OreDictStack(STEEL.plateCast(), 4), new OreDictStack(ALLOY.plate(), 4), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 32), new OreDictStack("dyeBlack", 4)}, 400);
|
||||
makeRecipe(new ComparableStack(ModBlocks.qe_sliding_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 4), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeWhite", 4), new ComparableStack(Blocks.glass, 4)}, 200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.round_airlock_door, 1), new AStack[]{new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ALLOY.plate(), 8), new ComparableStack(ModItems.plate_polymer, 16), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 16), new OreDictStack("dyeGreen", 4)}, 400);
|
||||
makeRecipe(new ComparableStack(ModBlocks.secure_access_door, 1), new AStack[]{new OreDictStack(STEEL.plateCast(), 12), new OreDictStack(ALLOY.plate(), 16), new ComparableStack(ModItems.plate_polymer, 8), new ComparableStack(ModItems.motor, 4), new OreDictStack(DURA.bolt(), 32), new OreDictStack("dyeRed", 8)}, 4000);
|
||||
makeRecipe(new ComparableStack(ModBlocks.sliding_seal_door, 1), new AStack[]{new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(DURA.bolt(), 4), new OreDictStack("dyeWhite", 2)}, 200);
|
||||
makeRecipe(new ComparableStack(ModBlocks.silo_hatch, 1), new AStack[]{new OreDictStack(STEEL.plateWelded(), 4), new ComparableStack(ModItems.plate_polymer, 4), new ComparableStack(ModItems.motor, 2), new OreDictStack(STEEL.bolt(), 16), new OreDictStack(KEY_GREEN, 4)}, 200);
|
||||
|
||||
if(Loader.isModLoaded("Mekanism")) {
|
||||
|
||||
|
||||
@ -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.*;
|
||||
@ -329,6 +330,7 @@ public class ModItems {
|
||||
public static Item plate_dalekanium;
|
||||
public static Item plate_euphemium;
|
||||
public static Item bolt;
|
||||
public static Item bolt_spike;
|
||||
public static Item bolt_compound;
|
||||
public static Item plate_polymer;
|
||||
public static Item plate_kevlar;
|
||||
@ -934,6 +936,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;
|
||||
@ -2598,6 +2603,7 @@ public class ModItems {
|
||||
plate_dalekanium = new Item().setUnlocalizedName("plate_dalekanium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_dalekanium");
|
||||
plate_euphemium = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("plate_euphemium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_euphemium");
|
||||
bolt = new ItemAutogen(MaterialShapes.BOLT).setUnlocalizedName("bolt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bolt");
|
||||
bolt_spike = new ItemCustomLore().setUnlocalizedName("bolt_spike").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bolt_spike");
|
||||
bolt_compound = new Item().setUnlocalizedName("bolt_compound").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":bolt_compound");
|
||||
plate_polymer = new Item().setUnlocalizedName("plate_polymer").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_polymer");
|
||||
plate_kevlar = new Item().setUnlocalizedName("plate_kevlar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_kevlar");
|
||||
@ -3005,6 +3011,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 +3242,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 +4657,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");
|
||||
|
||||
@ -6046,6 +6060,7 @@ public class ModItems {
|
||||
|
||||
//Bolts
|
||||
GameRegistry.registerItem(bolt, bolt.getUnlocalizedName());
|
||||
GameRegistry.registerItem(bolt_spike, bolt_spike.getUnlocalizedName());
|
||||
GameRegistry.registerItem(bolt_compound, bolt_compound.getUnlocalizedName());
|
||||
|
||||
//Cloth
|
||||
@ -6381,6 +6396,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());
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -50,7 +50,7 @@ public class ItemBoltgun extends Item implements IAnimatedItem {
|
||||
World world = player.worldObj;
|
||||
if(!entity.isEntityAlive()) return false;
|
||||
|
||||
ItemStack[] bolts = new ItemStack[] { Mats.MAT_STEEL.make(ModItems.bolt), Mats.MAT_TUNGSTEN.make(ModItems.bolt), Mats.MAT_DURA.make(ModItems.bolt)};
|
||||
ItemStack[] bolts = new ItemStack[] { new ItemStack(ModItems.bolt_spike), Mats.MAT_STEEL.make(ModItems.bolt), Mats.MAT_TUNGSTEN.make(ModItems.bolt), Mats.MAT_DURA.make(ModItems.bolt)};
|
||||
|
||||
for(ItemStack bolt : bolts) {
|
||||
for(int i = 0; i < player.inventory.getSizeInventory(); i++) {
|
||||
|
||||
202
src/main/java/com/hbm/items/tool/ItemPipette.java
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -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 (4844)";
|
||||
public static final String VERSION = "1.0.27 BETA (4845)";
|
||||
//HBM's Beta Naming Convention:
|
||||
//V T (X)
|
||||
//V -> next release version
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -96,6 +96,7 @@ public class CraftingManager {
|
||||
addRecipeAuto(Mats.MAT_TUNGSTEN.make(ModItems.bolt, 16), new Object[] { "D", "D", 'D', W.ingot()});
|
||||
addRecipeAuto(Mats.MAT_STEEL.make(ModItems.bolt, 16), new Object[] { "D", "D", 'D', STEEL.ingot()});
|
||||
addRecipeAuto(Mats.MAT_DURA.make(ModItems.bolt, 16), new Object[] { "D", "D", 'D', DURA.ingot()});
|
||||
addRecipeAuto(new ItemStack(ModItems.bolt_spike, 2), new Object[] { "BB", "B ", "B ", 'B', STEEL.bolt()});
|
||||
addRecipeAuto(new ItemStack(ModItems.pipes_steel, 1), new Object[] { "B", "B", "B", 'B', STEEL.block() });
|
||||
addRecipeAuto(new ItemStack(ModItems.bolt_compound, 1), new Object[] { "PDP", "PTP", "PDP", 'D', DURA.bolt(), 'T', W.bolt(), 'P', TI.plate() });
|
||||
addRecipeAuto(new ItemStack(ModItems.pellet_coal, 1), new Object[] { "PFP", "FOF", "PFP", 'P', COAL.dust(), 'F', Items.flint, 'O', ModBlocks.gravel_obsidian });
|
||||
@ -511,7 +512,7 @@ public class CraftingManager {
|
||||
addRecipeAuto(new ItemStack(ModBlocks.rail_highspeed, 16), new Object[] { "S S", "SIS", "S S", 'S', STEEL.ingot(), 'I', IRON.plate() });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.rail_booster, 6), new Object[] { "S S", "CIC", "SRS", 'S', STEEL.ingot(), 'I', IRON.plate(), 'R', MINGRADE.ingot(), 'C', ModItems.coil_copper });
|
||||
|
||||
addRecipeAuto(new ItemStack(ModBlocks.rail_large_straight, 4), new Object[] { "B B", "SSS", "W W", 'B', STEEL.bolt(), 'S', ModBlocks.steel_beam, 'W', KEY_SLAB });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.rail_large_straight, 4), new Object[] { "B B", "SSS", "W W", 'B', ModItems.bolt_spike, 'S', ModBlocks.steel_beam, 'W', KEY_SLAB });
|
||||
addShapelessAuto(new ItemStack(ModBlocks.rail_large_straight, 1), new Object[] { ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short, ModBlocks.rail_large_straight_short });
|
||||
addShapelessAuto(new ItemStack(ModBlocks.rail_large_straight_short, 5), new Object[] { ModBlocks.rail_large_straight });
|
||||
addRecipeAuto(new ItemStack(ModBlocks.rail_large_buffer, 1), new Object[] { " S", "RS", 'R', ModBlocks.rail_large_straight, 'S', STEEL.ingot() });
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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"));
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -730,6 +730,23 @@ public class ItemRenderLibrary {
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
}
|
||||
});
|
||||
renderers.put(Item.getItemFromBlock(ModBlocks.silo_hatch), new ItemRenderBase(){
|
||||
public void renderInventory() {
|
||||
GL11.glTranslated(0, -2, 0);
|
||||
GL11.glScaled(2, 2, 2);
|
||||
}
|
||||
public void renderCommon() {
|
||||
bindTexture(ResourceManager.silo_hatch_tex);
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
GL11.glRotated(90, 0, 1, 0);
|
||||
ResourceManager.silo_hatch.renderPart("Frame");
|
||||
GL11.glTranslated(0, 0.875, -1.875);
|
||||
GL11.glRotated(-120, 1, 0, 0);
|
||||
GL11.glTranslated(0, -0.875, 1.875);
|
||||
ResourceManager.silo_hatch.renderPart("Hatch");
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
}
|
||||
});
|
||||
renderers.put(Item.getItemFromBlock(ModBlocks.qe_containment), new ItemRenderBase(){
|
||||
public void renderInventory() {
|
||||
GL11.glTranslated(0, -3.5, 0);
|
||||
|
||||
192
src/main/java/com/hbm/render/item/ItemRenderMissileGeneric.java
Normal 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));
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
@ -71,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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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";
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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++) {
|
||||
|
||||
@ -63,15 +63,14 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase
|
||||
this.lastAmount = this.amount;
|
||||
}
|
||||
|
||||
if(this.amount >= this.getCapacity()) {
|
||||
// In case of overfill problems, spit out the excess as scrap
|
||||
if(amount > getCapacity()) {
|
||||
ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(type, amount));
|
||||
EntityItem item = new EntityItem(worldObj, xCoord + 0.5, yCoord + 2, zCoord + 0.5, scrap);
|
||||
worldObj.spawnEntityInWorld(item);
|
||||
}
|
||||
this.amount = this.getCapacity();
|
||||
|
||||
if (this.amount >= this.getCapacity()) {
|
||||
//In case of overfill problems, spit out the excess as scrap
|
||||
if (amount > getCapacity()) {
|
||||
ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(type, Math.max(amount - getCapacity(), 0)));
|
||||
EntityItem item = new EntityItem(worldObj, xCoord + 0.5, yCoord + 2, zCoord + 0.5, scrap);
|
||||
worldObj.spawnEntityInWorld(item);
|
||||
}
|
||||
this.amount = this.getCapacity();
|
||||
}
|
||||
|
||||
if(this.amount == 0) {
|
||||
@ -139,10 +138,10 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase
|
||||
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, 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())
|
||||
new DirPos(xCoord - rot.offsetX - dir.offsetX * 5, yCoord, zCoord - rot.offsetZ - dir.offsetZ * 5, rot.getOpposite())
|
||||
};
|
||||
}
|
||||
|
||||
@ -192,8 +191,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase
|
||||
|
||||
@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;
|
||||
if(this.type != null && this.type != stack.material) return false;
|
||||
return !(this.amount >= this.getCapacity() || getInstalledMold() == null);
|
||||
}
|
||||
|
||||
@ -210,9 +208,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase
|
||||
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());
|
||||
this.sendFluid(steam, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1294,6 +1294,7 @@ item.bobmazon_tools.name=Bobmazon: Werkzeuge
|
||||
item.bobmazon_weapons.name=Bobmazon: Waffen und Sprengstoffe
|
||||
item.bolt.name=%sbolzen
|
||||
item.bolt_compound.name=Verstärkte Turbinenwelle
|
||||
item.bolt_spike.name=Gleisnagel
|
||||
item.boltgun.name=Pneumatische Nietenpistole
|
||||
item.bomb_caller.name=Luftschlag Zielmarker
|
||||
item.bomb_waffle.name=Massenvernichtungswaffel
|
||||
@ -4471,6 +4472,8 @@ tile.sellafield_4.name=Infernales Sellafit
|
||||
tile.sellafield_core.name=Sellafit-Corium
|
||||
tile.sellafield_slaked.name=Gelöschtes Sellafit
|
||||
tile.semtex.name=Semtex
|
||||
tile.silo_hatch.name=Siloluke
|
||||
tile.sliding_blast_door.name=Sprengtür
|
||||
tile.solar_mirror.name=Heliostatspiegel
|
||||
tile.soyuz_capsule.name=Landekapsel
|
||||
tile.soyuz_launcher.name=Soyuz-Startplatform
|
||||
|
||||
@ -1010,7 +1010,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
|
||||
@ -1963,6 +1967,8 @@ item.bobmazon_tools.name=Bobmazon: Tools
|
||||
item.bobmazon_weapons.name=Bobmazon: Weapons and Explosives
|
||||
item.bolt.name=%s Bolt
|
||||
item.bolt_compound.name=Reinforced Turbine Shaft
|
||||
item.bolt_spike.name=Railroad Spike
|
||||
item.bolt_spike.desc=Radiates a threatening aura, somehow
|
||||
item.boltgun.name=Pneumatic Rivet Gun
|
||||
item.bomb_caller.name=Airstrike Designator
|
||||
item.bomb_waffle.name=Waffle of Mass Destruction
|
||||
@ -3652,6 +3658,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)
|
||||
@ -3675,8 +3684,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
|
||||
@ -3690,8 +3699,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
|
||||
@ -5473,6 +5482,7 @@ tile.sellafield.4.name=Infernal Sellafite
|
||||
tile.sellafield.5.name=Sellafite-Corium
|
||||
tile.sellafield_slaked.name=Slaked Sellafite
|
||||
tile.semtex.name=Semtex
|
||||
tile.silo_hatch.name=Silo Hatch
|
||||
tile.sliding_blast_door.name=Sliding Blast Door
|
||||
tile.solar_mirror.name=Heliostat Mirror
|
||||
tile.soyuz_capsule.name=Cargo Landing Capsule
|
||||
@ -5667,9 +5677,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
|
||||
|
||||
@ -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=Пустой стержень
|
||||
|
||||
344
src/main/resources/assets/hbm/models/doors/silo_hatch.obj
Normal 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
|
||||
|
Before Width: | Height: | Size: 497 B |
|
Before Width: | Height: | Size: 515 B |
|
Before Width: | Height: | Size: 566 B |
|
Before Width: | Height: | Size: 492 B |
|
Before Width: | Height: | Size: 466 B |
|
Before Width: | Height: | Size: 492 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 11 KiB |
BIN
src/main/resources/assets/hbm/textures/items/bolt_spike.png
Normal file
|
After Width: | Height: | Size: 224 B |
BIN
src/main/resources/assets/hbm/textures/items/pipette.png
Normal file
|
After Width: | Height: | Size: 205 B |
BIN
src/main/resources/assets/hbm/textures/items/pipette_boron.png
Normal file
|
After Width: | Height: | Size: 213 B |
BIN
src/main/resources/assets/hbm/textures/items/pipette_empty.png
Normal file
|
After Width: | Height: | Size: 91 B |
|
After Width: | Height: | Size: 366 B |
|
After Width: | Height: | Size: 104 B |
BIN
src/main/resources/assets/hbm/textures/items/pipette_overlay.png
Normal file
|
After Width: | Height: | Size: 151 B |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 1.3 KiB |