depth ores, clusters

This commit is contained in:
Bob 2021-04-25 20:58:03 +02:00
parent 23fb11a3e4
commit 590ea605a4
34 changed files with 362 additions and 28 deletions

View File

@ -173,10 +173,10 @@ public abstract class BlockDummyable extends BlockContainer {
return;
}
//if(!world.isRemote) {
if(!world.isRemote) {
world.setBlock(x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, this, dir.ordinal() + offset, 3);
fillSpace(world, x, y, z, dir, o);
//}
}
y -= getHeightOffset();
world.scheduleBlockUpdate(x, y, z, this, 1);
world.scheduleBlockUpdate(x, y, z, this, 2);
@ -234,7 +234,9 @@ public abstract class BlockDummyable extends BlockContainer {
// TODO: run extensive tests on whether this change doesn't break anything
ForgeDirection d = ForgeDirection.getOrientation(i);
world.setBlockToAir(x - d.offsetX, y - d.offsetY, z - d.offsetZ);
if(world.getBlock(x - d.offsetX, y - d.offsetY, z - d.offsetZ) == this)
world.setBlockToAir(x - d.offsetX, y - d.offsetY, z - d.offsetZ);
// }
}

View File

@ -101,6 +101,15 @@ public class ModBlocks {
public static Block ore_gneiss_schrabidium;
public static Block ore_gneiss_rare;
public static Block ore_gneiss_gas;
public static Block stone_depth;
public static Block cluster_depth_iron;
public static Block cluster_depth_titanium;
public static Block cluster_depth_tungsten;
public static Block cluster_iron;
public static Block cluster_titanium;
public static Block cluster_aluminium;
public static Block ore_oil;
public static Block ore_oil_empty;
@ -1008,6 +1017,10 @@ public class ModBlocks {
ore_coal_oil = new BlockCoalOil(Material.rock).setBlockName("ore_coal_oil").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_coal_oil");
ore_coal_oil_burning = new BlockCoalBurning(Material.rock).setBlockName("ore_coal_oil_burning").setCreativeTab(MainRegistry.blockTab).setLightLevel(10F/15F).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_coal_oil_burning");
cluster_iron = new BlockCluster(Material.rock).setBlockName("cluster_iron").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":cluster_iron");
cluster_titanium = new BlockCluster(Material.rock).setBlockName("cluster_titanium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":cluster_titanium");
cluster_aluminium = new BlockCluster(Material.rock).setBlockName("cluster_aluminium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":cluster_aluminium");
ore_nether_coal = new BlockNetherCoal(Material.rock, true, 5, true).setBlockName("ore_nether_coal").setCreativeTab(MainRegistry.blockTab).setLightLevel(10F/15F).setHardness(0.4F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_nether_coal");
ore_nether_smoldering = new BlockSmolder(Material.rock).setBlockName("ore_nether_smoldering").setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(0.4F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_nether_smoldering");
ore_nether_uranium = new BlockOutgas(Material.rock, true, 5, false).setBlockName("ore_nether_uranium").setCreativeTab(MainRegistry.blockTab).setHardness(0.4F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_nether_uranium");
@ -1041,6 +1054,11 @@ public class ModBlocks {
ore_gneiss_rare = new BlockOre(Material.rock).setBlockName("ore_gneiss_rare").setCreativeTab(MainRegistry.blockTab).setHardness(1.5F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_gneiss_rare");
ore_gneiss_gas = new BlockOre(Material.rock).setBlockName("ore_gneiss_gas").setCreativeTab(MainRegistry.blockTab).setHardness(1.5F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_gneiss_gas");
stone_depth = new BlockGeneric(Material.rock).setBlockName("stone_depth").setCreativeTab(MainRegistry.blockTab).setBlockUnbreakable().setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":stone_depth");
cluster_depth_iron = new BlockOre(Material.rock).setBlockName("cluster_depth_iron").setCreativeTab(MainRegistry.blockTab).setBlockUnbreakable().setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cluster_depth_iron");
cluster_depth_titanium = new BlockOre(Material.rock).setBlockName("cluster_depth_titanium").setCreativeTab(MainRegistry.blockTab).setBlockUnbreakable().setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cluster_depth_titanium");
cluster_depth_tungsten = new BlockOre(Material.rock).setBlockName("cluster_depth_tungsten").setCreativeTab(MainRegistry.blockTab).setBlockUnbreakable().setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cluster_depth_tungsten");
ore_australium = new BlockGeneric(Material.rock).setBlockName("ore_australium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_australium");
ore_weidanium = new BlockGeneric(Material.rock).setBlockName("ore_weidanium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_weidanium");
ore_reiium = new BlockGeneric(Material.rock).setBlockName("ore_reiium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_reiium");
@ -1696,7 +1714,7 @@ public class ModBlocks {
FluidRegistry.registerFluid(schrabidic_fluid);
schrabidic_block = new SchrabidicBlock(schrabidic_fluid, fluidschrabidic.setReplaceable(), ModDamageSource.radiation).setBlockName("schrabidic_block").setResistance(500F);
corium_fluid = new SchrabidicFluid().setDensity(6000).setViscosity(500).setLuminosity(10).setTemperature(600).setUnlocalizedName("corium_fluid");
corium_fluid = new CoriumFluid().setDensity(6000).setViscosity(500).setLuminosity(10).setTemperature(600).setUnlocalizedName("corium_fluid");
FluidRegistry.registerFluid(corium_fluid);
corium_block = new CoriumBlock(corium_fluid, fluidcorium).setBlockName("corium_block").setResistance(500F);
@ -1801,6 +1819,11 @@ public class ModBlocks {
GameRegistry.registerBlock(ore_verticium, ItemOreBlock.class, ore_verticium.getUnlocalizedName());
GameRegistry.registerBlock(ore_rare, ItemOreBlock.class, ore_rare.getUnlocalizedName());
//Stone clusters
GameRegistry.registerBlock(cluster_iron, ItemBlockCluster.class, cluster_iron.getUnlocalizedName());
GameRegistry.registerBlock(cluster_titanium, ItemBlockCluster.class, cluster_titanium.getUnlocalizedName());
GameRegistry.registerBlock(cluster_aluminium, ItemBlockCluster.class, cluster_aluminium.getUnlocalizedName());
//Nice Meme
GameRegistry.registerBlock(ore_coal_oil, ore_coal_oil.getUnlocalizedName());
GameRegistry.registerBlock(ore_coal_oil_burning, ore_coal_oil_burning.getUnlocalizedName());
@ -1840,11 +1863,17 @@ public class ModBlocks {
GameRegistry.registerBlock(ore_gneiss_rare, ItemOreBlock.class, ore_gneiss_rare.getUnlocalizedName());
GameRegistry.registerBlock(ore_gneiss_gas, ore_gneiss_gas.getUnlocalizedName());
//Depth ores
GameRegistry.registerBlock(cluster_depth_iron, ItemBlockDepth.class, cluster_depth_iron.getUnlocalizedName());
GameRegistry.registerBlock(cluster_depth_titanium, ItemBlockDepth.class, cluster_depth_titanium.getUnlocalizedName());
GameRegistry.registerBlock(cluster_depth_tungsten, ItemBlockDepth.class, cluster_depth_tungsten.getUnlocalizedName());
//End Ores
GameRegistry.registerBlock(ore_tikite, ore_tikite.getUnlocalizedName());
//Stone Variants
GameRegistry.registerBlock(stone_gneiss, stone_gneiss.getUnlocalizedName());
GameRegistry.registerBlock(stone_depth, ItemBlockDepth.class, stone_depth.getUnlocalizedName());
//Blocks
GameRegistry.registerBlock(block_uranium, ItemBlockHazard.class, block_uranium.getUnlocalizedName());

View File

@ -0,0 +1,31 @@
package com.hbm.blocks.fluid;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.util.IIcon;
import net.minecraftforge.fluids.Fluid;
public class CoriumFluid extends Fluid {
public CoriumFluid() {
super("corium_fluid");
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon() {
return getStillIcon();
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getStillIcon() {
return CoriumBlock.stillIcon;
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getFlowingIcon() {
return CoriumBlock.flowingIcon;
}
}

View File

@ -0,0 +1,64 @@
package com.hbm.blocks.generic;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.items.ModItems;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.common.util.FakePlayer;
public class BlockCluster extends Block {
public BlockCluster(Material mat) {
super(mat);
}
@Override
public Item getItemDropped(int i, Random rand, int j) {
return null;
}
@Override
public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int meta) {
if(player instanceof FakePlayer || player == null) {
return;
}
if(!world.isRemote && world.getGameRules().getGameRuleBooleanValue("doTileDrops") && !world.restoringBlockSnapshots) {
Item drop = getDrop();
if(drop == null)
return;
float f = 0.7F;
double mX = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
double mY = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
double mZ = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
EntityItem entityitem = new EntityItem(world, (double) x + mX, (double) y + mY, (double) z + mZ, new ItemStack(drop));
entityitem.delayBeforeCanPickup = 10;
world.spawnEntityInWorld(entityitem);
}
}
private Item getDrop() {
if(this == ModBlocks.cluster_iron)
return ModItems.crystal_iron;
if(this == ModBlocks.cluster_titanium)
return ModItems.crystal_titanium;
if(this == ModBlocks.cluster_aluminium)
return ModItems.crystal_aluminium;
return null;
}
}

View File

@ -198,6 +198,15 @@ public class BlockOre extends Block {
if(this == ModBlocks.ore_lignite) {
return ModItems.lignite;
}
if(this == ModBlocks.cluster_depth_iron) {
return ModItems.crystal_iron;
}
if(this == ModBlocks.cluster_depth_titanium) {
return ModItems.crystal_titanium;
}
if(this == ModBlocks.cluster_depth_tungsten) {
return ModItems.crystal_tungsten;
}
return Item.getItemFromBlock(this);
}

View File

@ -24,6 +24,10 @@ public class WorldConfig {
public static int gassshaleSpawn = 5;
public static int gasbubbleSpawn = 64;
public static int ironClusterSpawn = 4;
public static int titaniumClusterSpawn = 2;
public static int aluminiumClusterSpawn = 3;
public static int netherUraniumuSpawn = 8;
public static int netherTungstenSpawn = 10;
public static int netherSulfurSpawn = 26;
@ -86,6 +90,10 @@ public class WorldConfig {
gassshaleSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.16_gasShaleSpawnRate", "Amount of oil shale veins per chunk", 5);
gasbubbleSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.17_gasBubbleSpawnRate", "Spawns a gas bubble every nTH chunk", 64);
ironClusterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.C00_ironClusterSpawn", "Amount of iron cluster veins per chunk", 4);
titaniumClusterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.C01_titaniumClusterSpawn", "Amount of titanium cluster veins per chunk", 2);
aluminiumClusterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.C02_aluminiumClusterSpawn", "Amount of aluminium cluster veins per chunk", 3);
netherUraniumuSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.N00_uraniumSpawnrate", "Amount of nether uranium per chunk", 8);
netherTungstenSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.N01_tungstenSpawnrate", "Amount of nether tungsten per chunk", 10);
netherSulfurSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.N02_sulfurSpawnrate", "Amount of nether sulfur per chunk", 26);

View File

@ -38,6 +38,8 @@ public class FuelHandler implements IFuelHandler {
return 800;
if(fuel.getItem() == ModItems.coal_infernal)
return 4800;
if(fuel.getItem() == ModItems.crystal_coal)
return 6400;
return 0;
}

View File

@ -204,9 +204,11 @@ public class CentrifugeRecipes {
recipes.put(new ComparableStack(ModItems.ingot_schraranium), new ItemStack[] { new ItemStack(ModItems.nugget_schrabidium, 2), new ItemStack(ModItems.nugget_schrabidium, 1), new ItemStack(ModItems.nugget_uranium, 3), new ItemStack(ModItems.nugget_plutonium, 2) });
recipes.put(new ComparableStack(ModItems.crystal_coal), new ItemStack[] { new ItemStack(ModItems.powder_coal, 3), new ItemStack(ModItems.powder_coal, 3), new ItemStack(ModItems.powder_coal, 3), new ItemStack(ModItems.powder_lithium_tiny, 1) });
recipes.put(new ComparableStack(ModItems.crystal_iron), new ItemStack[] { new ItemStack(ModItems.powder_iron, 2), new ItemStack(ModItems.powder_iron, 2), new ItemStack(ModItems.powder_titanium, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) });
recipes.put(new ComparableStack(ModItems.crystal_gold), new ItemStack[] { new ItemStack(ModItems.powder_gold, 2), new ItemStack(ModItems.powder_gold, 2), new ItemStack(ModItems.nugget_mercury, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) });
recipes.put(new ComparableStack(ModItems.crystal_redstone), new ItemStack[] { new ItemStack(Items.redstone, 3), new ItemStack(Items.redstone, 3), new ItemStack(Items.redstone, 3), new ItemStack(ModItems.nugget_mercury, 3) });
recipes.put(new ComparableStack(ModItems.crystal_lapis), new ItemStack[] { new ItemStack(ModItems.powder_lapis, 3), new ItemStack(ModItems.powder_lapis, 3), new ItemStack(ModItems.powder_lapis, 3), new ItemStack(ModItems.powder_cobalt, 1) });
recipes.put(new ComparableStack(ModItems.crystal_diamond), new ItemStack[] { new ItemStack(ModItems.powder_diamond, 1), new ItemStack(ModItems.powder_diamond, 1), new ItemStack(ModItems.powder_diamond, 1), new ItemStack(ModItems.powder_diamond, 1) });
recipes.put(new ComparableStack(ModItems.crystal_uranium), new ItemStack[] { new ItemStack(ModItems.powder_uranium, 2), new ItemStack(ModItems.powder_uranium, 2), new ItemStack(ModItems.nugget_polonium, 2), new ItemStack(ModItems.powder_lithium_tiny, 1) });
recipes.put(new ComparableStack(ModItems.crystal_thorium), new ItemStack[] { new ItemStack(ModItems.powder_thorium, 2), new ItemStack(ModItems.powder_thorium, 2), new ItemStack(ModItems.powder_uranium, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) });

View File

@ -23,9 +23,11 @@ public class CrystallizerRecipes {
public static void register() {
recipes.put("oreCoal", new ItemStack(ModItems.crystal_coal));
recipes.put("oreIron", new ItemStack(ModItems.crystal_iron));
recipes.put("oreGold", new ItemStack(ModItems.crystal_gold));
recipes.put("oreRedstone", new ItemStack(ModItems.crystal_redstone));
recipes.put("oreLapis", new ItemStack(ModItems.crystal_lapis));
recipes.put("oreDiamond", new ItemStack(ModItems.crystal_diamond));
recipes.put("oreUranium", new ItemStack(ModItems.crystal_uranium));
recipes.put("oreThorium", new ItemStack(ModItems.crystal_thorium));
@ -55,6 +57,7 @@ public class CrystallizerRecipes {
recipes.put(new ComparableStack(ModBlocks.gravel_obsidian), new ItemStack(ModBlocks.brick_obsidian));
recipes.put("blockRedstone", new ItemStack(ModItems.nugget_mercury));
recipes.put(new ComparableStack(Items.rotten_flesh), new ItemStack(Items.leather));
recipes.put(new ComparableStack(ModItems.coal_infernal), new ItemStack(ModItems.solid_fuel));
recipes.put(new ComparableStack(ModItems.powder_diamond), new ItemStack(Items.diamond));
recipes.put(new ComparableStack(ModItems.powder_emerald), new ItemStack(Items.emerald));

View File

@ -152,9 +152,11 @@ public class ShredderRecipes {
ShredderRecipes.setRecipe(ModItems.coal_infernal, new ItemStack(ModItems.powder_coal, 3));
ShredderRecipes.setRecipe(ModItems.ingot_schraranium, new ItemStack(ModItems.nugget_schrabidium, 2));
ShredderRecipes.setRecipe(ModItems.crystal_coal, new ItemStack(ModItems.powder_coal, 3));
ShredderRecipes.setRecipe(ModItems.crystal_iron, new ItemStack(ModItems.powder_iron, 3));
ShredderRecipes.setRecipe(ModItems.crystal_gold, new ItemStack(ModItems.powder_gold, 3));
ShredderRecipes.setRecipe(ModItems.crystal_redstone, new ItemStack(Items.redstone, 8));
ShredderRecipes.setRecipe(ModItems.crystal_lapis, new ItemStack(ModItems.powder_lapis, 8));
ShredderRecipes.setRecipe(ModItems.crystal_diamond, new ItemStack(ModItems.powder_diamond, 3));
ShredderRecipes.setRecipe(ModItems.crystal_uranium, new ItemStack(ModItems.powder_uranium, 3));
ShredderRecipes.setRecipe(ModItems.crystal_plutonium, new ItemStack(ModItems.powder_plutonium, 3));

View File

@ -60,7 +60,7 @@ public class ContainerSILEX extends Container {
if(!this.mergeItemStack(var5, silex.getSizeInventory(), this.inventorySlots.size(), true)) {
return null;
}
} else if(var5.getItem() == ModItems.turret_chip) {
} else if(var5.getItem() == ModItems.turret_chip) { //did i copy this from turrets? tf is happening lol
if(!this.mergeItemStack(var5, 0, 1, false))
return null;

View File

@ -1,7 +1,10 @@
package com.hbm.inventory.container;
import com.hbm.items.ModItems;
import com.hbm.items.special.WatzFuel;
import com.hbm.tileentity.machine.TileEntityWatzCore;
import api.hbm.energy.IBatteryItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
@ -96,37 +99,51 @@ public class ContainerWatzCore extends Container {
}
@Override
public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2)
{
public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) {
ItemStack var3 = null;
Slot var4 = (Slot) this.inventorySlots.get(par2);
if (var4 != null && var4.getHasStack())
{
if(var4 != null && var4.getHasStack()) {
ItemStack var5 = var4.getStack();
var3 = var5.copy();
if (par2 <= 39) {
if (!this.mergeItemStack(var5, 40, this.inventorySlots.size(), true))
{
if(par2 <= 39) {
if(!this.mergeItemStack(var5, 40, this.inventorySlots.size(), true)) {
return null;
}
} else {
return null;
if(var5.getItem() == ModItems.titanium_filter) {
if(!this.mergeItemStack(var5, 38, 39, false)) {
return null;
}
} else if(var5.getItem() instanceof WatzFuel) {
if(!this.mergeItemStack(var5, 0, 36, false)) {
return null;
}
} else if(var5.getItem() instanceof IBatteryItem) {
if(!this.mergeItemStack(var5, 37, 38, false)) {
return null;
}
} else {
if(!this.mergeItemStack(var5, 36, 37, false)) {
return null;
}
}
}
if (var5.stackSize == 0)
{
if(var5.stackSize == 0) {
var4.putStack((ItemStack) null);
}
else
{
} else {
var4.onSlotChanged();
}
var4.onPickupFromSlot(p_82846_1_, var5);
}
return var3;
}
}
@Override
public boolean canInteractWith(EntityPlayer player) {

View File

@ -73,7 +73,7 @@ public class GUIRBMKControlAuto extends GuiInfoContainer {
case QUAD_DOWN: func += " Negative Quadratic"; break;
}
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 69, guiTop + 27, 26, 19, mouseX, mouseY, new String[]{ (int)(rod.level * 100) + "%" } );
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 69, guiTop + 27, 26, 19, mouseX, mouseY, new String[]{ func } );
}
@Override

View File

@ -253,9 +253,11 @@ public class ModItems {
public static Item solid_fuel;
public static Item rocket_fuel;
public static Item crystal_coal;
public static Item crystal_iron;
public static Item crystal_gold;
public static Item crystal_redstone;
public static Item crystal_lapis;
public static Item crystal_diamond;
public static Item crystal_uranium;
public static Item crystal_thorium;
@ -2469,9 +2471,11 @@ public class ModItems {
nugget_les = new ItemHazard(ItemHazard.saf * ItemHazard.nugget, false, true).setUnlocalizedName("nugget_les").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_les");
plate_combine_steel = new Item().setUnlocalizedName("plate_combine_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":plate_combine_steel");
crystal_coal = new Item().setUnlocalizedName("crystal_coal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_coal");
crystal_iron = new Item().setUnlocalizedName("crystal_iron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_iron");
crystal_gold = new Item().setUnlocalizedName("crystal_gold").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_gold");
crystal_redstone = new Item().setUnlocalizedName("crystal_redstone").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_redstone");
crystal_lapis = new Item().setUnlocalizedName("crystal_lapis").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_lapis");
crystal_diamond = new Item().setUnlocalizedName("crystal_diamond").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_diamond");
crystal_uranium = new ItemHazard(ItemHazard.u * ItemHazard.crystal).setUnlocalizedName("crystal_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_uranium");
crystal_thorium = new ItemHazard(ItemHazard.th232 * ItemHazard.crystal).setUnlocalizedName("crystal_thorium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_thorium");
@ -5026,9 +5030,11 @@ public class ModItems {
GameRegistry.registerItem(ballistite, ballistite.getUnlocalizedName());
//Crystals
GameRegistry.registerItem(crystal_coal, crystal_coal.getUnlocalizedName());
GameRegistry.registerItem(crystal_iron, crystal_iron.getUnlocalizedName());
GameRegistry.registerItem(crystal_gold, crystal_gold.getUnlocalizedName());
GameRegistry.registerItem(crystal_redstone, crystal_redstone.getUnlocalizedName());
GameRegistry.registerItem(crystal_lapis, crystal_lapis.getUnlocalizedName());
GameRegistry.registerItem(crystal_diamond, crystal_diamond.getUnlocalizedName());
GameRegistry.registerItem(crystal_uranium, crystal_uranium.getUnlocalizedName());
GameRegistry.registerItem(crystal_thorium, crystal_thorium.getUnlocalizedName());

View File

@ -0,0 +1,25 @@
package com.hbm.items.block;
import java.util.List;
import com.hbm.util.I18nUtil;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
public class ItemBlockCluster extends ItemBlock {
public ItemBlockCluster(Block block) {
super(block);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
super.addInformation(stack, player, list, bool);
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.tile.cluster"));
}
}

View File

@ -0,0 +1,25 @@
package com.hbm.items.block;
import java.util.List;
import com.hbm.util.I18nUtil;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
public class ItemBlockDepth extends ItemBlock {
public ItemBlockDepth(Block block) {
super(block);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
super.addInformation(stack, player, list, bool);
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.tile.depth"));
}
}

View File

@ -255,7 +255,7 @@ public class ItemChemistryTemplate extends Item {
case SOLID_FUEL:
return 200;
case ELECTROLYSIS:
return 400;
return 150;
case XENON:
return 300;
case XENON_OXY:

View File

@ -24,6 +24,7 @@ import com.hbm.world.dungeon.Satellite;
import com.hbm.world.dungeon.Silo;
import com.hbm.world.dungeon.Spaceship;
import com.hbm.world.dungeon.Vertibird;
import com.hbm.world.feature.DepthDeposit;
import com.hbm.world.feature.Dud;
import com.hbm.world.feature.Geyser;
import com.hbm.world.feature.GeyserLarge;
@ -146,6 +147,10 @@ public class HbmWorldGen implements IWorldGenerator {
DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.rareSpawn, 5, 5, 20, ModBlocks.ore_rare);
DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.ligniteSpawn, 24, 35, 25, ModBlocks.ore_lignite);
DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.asbestosSpawn, 4, 16, 16, ModBlocks.ore_asbestos);
DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.ironClusterSpawn, 6, 5, 50, ModBlocks.cluster_iron);
DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.titaniumClusterSpawn, 6, 5, 30, ModBlocks.cluster_titanium);
DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.aluminiumClusterSpawn, 6, 5, 40, ModBlocks.cluster_aluminium);
if(WorldConfig.oilcoalSpawn > 0 && rand.nextInt(WorldConfig.oilcoalSpawn) == 0)
DungeonToolbox.generateOre(world, rand, i, j, 1, 64, 32, 32, ModBlocks.ore_coal_oil);
@ -153,6 +158,10 @@ public class HbmWorldGen implements IWorldGenerator {
if(WorldConfig.gasbubbleSpawn > 0 && rand.nextInt(WorldConfig.gasbubbleSpawn) == 0)
DungeonToolbox.generateOre(world, rand, i, j, 1, 32, 30, 10, ModBlocks.gas_flammable);
DepthDeposit.generateCondition(world, i, 0, 3, j, 5, 0.6D, ModBlocks.cluster_depth_iron, rand, 16);
DepthDeposit.generateCondition(world, i, 0, 3, j, 5, 0.6D, ModBlocks.cluster_depth_titanium, rand, 16);
DepthDeposit.generateCondition(world, i, 0, 3, j, 5, 0.6D, ModBlocks.cluster_depth_tungsten, rand, 16);
for (int k = 0; k < 6; k++) {
int randPosX = i + rand.nextInt(16);
int randPosY = rand.nextInt(35);

View File

@ -619,8 +619,8 @@ public class CraftingManager {
GameRegistry.addRecipe(new ItemStack(Blocks.torch, 8), new Object[] { "L", "S", 'L', ModItems.coke, 'S', Items.stick });
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_missile_assembly, 1), new Object[] { "PWP", "SSS", "CCC", 'P', ModItems.pedestal_steel, 'W', ModItems.wrench, 'S', "plateSteel", 'C', ModBlocks.steel_scaffold }));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.struct_launcher, 1), new Object[] { "PPP", "SDS", "CCC", 'P', "plateSteel", 'S', ModBlocks.steel_scaffold, 'D', ModItems.pipes_steel, 'C', ModBlocks.concrete_smooth }));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.struct_launcher, 1), new Object[] { "PPP", "SDS", "CCC", 'P', "plateSteel", 'S', ModBlocks.steel_scaffold, 'D', ModItems.pipes_steel, 'C', ModBlocks.concrete }));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.struct_launcher, 1), new Object[] { "PPP", "SDS", "CCC", 'P', "plateSteel", 'S', ModBlocks.steel_scaffold, 'D', ModBlocks.chain, 'C', ModBlocks.concrete_smooth }));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.struct_launcher, 1), new Object[] { "PPP", "SDS", "CCC", 'P', "plateSteel", 'S', ModBlocks.steel_scaffold, 'D', ModBlocks.chain, 'C', ModBlocks.concrete }));
GameRegistry.addRecipe(new ItemStack(ModBlocks.struct_scaffold, 1), new Object[] { "SSS", "DCD", "SSS", 'S', ModBlocks.steel_scaffold, 'D', ModBlocks.fluid_duct, 'C', ModBlocks.red_cable });
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.seg_10, 1), new Object[] { "P", "S", "B", 'P', "plateAluminum", 'S', ModBlocks.steel_scaffold, 'B', ModBlocks.steel_beam }));

View File

@ -0,0 +1,45 @@
package com.hbm.world.feature;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class DepthDeposit {
public static void generateCondition(World world, int x, int yMin, int yDev, int z, int size, double fill, Block block, Random rand, int chance) {
if(rand.nextInt(chance) == 0)
generate(world, x + rand.nextInt(16), yMin + rand.nextInt(yDev), z + rand.nextInt(16), size, fill, block, rand);
}
public static void generate(World world, int x, int y, int z, int size, double fill, Block block, Random rand) {
for(int i = x - size; i <= x + size; i++) {
for(int j = y - size; j <= y + size; j++) {
for(int k = z - size; k <= z + size; k++) {
if(j < 1)
continue;
double len = Vec3.createVectorHelper(x - i, y - j, z - k).lengthVector();
Block target = world.getBlock(i, j, k);
if(target.isReplaceableOreGen(world, i, j, k, Blocks.stone) || target.isReplaceableOreGen(world, i, j, k, Blocks.bedrock)) { //yes you've heard right, bedrock
if(len + rand.nextInt(2) < size * fill) {
world.setBlock(i, j, k, block);
} else if(len + rand.nextInt(2) <= size) {
world.setBlock(i, j, k, ModBlocks.stone_depth);
}
}
}
}
}
}
}

View File

@ -3,7 +3,6 @@ package com.hbm.world.generator;
import java.util.List;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.RecipesCommon.MetaBlock;
import net.minecraft.block.Block;

View File

@ -960,6 +960,7 @@ item.crucible.name=Schmelztiegel
item.crystal_aluminium.name=Aluminiumkristalle
item.crystal_beryllium.name=Berylliumkristalle
item.crystal_charred.name=Verkohlter Kristall
item.crystal_coal.name=Kohlekristalle
item.crystal_copper.name=Kupferkristalle
item.crystal_diamond.name=Diamantkristalle
item.crystal_energy.name=Energiekristall
@ -968,6 +969,7 @@ item.crystal_gold.name=Goldkristalle
item.crystal_horn.name=Kristallhorn
item.crystal_iron.name=Eisenkristalle
item.crystal_lead.name=Bleikristalle
item.crystal_lapis.name=Lapiskristalle
item.crystal_lithium.name=Lithiumkristalle
item.crystal_niter.name=Salpeterkristalle
item.crystal_phosphorus.name=Phosphorkristalle
@ -1442,6 +1444,7 @@ item.man_explosive.name=Sprendlinse
item.man_explosive8.name=Implosions-Treibladung
item.man_igniter.name=Zünder
item.man_kit.name=Fat Man Kit
item.marshmallow.name=Marshmallow am Stiel
item.mask_of_infamy.name=Maske der Schande
item.matchstick.name=Streichholz
item.mech_key.name=Großer Silberschlüssel
@ -1915,6 +1918,7 @@ item.rbmk_fuel_hes.name=HES-RBMK-Kernbrennstoff
item.rbmk_fuel_leaus.name=LEAus-RBMK-Kernbrennstoff
item.rbmk_fuel_lep.name=LEP-RBMK-Kernbrennstoff
item.rbmk_fuel_les.name=LES-RBMK-Kernbrennstoff
item.rbmk_fuel_men.name=MEN-RBMK-Kernbrennstoff
item.rbmk_fuel_mep.name=MEP-RBMK-Kernbrennstoff
item.rbmk_fuel_mes.name=MES-RBMK-Kernbrennstoff
item.rbmk_fuel_meu.name=MEU-RBMK-Kernbrennstoff
@ -2376,6 +2380,7 @@ tile.block_aluminium.name=Aluminiumblock
tile.block_asbestos.name=Asbestblock
tile.block_australium.name=Australiumblock
tile.block_beryllium.name=Berylliumblock
tile.block_boron.name=Borblock
tile.block_cap_fritz.name=Fritz-Kola Kronkorkenblock
tile.block_cap_korl.name=Korl Kronkorkenblock
tile.block_cap_nuka.name=Nuka Kronkorkenblock
@ -2397,6 +2402,7 @@ tile.block_euphemium_cluster.name=Euphemiumgeätzter Schrabidium-Cluster
tile.block_fallout.name=Fallout-Block
tile.block_fiberglass.name=Fiberglasrolle
tile.block_fluorite.name=Fluoritblock
tile.block_graphite.name=Graphitblock
tile.block_insulator.name=Isolatorrolle
tile.block_lead.name=Bleiblock
tile.block_lanthanium.name=Lanthanblock
@ -2434,6 +2440,7 @@ tile.block_thorium.name=Thoriumblock
tile.block_thorium_fuel.name=Thoriumkernbrennstoffblock
tile.block_titanium.name=Titanblock
tile.block_trinitite.name=Trinititblock
tile.block_tritium.name=Tritiumzellenblock
tile.block_tungsten.name=Wolframblock
tile.block_u233.name=U233-Block
tile.block_u235.name=U235-Block
@ -2479,6 +2486,12 @@ tile.cable_switch.name=Stromschalter
tile.cheater_virus.name=Geliertes Euphemium
tile.cheater_virus_seed.name=Instabiler Euphemiumschrabid-Block
tile.chlorine_gas.name=Chlorgas
tile.cluster_aluminium.name=Aluminiumerzcluster
tile.cluster_depth_iron.name=Tiefen-Eisenerzcluster
tile.cluster_depth_titanium.name=Tiefen-Titanerzcluster
tile.cluster_depth_tungsten.name=Tiefen-Wolframerzcluster
tile.cluster_iron.name=Eisenerzcluster
tile.cluster_titanium.name=Titanerzcluster
tile.cmb_brick.name=CMB-Stahlfliese
tile.cmb_brick_reinforced.name=Verstärkte CMB-Ziegel
tile.compact_launcher.name=Kompakt-Startrampe
@ -2600,6 +2613,16 @@ tile.hadron_power_1g.name=Teilchenbeschleuniger-Stromanschluss (1GHE)
tile.hadron_power_10g.name=Teilchenbeschleuniger-Stromanschluss (10GHE)
tile.hazmat.name=Strahlenschutzstoff-Block
tile.iter.name=Kernfusionsreaktor
tile.ladder_aluminium.name=Aluminiumleiter
tile.ladder_cobalt.name=Kobaltleiter
tile.ladder_copper.name=Kupferleiter
tile.ladder_gold.name=Goldene Leiter
tile.ladder_iron.name=Eisenleiter
tile.ladder_lead.name=Bleilieter
tile.ladder_steel.name=Stahlleiter
tile.ladder_sturdy.name=Feste Holzleiter
tile.ladder_titanium.name=Titanleiter
tile.ladder_tungsten.name=Wolframleiter
tile.lamp_tritium_blue_off.name=Blaue Tritiumlampe
tile.lamp_tritium_blue_on.name=Blaue Tritiumlampe
tile.lamp_tritium_green_off.name=Grüne Tritiumlampe
@ -2802,6 +2825,7 @@ tile.rail_highspeed.name=Hochgeschwindigkeitsschienen
tile.rbmk_absorber.name=RBMK Bor-Neutronenabsorber
tile.rbmk_blank.name=RBMK Strukturteil
tile.rbmk_boiler.name=RBMK Dampfkanal
tile.rbmk_console.name=RBMK Konsole
tile.rbmk_control.name=RBMK Steuerstäbe
tile.rbmk_control_auto.name=RBMK Automatische Steuerstäbe
tile.rbmk_moderator.name=RBMK Graphitmoderator
@ -2857,6 +2881,7 @@ tile.steel_poles.name=Stahlmasten
tile.steel_roof.name=Flaches Stachldach
tile.steel_scaffold.name=Stahlgerüst
tile.steel_wall.name=Stahlwand
tile.stone_depth.name=Tiefenfels
tile.stone_gneiss.name=Graphitschiefer
tile.struct_iter_core.name=Fusionsreaktor-Kernkomponente
tile.struct_launcher.name=Startrampe-Komponentenblock
@ -2960,6 +2985,9 @@ trait.rbmx.xenon=Belivergiftung: %s
trait.rbmx.xenonBurn=Blei-Verbr.-Funkion: %s
trait.rbmx.xenonGen=Blei-Erzg.-Funktion: %s
trait.tile.cluster=Droppt nur, wenn von Spielern zerstört
trait.tile.depth=Kann nur durch Explosionen zerstört werden
tool.ability.cnetrifuge=Auto-Zentrifuge
tool.ability.crystallizer=Auto-Kristallisierer
tool.ability.explosion=Explosion

View File

@ -960,6 +960,7 @@ item.crucible.name=Crucible
item.crystal_aluminium.name=Aluminium Crystals
item.crystal_beryllium.name=Beryllium Crystals
item.crystal_charred.name=Charred Crystal
item.crystal_coal.name=Coal Crystals
item.crystal_copper.name=Copper Crystals
item.crystal_diamond.name=Diamond Crystals
item.crystal_energy.name=Energy Crystal
@ -968,6 +969,7 @@ item.crystal_gold.name=Gold Crystals
item.crystal_horn.name=Crystal Horn
item.crystal_iron.name=Iron Crystals
item.crystal_lead.name=Lead Crystals
item.crystal_lapis.name=Lapis Crystals
item.crystal_lithium.name=Lithium Crystals
item.crystal_niter.name=Niter Crystals
item.crystal_phosphorus.name=Phosphorus Crystals
@ -1442,6 +1444,7 @@ item.man_explosive.name=Explosive Lens
item.man_explosive8.name=Bundle of Implosion Propellant
item.man_igniter.name=Bomb Igniter
item.man_kit.name=Fat Man Kit
item.marshmallow.name=Marshmallow on a Stick
item.mask_of_infamy.name=Mask of Infamy
item.matchstick.name=Matchstick
item.mech_key.name=Large Silver Key
@ -1915,6 +1918,7 @@ item.rbmk_fuel_hes.name=HES RBMK Fuel Rod
item.rbmk_fuel_leaus.name=LEAus RBMK Fuel Rod
item.rbmk_fuel_lep.name=LEP RBMK Fuel Rod
item.rbmk_fuel_les.name=LES RBMK Fuel Rod
item.rbmk_fuel_men.name=MEN RBMK Fuel Rod
item.rbmk_fuel_mep.name=MEP RBMK Fuel Rod
item.rbmk_fuel_mes.name=MES RBMK Fuel Rod
item.rbmk_fuel_meu.name=MEU RBMK Fuel Rod
@ -2376,6 +2380,7 @@ tile.block_aluminium.name=Block of Aluminium
tile.block_asbestos.name=Block of Asbestos
tile.block_australium.name=Block of Australium
tile.block_beryllium.name=Block of Beryllium
tile.block_boron.name=Block of Boron
tile.block_cap_fritz.name=Block of Fritz Cola Bottle Caps
tile.block_cap_korl.name=Block of Korl Bottle Caps
tile.block_cap_nuka.name=Block of Nuka Cola Bottle Caps
@ -2398,6 +2403,7 @@ tile.block_fallout.name=Block of Fallout
tile.block_fiberglass.name=Roll of Fiberglass
tile.block_fluorite.name=Block of Fluorite
tile.block_insulator.name=Roll of Insulation
tile.block_graphite.name=Block of Graphite
tile.block_lead.name=Block of Lead
tile.block_lanthanium.name=Block of Lanthanium
tile.block_lithium.name=Block of Lithium
@ -2434,6 +2440,7 @@ tile.block_thorium.name=Block of Thorium
tile.block_thorium_fuel.name=Block of Thorium Fuel
tile.block_titanium.name=Block of Titanium
tile.block_trinitite.name=Block of Trinitite
tile.block_tritium.name=Block of Tritium Cells
tile.block_tungsten.name=Block of Tungsten
tile.block_u233.name=Block of U233
tile.block_u235.name=Block of U235
@ -2479,6 +2486,12 @@ tile.cable_switch.name=Power Switch
tile.cheater_virus.name=Gelid Euphemium
tile.cheater_virus_seed.name=Unstable Euphemium Schrabide Block
tile.chlorine_gas.name=Chlorine Gas
tile.cluster_aluminium.name=Aluminium Ore Cluster
tile.cluster_depth_iron.name=Depth Iron Ore Cluster
tile.cluster_depth_titanium.name=Depth Titanium Ore Cluster
tile.cluster_depth_tungsten.name=Depth Tungsten Ore Cluster
tile.cluster_iron.name=Iron Ore Cluster
tile.cluster_titanium.name=Titanium Ore Cluster
tile.cmb_brick.name=CMB Steel Tile
tile.cmb_brick_reinforced.name=Reinforced CMB Bricks
tile.compact_launcher.name=Compact Launch Pad
@ -2600,6 +2613,16 @@ tile.hadron_power_1g.name=Particle Accelerator Power Plug (1GHE)
tile.hadron_power_10g.name=Particle Accelerator Power Plug (10GHE)
tile.hazmat.name=Hazmat Cloth Block
tile.iter.name=Fusion Reactor
tile.ladder_aluminium.name=Aluminium Ladder
tile.ladder_cobalt.name=Cobalt Ladder
tile.ladder_copper.name=Copper Ladder
tile.ladder_gold.name=Golden Ladder
tile.ladder_iron.name=Iron Ladder
tile.ladder_lead.name=Lead Ladder
tile.ladder_steel.name=Steel Ladder
tile.ladder_sturdy.name=Sturdy Wooden Ladder
tile.ladder_titanium.name=Titanium Ladder
tile.ladder_tungsten.name=Tungsten Ladder
tile.lamp_tritium_blue_off.name=Blue Tritium Lamp
tile.lamp_tritium_blue_on.name=Blue Tritium Lamp
tile.lamp_tritium_green_off.name=Green Tritium Lamp
@ -2802,6 +2825,7 @@ tile.rail_highspeed.name=High Speed Rail
tile.rbmk_absorber.name=RBMK Boron Neutron Absorber
tile.rbmk_blank.name=RBMK Structural Column
tile.rbmk_boiler.name=RBMK Steam Channel
tile.rbmk_console.name=RBMK Console
tile.rbmk_control.name=RBMK Control Rods
tile.rbmk_control_auto.name=RBMK Automatic Control Rods
tile.rbmk_moderator.name=RBMK Graphite Moderator
@ -2857,6 +2881,7 @@ tile.steel_poles.name=Steel Pole
tile.steel_roof.name=Flat Steel Roof
tile.steel_scaffold.name=Steel Scaffold
tile.steel_wall.name=Steel Wall
tile.stone_depth.name=Depth Rock
tile.stone_gneiss.name=Graphitic Schist
tile.struct_iter_core.name=Fusion Reactor Core Component
tile.struct_launcher.name=Launch Pad Component Block
@ -2960,6 +2985,9 @@ trait.rbmx.xenon=Lead poison: %s
trait.rbmx.xenonBurn=Lead destruction function: %s
trait.rbmx.xenonGen=Lead creation function: %s
trait.tile.cluster=Drops only when broken by a player
trait.tile.depth=Can only be destroyed by explosions
tool.ability.centrifuge=Auto-Centrifuge
tool.ability.crystallizer=Auto-Crystallizer
tool.ability.explosion=Explosion

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 599 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 548 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B