Last active
January 30, 2017 23:06
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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