Skip to content

Commit

Permalink
Added support for modded ores. Related #5
Browse files Browse the repository at this point in the history
  • Loading branch information
kyeiti committed May 21, 2018
1 parent b299a56 commit 9159753
Show file tree
Hide file tree
Showing 117 changed files with 1,234 additions and 221 deletions.
2 changes: 2 additions & 0 deletions src/main/java/exterminatorjeff/undergroundbiomes/api/API.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import exterminatorjeff.undergroundbiomes.api.common.UBSettings;
import exterminatorjeff.undergroundbiomes.api.common.UBStonesRegistry;
import exterminatorjeff.undergroundbiomes.api.names.*;
import exterminatorjeff.undergroundbiomes.intermod.ModOreRegistrar;

/**
* Static access to Underground Biomes API.
Expand All @@ -20,6 +21,7 @@ public final class API {
public static UBDropsRegistry DROPS_REGISTRY;
public static UBDimensionalStrataColumnProvider STRATA_COLUMN_PROVIDER;
public static UBSettings SETTINGS;
public static ModOreRegistrar MOD_ORE_REGISTRAR;

/*
* Stones
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package exterminatorjeff.undergroundbiomes.api.common;

import net.minecraft.block.Block;
import net.minecraftforge.event.RegistryEvent;

public interface UBModOreRegistrar {

public void requestOreSetups(RegistryEvent.Register<Block> event);
}
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,11 @@ public interface UBSettings {

boolean generationAllowed(IBlockState block);

boolean displayTooltipModName();
String getTooltipModNamePreText();
String getTooltipModNamePreTextFormatting();
String getTooltipModNameFormatting();
String getTooltipModNamePostText();
String getTooltipModNamePostTextFormatting();

}
Original file line number Diff line number Diff line change
@@ -1,30 +1,39 @@
package exterminatorjeff.undergroundbiomes.common.block;

import exterminatorjeff.undergroundbiomes.api.API;
import exterminatorjeff.undergroundbiomes.client.UBCreativeTab;
import exterminatorjeff.undergroundbiomes.common.UBSubBlock;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.particle.ParticleManager;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.Explosion;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.ModContainer;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;

/**
Expand Down Expand Up @@ -114,6 +123,36 @@ public Item getItemDropped(IBlockState state, Random rand, int fortune) {
}
}

@Override
public void onBlockDestroyedByPlayer(World world, BlockPos pos, IBlockState state) {
baseOre.onBlockDestroyedByPlayer(world, pos, baseOreState);
}

@Override
public void onBlockHarvested(World world, BlockPos pos, IBlockState state, EntityPlayer player) {
baseOre.onBlockHarvested(world, pos, baseOreState, player);
}

@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) {
return baseOre.removedByPlayer(baseOreState, world, pos, player, willHarvest);
}

@Override
public boolean canProvidePower(IBlockState state) {
return baseOre.canProvidePower(baseOreState);
}

@Override
public int getWeakPower(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) {
return baseOre.getWeakPower(baseOreState, world, pos, side);
}

@Override
@SideOnly(Side.CLIENT)
public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand) {
baseOre.randomDisplayTick(baseOreState, world, pos, rand);
}

@Override
public int damageDropped(IBlockState state) {
Expand Down Expand Up @@ -141,7 +180,7 @@ public void dropXpOnBlockBreak(World worldIn, BlockPos pos, int amount) {
@SuppressWarnings("deprecation")
@Override
public float getBlockHardness(IBlockState state, World worldIn, BlockPos pos) {
return baseOre.getBlockHardness(state, worldIn, pos);
return baseOre.getBlockHardness(baseOreState, worldIn, pos);
}

@Override
Expand All @@ -167,14 +206,34 @@ public boolean canHarvestBlock(IBlockAccess world, BlockPos pos, EntityPlayer pl

@Override
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) {
baseOre.updateTick(worldIn, pos, state, rand);
baseOre.updateTick(worldIn, pos, baseOreState, rand);
}

@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
return new ItemStack(itemBlock, 1, getMetaFromState(world.getBlockState(pos)));
}

@Override
public void addInformation(ItemStack stack, @Nullable World world, List<String> infos, ITooltipFlag tooltipFlag) {
if(API.SETTINGS.displayTooltipModName()) {
Map<String, ModContainer> indexedModList = Loader.instance().getIndexedModList();
String modName = indexedModList.get(baseOre.getRegistryName().getResourceDomain()).getName();
infos.add(
API.SETTINGS.getTooltipModNamePreTextFormatting() +
API.SETTINGS.getTooltipModNamePreText() +
"\u00A7r " +
API.SETTINGS.getTooltipModNameFormatting() +
modName +
"\u00A7r " +
API.SETTINGS.getTooltipModNamePostTextFormatting() +
API.SETTINGS.getTooltipModNamePostText()
);
}
super.addInformation(stack, world, infos, tooltipFlag);
}


/**
* @author CurtisA, LouisDB
*/
Expand All @@ -196,6 +255,7 @@ public int getDamage(ItemStack stack) {
return stack.getMetadata();
}


@SideOnly(Side.CLIENT)
@Override
public String getItemStackDisplayName(ItemStack stack) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.config.Configuration;
import org.apache.logging.log4j.Level;
Expand Down Expand Up @@ -80,6 +81,12 @@ public class UBConfig implements UBSettings {
private static final String CATEGORY_MISCELLANEOUS = "Miscellaneaous";
public final IntegerSetting changeButtonRecipe = new IntegerSetting(CATEGORY_MISCELLANEOUS, "ChangeButtonRecipe");
public final BooleanSetting disableVanillaStoneVariants = new BooleanSetting(CATEGORY_MISCELLANEOUS, "DisableVanillaStoneVariants");
public final BooleanSetting tooltipDisplayModName = new BooleanSetting(CATEGORY_MISCELLANEOUS, "DisplayOriginalModInOreTooltip");
public final StringSetting tooltipModNamePreText = new StringSetting(CATEGORY_MISCELLANEOUS, "OreTooltipTextBefore");
public final StringSetting tooltipModNamePreTextFormatting = new StringSetting(CATEGORY_MISCELLANEOUS, "OreTooltipTextBeforeFormatting");
public final StringSetting tooltipModNameFormatting = new StringSetting(CATEGORY_MISCELLANEOUS, "OreTooltipOreModNameFormatting");
public final StringSetting tooltipModNamePostText = new StringSetting(CATEGORY_MISCELLANEOUS, "OreTooltipTextAfter");
public final StringSetting tooltipModNamePostTextFormatting = new StringSetting(CATEGORY_MISCELLANEOUS, "OreTooltipTextAfterFormatting");

/*
*
Expand Down Expand Up @@ -160,7 +167,12 @@ public void init(File file) {

changeButtonRecipe.initProperty(configuration, 8, "Change the result of the button recipe\n" + "Default: 8");
disableVanillaStoneVariants.initProperty(configuration, false, "Remove vanilla andesite, diorite, and granite");

tooltipDisplayModName.initProperty(configuration, true, "Display the mod which originally added this ore in the tooltip?");
tooltipModNamePreText.initProperty(configuration, "Ore from", "Text to display before the mod's name");
tooltipModNamePreTextFormatting.initProperty(configuration, "gray", "Formatting to use for the text before the mod's name");
tooltipModNameFormatting.initProperty(configuration, "gold italic", "Formatting for the mod's name");
tooltipModNamePostText.initProperty(configuration, "", "Text to display after the mod's name");
tooltipModNamePostTextFormatting.initProperty(configuration, "gray", "Formatting for the text after the mod's name");
for (HashMap<Integer, BooleanSetting> blockActivations : stoneGenerationSettings.values()) {
for (BooleanSetting setting : blockActivations.values()) {
setting.initProperty(configuration, Boolean.TRUE, "");
Expand Down Expand Up @@ -553,4 +565,51 @@ public final boolean generationAllowed(Block block, int metadata) {
public boolean alternativeSlabTextures() {
return plainSlabTextures();
}

@Override
public boolean displayTooltipModName() {
return tooltipDisplayModName.getValue();
}

@Override
public String getTooltipModNamePreText() {
return tooltipModNamePreText.getValue();
}

@Override
public String getTooltipModNamePreTextFormatting() {
return parseFormatting(tooltipModNamePreTextFormatting.getValue());
}

@Override
public String getTooltipModNameFormatting() {
return parseFormatting(tooltipModNameFormatting.getValue());
}

@Override
public String getTooltipModNamePostText() {
return tooltipModNamePostText.getValue();
}

@Override
public String getTooltipModNamePostTextFormatting() {
return parseFormatting(tooltipModNamePostTextFormatting.getValue());
}

private String parseFormatting(String readableFormat) {
String format = "";
if (readableFormat.isEmpty()) {
return format;
}
String[] strings = readableFormat.split(" ");
for (String string : strings) {
TextFormatting valueByName = TextFormatting.getValueByName(string);
if (valueByName != null) {
format += valueByName.toString();
} else {
LOGGER.warn("Invalid format: " + string);
}
}
return format;
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
package exterminatorjeff.undergroundbiomes.core;

import exterminatorjeff.undergroundbiomes.api.API;
import exterminatorjeff.undergroundbiomes.api.ModInfo;
import exterminatorjeff.undergroundbiomes.api.common.UBLogger;
import exterminatorjeff.undergroundbiomes.api.enums.IgneousVariant;
import exterminatorjeff.undergroundbiomes.api.enums.MetamorphicVariant;
import exterminatorjeff.undergroundbiomes.api.enums.SedimentaryVariant;
import exterminatorjeff.undergroundbiomes.api.enums.UBStoneStyle;
import exterminatorjeff.undergroundbiomes.api.names.Entry;
import exterminatorjeff.undergroundbiomes.api.names.StoneEntry;
import exterminatorjeff.undergroundbiomes.common.ButtonRecipe;
import exterminatorjeff.undergroundbiomes.common.RegularStoneRecipe;
import exterminatorjeff.undergroundbiomes.common.UBFuelHandler;
Expand All @@ -24,58 +19,32 @@
import exterminatorjeff.undergroundbiomes.common.itemblock.StairsItemBlock;
import exterminatorjeff.undergroundbiomes.config.ConfigManager;
import exterminatorjeff.undergroundbiomes.config.UBConfig;
import exterminatorjeff.undergroundbiomes.intermod.*;

import exterminatorjeff.undergroundbiomes.intermod.DropsRegistry;
import exterminatorjeff.undergroundbiomes.intermod.ModOreRegistrar;
import exterminatorjeff.undergroundbiomes.intermod.OresRegistry;
import exterminatorjeff.undergroundbiomes.intermod.StonesRegistry;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.item.crafting.ShapelessRecipes;
import net.minecraft.server.dedicated.PropertyManager;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.*;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerAboutToStartEvent;
import net.minecraftforge.fml.common.event.FMLServerStoppedEvent;
import net.minecraftforge.fml.common.event.*;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.oredict.OreDictionary;

import java.io.File;
import java.util.ArrayList;

import static net.minecraftforge.oredict.OreDictionary.WILDCARD_VALUE;

import exterminatorjeff.undergroundbiomes.intermod.IC2Registrar;
import net.minecraftforge.oredict.OreIngredient;
import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.registries.GameData;
import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.IForgeRegistryModifiable;
import org.apache.logging.log4j.Level;

import javax.annotation.Nullable;
import java.io.File;
import java.util.ArrayList;
import java.util.function.Consumer;
import java.util.logging.Logger;

import static net.minecraftforge.oredict.OreDictionary.WILDCARD_VALUE;

/**
* @author CurtisA, LouisDB
Expand All @@ -87,13 +56,15 @@ public class CommonProxy {

public void preInit(FMLPreInitializationEvent event) {
LOGGER.debug("Start preInit");
configManager = new ConfigManager(event);
dimensionManager = new DimensionManager(configManager);

API.STONES_REGISTRY = StonesRegistry.INSTANCE;
API.ORES_REGISTRY = OresRegistry.INSTANCE;
API.DROPS_REGISTRY = DropsRegistry.INSTANCE;
API.SETTINGS = UBConfig.SPECIFIC;
API.MOD_ORE_REGISTRAR = new ModOreRegistrar(event);

configManager = new ConfigManager(event);
dimensionManager = new DimensionManager(configManager);
API.STRATA_COLUMN_PROVIDER = dimensionManager;

createOres();
Expand All @@ -108,6 +79,7 @@ public void init(FMLInitializationEvent e) {

public void postInit(FMLPostInitializationEvent e) {
MinecraftForge.EVENT_BUS.register(dimensionManager);
API.ORES_REGISTRY.registerRecipes(null);
}

public void serverLoad(FMLServerAboutToStartEvent event) {
Expand Down Expand Up @@ -167,11 +139,12 @@ public void registerBlocks(RegistryEvent.Register<Block> event) {
/*
* Blocks
*/
new ActuallyAdditionsRegistrar().register(event);
new ForestryRegistrar().register(event);
new IC2Registrar().register(event);
new ImmersiveEngineeringRegistrar().register(event);
new ThermalFoundationRegistrar().register(event);
// new ActuallyAdditionsRegistrar().register(event);
// new ForestryRegistrar().register(event);
// new IC2Registrar().register(event);
// new ImmersiveEngineeringRegistrar().register(event);
// new ThermalFoundationRegistrar().register(event);
API.MOD_ORE_REGISTRAR.requestOreSetups(event);

LOGGER.debug("Start registering blocks");

Expand Down Expand Up @@ -425,12 +398,12 @@ public void createRecipes(RegistryEvent.Register<IRecipe> event) {
modRegistry.remove(new ResourceLocation("minecraft:stone_button"));
}

// TODO: Figure out how to update the cobblestone recipe
RegularStoneRecipe regularCobblestoneRecipe = new RegularStoneRecipe();
modRegistry.register(regularCobblestoneRecipe);
((UBConfig) (UBConfig.SPECIFIC)).regularStoneCrafting.addTrackerAndUpdate(regularCobblestoneRecipe);
((UBConfig) (UBConfig.SPECIFIC)).changeButtonRecipe.addTrackerAndUpdate(new ButtonRecipe());

// This will probably be needed here in 1.13
//API.ORES_REGISTRY.registerRecipes(event);
}

}
Loading

0 comments on commit 9159753

Please sign in to comment.