Skip to content

Commit

Permalink
Added ore dict map function for metal items. Renamed IMetalObject to …
Browse files Browse the repository at this point in the history
…IMetalItem.
  • Loading branch information
DisasterMoo committed Aug 21, 2019
1 parent 9734274 commit 29910f6
Show file tree
Hide file tree
Showing 15 changed files with 178 additions and 110 deletions.
20 changes: 20 additions & 0 deletions src/main/java/net/dries007/tfc/CommonEventHandler.java
Expand Up @@ -51,13 +51,17 @@
import net.dries007.tfc.api.capability.food.FoodStatsTFC;
import net.dries007.tfc.api.capability.food.IFoodStatsTFC;
import net.dries007.tfc.api.capability.forge.CapabilityForgeable;
import net.dries007.tfc.api.capability.forge.ForgeableHandler;
import net.dries007.tfc.api.capability.heat.CapabilityItemHeat;
import net.dries007.tfc.api.capability.metal.CapabilityMetalItem;
import net.dries007.tfc.api.capability.metal.IMetalItem;
import net.dries007.tfc.api.capability.size.CapabilityItemSize;
import net.dries007.tfc.api.capability.size.IItemSize;
import net.dries007.tfc.api.capability.size.Size;
import net.dries007.tfc.api.capability.size.Weight;
import net.dries007.tfc.api.capability.skill.CapabilityPlayerSkills;
import net.dries007.tfc.api.capability.skill.PlayerSkillsHandler;
import net.dries007.tfc.api.types.Metal;
import net.dries007.tfc.api.types.Rock;
import net.dries007.tfc.api.util.IPlaceableItem;
import net.dries007.tfc.network.PacketCalendarUpdate;
Expand Down Expand Up @@ -328,6 +332,22 @@ else if (item instanceof ItemBlock)
{
event.addCapability(CapabilityEgg.KEY, new EggHandler());
}

ICapabilityProvider metalCapability = CapabilityMetalItem.getCustomMetalItem(stack);
if (metalCapability != null)
{
event.addCapability(CapabilityMetalItem.KEY, metalCapability);
//Bundle a forgeable capability for this item, if none is found
if (!stack.hasCapability(CapabilityForgeable.FORGEABLE_CAPABILITY, null))
{
IMetalItem cap = (IMetalItem) metalCapability;
Metal metal = cap.getMetal(stack);
if (metal != null)
{
event.addCapability(CapabilityForgeable.KEY, new ForgeableHandler(null, metal.getSpecificHeat(), metal.getMeltTemp()));
}
}
}
}

@SubscribeEvent
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/net/dries007/tfc/TerraFirmaCraft.java
Expand Up @@ -21,7 +21,7 @@
import net.dries007.tfc.api.capability.food.CapabilityFood;
import net.dries007.tfc.api.capability.forge.CapabilityForgeable;
import net.dries007.tfc.api.capability.heat.CapabilityItemHeat;
import net.dries007.tfc.api.capability.metal.CapabilityMetalObject;
import net.dries007.tfc.api.capability.metal.CapabilityMetalItem;
import net.dries007.tfc.api.capability.size.CapabilityItemSize;
import net.dries007.tfc.api.capability.skill.CapabilityPlayerSkills;
import net.dries007.tfc.api.util.TFCConstants;
Expand Down Expand Up @@ -152,7 +152,7 @@ public void preInit(FMLPreInitializationEvent event)
CapabilityEgg.preInit();
CapabilityPlayerSkills.preInit();
CapabilityDamageResistance.preInit();
CapabilityMetalObject.preInit();
CapabilityMetalItem.preInit();

if (event.getSide().isClient())
{
Expand Down
@@ -0,0 +1,124 @@
/*
* Work under Copyright. Licensed under the EUPL.
* See the project README.md and LICENSE.txt for more information.
*/

package net.dries007.tfc.api.capability.metal;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.Supplier;
import javax.annotation.Nullable;

import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.oredict.OreDictionary;

import net.dries007.tfc.api.capability.DumbStorage;
import net.dries007.tfc.api.registries.TFCRegistries;
import net.dries007.tfc.api.types.Metal;
import net.dries007.tfc.api.util.TFCConstants;
import net.dries007.tfc.objects.inventory.ingredient.IIngredient;
import net.dries007.tfc.util.Helpers;

public final class CapabilityMetalItem
{
@CapabilityInject(IMetalItem.class)
public static final Capability<IMetalItem> METAL_OBJECT_CAPABILITY = Helpers.getNull();
public static final ResourceLocation KEY = new ResourceLocation(TFCConstants.MOD_ID, "metal_object");

public static final Map<IIngredient<ItemStack>, Supplier<ICapabilityProvider>> CUSTOM_ITEMS = new HashMap<>(); //Used inside CT, set custom IItemSize for items outside TFC

public static void preInit()
{
CapabilityManager.INSTANCE.register(IMetalItem.class, new DumbStorage<>(), MetalItemHandler::new);
}

/**
* Gets the IMetalItem instance from an itemstack, either via capability or via interface
*
* @param stack The stack
* @return The IMetalItem if it exists, or null if it doesn't
*/
@Nullable
public static IMetalItem getMetalItem(ItemStack stack)
{
if (!stack.isEmpty())
{
if (stack.getItem() instanceof IMetalItem)
{
return (IMetalItem) stack.getItem();
}
else if (stack.getItem() instanceof ItemBlock && ((ItemBlock) stack.getItem()).getBlock() instanceof IMetalItem)
{
return (IMetalItem) ((ItemBlock) stack.getItem()).getBlock();
}
return stack.getCapability(METAL_OBJECT_CAPABILITY, null);
}
return null;
}

@Nullable
public static ICapabilityProvider getCustomMetalItem(ItemStack stack)
{
if (!stack.isEmpty())
{
Set<IIngredient<ItemStack>> itemItemSet = CUSTOM_ITEMS.keySet();
for (IIngredient<ItemStack> ingredient : itemItemSet)
{
if (ingredient.testIgnoreCount(stack))
{
return CUSTOM_ITEMS.get(ingredient).get();
}
}
//Try using ore dict prefix-suffix common values (ie: ingotCopper)
int[] ids = OreDictionary.getOreIDs(stack);
for (int id : ids)
{
ICapabilityProvider handler = getMetalItemFromOreDict(OreDictionary.getOreName(id));
if (handler != null)
{
return handler;
}
}
}
return null;
}

@Nullable
private static ICapabilityProvider getMetalItemFromOreDict(String oreDict)
{
Metal.ItemType type;
String remaining;
int amount;
if (oreDict.startsWith("ingot"))
{
type = Metal.ItemType.INGOT;
remaining = oreDict.substring(5);
amount = 100;
}
else if (oreDict.startsWith("nugget"))
{
type = Metal.ItemType.NUGGET;
remaining = oreDict.substring(6);
amount = 10;
}
else
{
return null;
}
//noinspection ConstantConditions
Metal output = TFCRegistries.METALS.getValuesCollection().stream().filter(metal -> metal.getRegistryName().getPath().equalsIgnoreCase(remaining)).findFirst().orElse(null);
if (output != null)
{
return new MetalItemHandler(output, amount, true);
}
return null;
}
}

This file was deleted.

Expand Up @@ -19,8 +19,9 @@

/*
* Must be on Item or Block (with ItemBlock, i.e. do not implement on blocks that have a separate item block)
* Also, has a capability interface
*/
public interface IMetalObject
public interface IMetalItem
{
/**
* @param stack the item stack. This can assume that it is of the right item type and do casts without checking
Expand Down
Expand Up @@ -15,20 +15,20 @@

import net.dries007.tfc.api.types.Metal;

public class MetalObjectHandler implements ICapabilityProvider, IMetalObject
public class MetalItemHandler implements ICapabilityProvider, IMetalItem
{
private final Metal metal;
private final int amount;
private final boolean canMelt;

public MetalObjectHandler(Metal metal, int amount, boolean canMelt)
public MetalItemHandler(Metal metal, int amount, boolean canMelt)
{
this.metal = metal;
this.amount = amount;
this.canMelt = canMelt;
}

public MetalObjectHandler()
public MetalItemHandler()
{
this(Metal.UNKNOWN, 0, false);
}
Expand All @@ -55,14 +55,14 @@ public boolean canMelt(ItemStack stack)
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing)
{
return capability == CapabilityMetalObject.METAL_OBJECT_CAPABILITY;
return capability == CapabilityMetalItem.METAL_OBJECT_CAPABILITY;
}

@Nullable
@Override
@SuppressWarnings("unchecked")
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing)
{
return capability == CapabilityMetalObject.METAL_OBJECT_CAPABILITY ? (T) this : null;
return capability == CapabilityMetalItem.METAL_OBJECT_CAPABILITY ? (T) this : null;
}
}
Expand Up @@ -11,8 +11,8 @@
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;

import net.dries007.tfc.api.capability.metal.CapabilityMetalObject;
import net.dries007.tfc.api.capability.metal.IMetalObject;
import net.dries007.tfc.api.capability.metal.CapabilityMetalItem;
import net.dries007.tfc.api.capability.metal.IMetalItem;
import net.dries007.tfc.api.types.Metal;
import net.dries007.tfc.objects.fluids.FluidsTFC;

Expand All @@ -24,7 +24,7 @@ public class HeatRecipeMetalMelting extends HeatRecipe
public HeatRecipeMetalMelting(Metal metal)
{
super(input -> {
IMetalObject metalObject = CapabilityMetalObject.getMetalObject(input);
IMetalItem metalObject = CapabilityMetalItem.getMetalItem(input);
if (metalObject != null)
{
return metalObject.getMetal(input) == metal;
Expand All @@ -38,7 +38,7 @@ public HeatRecipeMetalMelting(Metal metal)
@Override
public FluidStack getOutputFluid(ItemStack input)
{
IMetalObject metalObject = CapabilityMetalObject.getMetalObject(input);
IMetalItem metalObject = CapabilityMetalItem.getMetalItem(input);
if (metalObject != null)
{
Metal metal = metalObject.getMetal(input);
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/net/dries007/tfc/client/ClientEvents.java
Expand Up @@ -40,8 +40,8 @@
import net.dries007.tfc.api.capability.food.IFood;
import net.dries007.tfc.api.capability.heat.CapabilityItemHeat;
import net.dries007.tfc.api.capability.heat.IItemHeat;
import net.dries007.tfc.api.capability.metal.CapabilityMetalObject;
import net.dries007.tfc.api.capability.metal.IMetalObject;
import net.dries007.tfc.api.capability.metal.CapabilityMetalItem;
import net.dries007.tfc.api.capability.metal.IMetalItem;
import net.dries007.tfc.api.capability.size.CapabilityItemSize;
import net.dries007.tfc.api.capability.size.IItemSize;
import net.dries007.tfc.api.util.IRockObject;
Expand Down Expand Up @@ -229,7 +229,7 @@ public static void onItemTooltip(ItemTooltipEvent event)

if (event.getFlags().isAdvanced()) // Only added with advanced tooltip mode
{
IMetalObject metalObject = CapabilityMetalObject.getMetalObject(stack);
IMetalItem metalObject = CapabilityMetalItem.getMetalItem(stack);
if (metalObject != null)
{
metalObject.addMetalInfo(stack, tt);
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/net/dries007/tfc/objects/items/ItemBloom.java
Expand Up @@ -25,13 +25,13 @@
import net.dries007.tfc.api.capability.forge.ForgeableMeasurableHandler;
import net.dries007.tfc.api.capability.forge.IForgeable;
import net.dries007.tfc.api.capability.forge.IForgeableMeasurable;
import net.dries007.tfc.api.capability.metal.IMetalObject;
import net.dries007.tfc.api.capability.metal.IMetalItem;
import net.dries007.tfc.api.capability.size.Size;
import net.dries007.tfc.api.capability.size.Weight;
import net.dries007.tfc.api.types.Metal;

@ParametersAreNonnullByDefault
public class ItemBloom extends ItemTFC implements IMetalObject
public class ItemBloom extends ItemTFC implements IMetalItem
{
private boolean meltable;

Expand Down
Expand Up @@ -21,14 +21,14 @@
import net.minecraftforge.common.capabilities.ICapabilityProvider;

import net.dries007.tfc.api.capability.forge.ForgeableHandler;
import net.dries007.tfc.api.capability.metal.IMetalObject;
import net.dries007.tfc.api.capability.metal.IMetalItem;
import net.dries007.tfc.api.capability.size.Size;
import net.dries007.tfc.api.capability.size.Weight;
import net.dries007.tfc.api.types.Metal;
import net.dries007.tfc.objects.items.ItemTFC;
import net.dries007.tfc.util.OreDictionaryHelper;

public class ItemMetal extends ItemTFC implements IMetalObject
public class ItemMetal extends ItemTFC implements IMetalItem
{
private static final Map<Metal, EnumMap<Metal.ItemType, ItemMetal>> TABLE = new HashMap<>();

Expand Down

0 comments on commit 29910f6

Please sign in to comment.