Skip to content

Instantly share code, notes, and snippets.

@Keridos
Last active January 30, 2017 23:06
Show Gist options
  • Save Keridos/7a2d73bc0cd7e982d699e99b823db4bf to your computer and use it in GitHub Desktop.
Save Keridos/7a2d73bc0cd7e982d699e99b823db4bf to your computer and use it in GitHub Desktop.
package omtteam.openmodularturrets.client.render.models;
import com.google.common.base.Function;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.*;
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.ICustomModelLoader;
import net.minecraftforge.client.model.IModel;
import net.minecraftforge.client.model.ModelLoaderRegistry;
import net.minecraftforge.common.model.IModelState;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import omtteam.openmodularturrets.blocks.BlockTurretBase;
import omtteam.openmodularturrets.reference.Reference;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import static omtteam.openmodularturrets.blocks.BlockTurretBase.RENDERBLOCKSTATE;
import static omtteam.openmodularturrets.blocks.BlockTurretBase.TIER;
/**
* Created by Keridos on 29/01/17.
* This Class
*/
@SideOnly(Side.CLIENT)
public class CamoBakedModel implements IBakedModel {
public static ResourceLocation FAKE_LOCATION = new ResourceLocation("openmodularturrets","models/block/custom/turret_base");
List<IBakedModel> defaultModels;
public CamoBakedModel(List<IBakedModel> list) {
defaultModels = list;
}
@Override
@Nonnull
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) {
IExtendedBlockState extendedState = (IExtendedBlockState) state;
IBlockState camoState = extendedState.getValue(RENDERBLOCKSTATE).getRenderState();
if (camoState.getBlock() instanceof BlockTurretBase && state != null) {
return defaultModels.get(state.getValue(TIER)).getQuads(state, side, rand);
} else {
return Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelForState(camoState).getQuads(camoState, side, rand);
}
}
@Override
public boolean isAmbientOcclusion() {
return false;
}
@Override
public boolean isGui3d() {
return false;
}
@Override
public boolean isBuiltInRenderer() {
return true;
}
@Override
public TextureAtlasSprite getParticleTexture() {
return null;
}
@Override
public ItemCameraTransforms getItemCameraTransforms() {
return null;
}
@Override
public ItemOverrideList getOverrides() {
return null;
}
public static class Model implements IModel {
@Override
public Collection<ResourceLocation> getDependencies() {
List<ResourceLocation> list = new ArrayList<>();
for (int i = 1;i<6; i++) {
list.add(new ModelResourceLocation("openmodularturrets:turret_base_normal", "tier=" + i));
}
return list;
}
@Override
public Collection<ResourceLocation> getTextures() {
return null;
}
@Override
public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) {
List<IBakedModel> list = new ArrayList<>();
for (int i = 1;i<6; i++) {
try {
list.add(ModelLoaderRegistry.getModel(new ModelResourceLocation("openmodularturrets:turret_base_normal", "tier=" + i)).bake(state, format, bakedTextureGetter));
} catch (Exception e){
e.printStackTrace();
}
}
return new CamoBakedModel(list);
}
@Override
public IModelState getDefaultState() {
return null;
}
}
public static class ModelLoader implements ICustomModelLoader
{
@Override
public boolean accepts(ResourceLocation modelLocation)
{
if(!modelLocation.getResourceDomain().equals(Reference.MOD_ID))
return false;
return modelLocation.equals(FAKE_LOCATION);
}
@Override
public IModel loadModel(ResourceLocation modelLocation) throws Exception
{
return new Model();
}
@Override
public void onResourceManagerReload(IResourceManager resourceManager)
{
// Nothing to do
}
}
public static class Statemapper extends StateMapperBase
{
public static final ModelResourceLocation LOCATION = new ModelResourceLocation("openmodularturrets:turret_base", "normal");
@Override
@Nonnull
protected ModelResourceLocation getModelResourceLocation(@Nonnull IBlockState state)
{
return LOCATION;
}
}
}
package omtteam.openmodularturrets.proxy;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.client.model.ModelLoaderRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import omtteam.openmodularturrets.blocks.LeverBlock;
import omtteam.openmodularturrets.blocks.turretheads.BlockAbstractTurretHead;
import omtteam.openmodularturrets.client.render.models.CamoBakedModel;
import omtteam.openmodularturrets.client.render.renderers.blockitem.TileEntityRenderers;
import omtteam.openmodularturrets.client.render.renderers.projectiles.ProjectileRenderers;
import omtteam.openmodularturrets.compatability.IGWHandler;
import omtteam.openmodularturrets.compatability.ModCompatibility;
import omtteam.openmodularturrets.init.ModBlocks;
import omtteam.openmodularturrets.init.ModItems;
import omtteam.openmodularturrets.init.ModTESRItems;
import omtteam.openmodularturrets.items.*;
import omtteam.openmodularturrets.reference.OMTNames;
import omtteam.openmodularturrets.reference.Reference;
@SuppressWarnings("unused")
@SideOnly(Side.CLIENT)
public class ClientProxy extends CommonProxy {
private void registerItemModel(final Item item, int meta) {
ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName().toString().toLowerCase()));
}
private void registerItemModel(final Item item, int meta, final String variantName) {
ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(new ResourceLocation(item.getRegistryName().toString().toLowerCase()), variantName));
}
@SuppressWarnings("SameParameterValue")
private void registerItemModel(final Item item, int meta, final String customName, boolean useCustomName) {
ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(Reference.MOD_ID.toLowerCase() + ":" + customName.toLowerCase()));
}
@SuppressWarnings("ConstantConditions")
private void registerBlockModelAsItem(final Block block, int meta, final String blockName) {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), meta, new ModelResourceLocation(Reference.MOD_ID.toLowerCase() + ":" + blockName, "inventory"));
}
@SuppressWarnings("ConstantConditions")
private void registerBlockModelAsItem(final Block block, int meta, final String blockName, String variantName) {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), meta, new ModelResourceLocation(Reference.MOD_ID.toLowerCase() + ":" + blockName, variantName));
}
@Override
public void preInit() {
super.preInit();
StateMap ignoreRotation = new StateMap.Builder().ignore(LeverBlock.ROTATION).build();
StateMap ignoreConcealed = new StateMap.Builder().ignore(BlockAbstractTurretHead.CONCEALED).build();
ModelLoader.setCustomStateMapper(ModBlocks.leverBlock, ignoreRotation);
ModelLoader.setCustomStateMapper(ModBlocks.disposableItemTurret, ignoreConcealed);
ModelLoader.setCustomStateMapper(ModBlocks.grenadeLauncherTurret, ignoreConcealed);
ModelLoader.setCustomStateMapper(ModBlocks.teleporterTurret, ignoreConcealed);
ModelLoader.setCustomStateMapper(ModBlocks.incendiaryTurret, ignoreConcealed);
ModelLoader.setCustomStateMapper(ModBlocks.laserTurret, ignoreConcealed);
ModelLoader.setCustomStateMapper(ModBlocks.railGunTurret, ignoreConcealed);
ModelLoader.setCustomStateMapper(ModBlocks.relativisticTurret, ignoreConcealed);
ModelLoader.setCustomStateMapper(ModBlocks.rocketTurret, ignoreConcealed);
ModelLoader.setCustomStateMapper(ModBlocks.machineGunTurret, ignoreConcealed);
ModelLoader.setCustomStateMapper(ModBlocks.potatoCannonTurret, ignoreConcealed);
ModelLoaderRegistry.registerLoader(new CamoBakedModel.ModelLoader());
ModelLoader.setCustomStateMapper(ModBlocks.turretBase, new CamoBakedModel.Statemapper());
for (int i = 0; i < 5; i++) {
registerBlockModelAsItem(ModBlocks.turretBase, i, OMTNames.Blocks.turretBase + "_normal", "tier=" + (i + 1));
}
for (int i = 0; i < 10; i++) {
registerBlockModelAsItem(ModBlocks.expander, i, OMTNames.Blocks.expander, "facing=north,meta=" + i);
}
for (int i = 0; i < 15; i++) {
registerItemModel(ModItems.intermediateProductTiered, i, IntermediateProductTiered.subNames[i], true);
}
for (int i = 0; i < 7; i++) {
registerItemModel(ModItems.addonMetaItem, i, AddonMetaItem.subNames[i], true);
}
for (int i = 0; i < 5; i++) {
registerItemModel(ModItems.upgradeMetaItem, i, UpgradeMetaItem.subNames[i], true);
}
for (int i = 0; i < 1; i++) {
registerItemModel(ModItems.intermediateProductRegular, i, IntermediateProductRegular.subNames[i], true);
}
for (int i = 0; i < 5; i++) {
registerItemModel(ModItems.ammoMetaItem, i, AmmoMetaItem.subNames[i], true);
}
for (int i = 0; i < 3; i++) {
registerItemModel(ModItems.usableMetaItem, i, UsableMetaItem.subNames[i], true);
}
}
@Override
protected void initTileRenderers() {
super.initTileRenderers();
TileEntityRenderers.init();
ModTESRItems.init();
}
@Override
protected void initEntityRenderers() {
super.initEntityRenderers();
ProjectileRenderers.init();
}
@Override
public void initHandlers() {
super.initHandlers();
if (ModCompatibility.IGWModLoaded) {
ModCompatibility.igwHandler = IGWHandler.getInstance();
}
}
}
{
"forge_marker": 1,
"defaults": {
"textures": {
"all": "openmodularturrets:blocks/turret_base_tier_one"
},
"transform": "forge:default-block"
},
"variants": {
"normal": [{
"model": "openmodularturrets:custom/turret_base"
}]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment