package eiteam.esteemedinnovation.tools.steam;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import eiteam.esteemedinnovation.api.tool.SteamTool;
import eiteam.esteemedinnovation.api.tool.SteamToolUpgrade;
import eiteam.esteemedinnovation.api.tool.UtilSteamTool;
import eiteam.esteemedinnovation.api.util.StringUtility;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemOverrideList;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.client.model.IModel;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.client.model.SimpleModelState;
import java.util.List;
public final class SteamToolOverrideList extends ItemOverrideList {
public static final ItemOverrideList INSTANCE = new SteamToolOverrideList();
private SteamToolOverrideList() {
super(ImmutableList.of());
}
@Override
public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) {
List<SteamToolUpgrade> upgrades = UtilSteamTool.getUpgrades(stack);
// TODO: Improve the API here with a new "resourceSuffix" method in SteamTool instead of using the toolClass.
String toolName = "drill";
Item item = stack.getItem();
if (item instanceof SteamTool) {
SteamTool tool = (SteamTool) item;
String toolClass = tool.toolClass();
if (!"pickaxe".equalsIgnoreCase(toolClass)) {
toolName = toolClass;
}
}
ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<>();
builder.put("tool", toolName);
ResourceLocation core = null;
ResourceLocation head = null;
for (SteamToolUpgrade upgrade : upgrades) {
ResourceLocation baseIcon = upgrade.getBaseIcon();
if (baseIcon == null) {
continue;
}
if (upgrade.getToolSlot().slot == 1) {
core = baseIcon;
builder.put("base_core", core.toString());
} else {
head = baseIcon;
builder.put("head_core", head.toString());
}
}
int which = stack.hasTagCompound() && stack.getTagCompound().hasKey("Ticks") && stack.getTagCompound().getInteger("Ticks") > 50 ? 0 : 1;
builder.put("which", Integer.toString(which));
ImmutableMap<String, String> map = builder.build();
String mapString = map.toString();
SteamToolBakedModel steamToolBakedModel = (SteamToolBakedModel) originalModel;
if (steamToolBakedModel.isCached(mapString)) {
return steamToolBakedModel.getCachedModel(mapString);
}
ResourceLocation trueCore = core == null ? null : new ResourceLocation(core.getResourceDomain(),
core.getResourcePath() + StringUtility.capitalize(toolName) + which);
ResourceLocation trueHead = head == null ? null : new ResourceLocation(head.getResourceDomain(),
head.getResourcePath() + StringUtility.capitalize(toolName) + which);
IModel processed = new SteamToolModel(trueCore, trueHead, which, toolName);
IBakedModel bakedModel = processed.bake(new SimpleModelState(steamToolBakedModel.getTransforms()), steamToolBakedModel.getFormat(), ModelLoader.defaultTextureGetter());
steamToolBakedModel.cacheModel(mapString, bakedModel);
return bakedModel;
}
}