Advertisement
Guest User

RipeningRackBakedModel.java

a guest
Jun 23rd, 2017
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.11 KB | None | 0 0
  1. package com.minetronic.masterchef.model.baked;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Collections;
  5. import java.util.List;
  6. import java.util.concurrent.ExecutionException;
  7. import java.util.concurrent.TimeUnit;
  8.  
  9. import javax.vecmath.Matrix4f;
  10.  
  11. import org.apache.commons.lang3.tuple.Pair;
  12.  
  13. import com.google.common.base.Optional;
  14. import com.google.common.cache.CacheBuilder;
  15. import com.google.common.cache.CacheLoader;
  16. import com.google.common.cache.LoadingCache;
  17. import com.google.common.collect.ImmutableMap;
  18. import com.minetronic.masterchef.blocks.BlockRipeningRack;
  19. import com.minetronic.masterchef.utils.Reference;
  20.  
  21. import net.minecraft.block.properties.IProperty;
  22. import net.minecraft.block.state.IBlockState;
  23. import net.minecraft.client.renderer.block.model.BakedQuad;
  24. import net.minecraft.client.renderer.block.model.IBakedModel;
  25. import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
  26. import net.minecraft.client.renderer.block.model.ItemOverrideList;
  27. import net.minecraft.client.renderer.block.model.ItemTransformVec3f;
  28. import net.minecraft.client.renderer.block.model.ModelResourceLocation;
  29. import net.minecraft.client.renderer.texture.TextureAtlasSprite;
  30. import net.minecraft.util.EnumFacing;
  31. import net.minecraftforge.client.model.IPerspectiveAwareModel;
  32. import net.minecraftforge.common.model.TRSRTransformation;
  33. import net.minecraftforge.common.property.IExtendedBlockState;
  34. import net.minecraftforge.common.property.IUnlistedProperty;
  35.  
  36. public class RipeningRackBakedModel implements IPerspectiveAwareModel {
  37.  
  38.     public static final ModelResourceLocation VARIANT_TAG = new ModelResourceLocation(
  39.             Reference.MOD_ID + ":" + "ripening_rack", "normal");
  40.  
  41.     /**
  42.      * This is the full ripening rack without cheese and without directions Used
  43.      * for taking over the properties of the previous IBakedModel. Eg:
  44.      * getParticleTexture
  45.      */
  46.     private final IBakedModel BASE;
  47.  
  48.     /**
  49.      * Contains all quads of the baked models: all sorts of cheeses, cheeses in
  50.      * bowls and cheeses in buckets
  51.      */
  52.     private final ImmutableMap<String, List<BakedQuad>> MODELS_QUADS_NORTH;
  53.     private final ImmutableMap<String, List<BakedQuad>> MODELS_QUADS_EAST;
  54.     private final ImmutableMap<String, List<BakedQuad>> MODELS_QUADS_SOUTH;
  55.     private final ImmutableMap<String, List<BakedQuad>> MODELS_QUADS_WEST;
  56.  
  57.     private LoadingCache<Pair<ImmutableMap<IProperty<?>, Comparable<?>>, ImmutableMap<IUnlistedProperty<?>, Optional<?>>>, List<BakedQuad>> quadsCache;
  58.  
  59.     public RipeningRackBakedModel(IBakedModel base, ImmutableMap<String, List<BakedQuad>> modelsQuadsNorth,
  60.             ImmutableMap<String, List<BakedQuad>> modelsQuadsEast,
  61.             ImmutableMap<String, List<BakedQuad>> modelsQuadsSouth,
  62.             ImmutableMap<String, List<BakedQuad>> modelsQuadsWest) {
  63.         this.BASE = base;
  64.         this.MODELS_QUADS_NORTH = modelsQuadsNorth;
  65.         this.MODELS_QUADS_EAST = modelsQuadsEast;
  66.         this.MODELS_QUADS_SOUTH = modelsQuadsSouth;
  67.         this.MODELS_QUADS_WEST = modelsQuadsWest;
  68.         this.quadsCache = CacheBuilder.newBuilder().maximumSize(50).expireAfterAccess(30, TimeUnit.MINUTES).build(
  69.                 new CacheLoader<Pair<ImmutableMap<IProperty<?>, Comparable<?>>, ImmutableMap<IUnlistedProperty<?>, Optional<?>>>, List<BakedQuad>>() {
  70.  
  71.                     @Override
  72.                     public List<BakedQuad> load(
  73.                             Pair<ImmutableMap<IProperty<?>, Comparable<?>>, ImmutableMap<IUnlistedProperty<?>, Optional<?>>> properties)
  74.                             throws Exception {
  75.  
  76.                         return getQuadsForCache(properties);
  77.                     }
  78.                 });
  79.     }
  80.  
  81.     private List<BakedQuad> getQuadsForCache(
  82.             Pair<ImmutableMap<IProperty<?>, Comparable<?>>, ImmutableMap<IUnlistedProperty<?>, Optional<?>>> properties) {
  83.  
  84.         System.out.println("Creating new entry...");
  85.  
  86.         List<BakedQuad> allQuads = new ArrayList();
  87.         allQuads.addAll(MODELS_QUADS_NORTH.get("ripening_rack"));
  88.  
  89.         allQuads.addAll(MODELS_QUADS_NORTH.get("old_cheese_wedge_bottom_1"));
  90.  
  91.         allQuads.addAll(MODELS_QUADS_NORTH.get("old_cheese_wedge_bottom_2"));
  92.  
  93.         allQuads.addAll(MODELS_QUADS_NORTH.get("old_cheese_wedge_bottom_3"));
  94.  
  95.         allQuads.addAll(MODELS_QUADS_NORTH.get("old_cheese_wedge_bottom_4"));
  96.  
  97.         allQuads.addAll(MODELS_QUADS_NORTH.get("old_cheese_wedge_top_1"));
  98.  
  99.         allQuads.addAll(MODELS_QUADS_NORTH.get("old_cheese_wedge_top_2"));
  100.  
  101.         allQuads.addAll(MODELS_QUADS_NORTH.get("old_cheese_wedge_top_3"));
  102.  
  103.         allQuads.addAll(MODELS_QUADS_NORTH.get("old_cheese_wedge_top_4"));
  104.  
  105.         return allQuads;
  106.  
  107.     }
  108.  
  109.     @Override
  110.     public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) {
  111.  
  112.         if (side == null) {
  113.  
  114.             if (state instanceof IExtendedBlockState) {
  115.  
  116.                 IExtendedBlockState extendedState = (IExtendedBlockState) state;
  117.                 try {
  118.                     return quadsCache
  119.                             .get(Pair.of(extendedState.getProperties(), extendedState.getUnlistedProperties()));
  120.                 } catch (ExecutionException e) {
  121.                     e.printStackTrace();
  122.                 }
  123.             }
  124.         }
  125.         return Collections.EMPTY_LIST;
  126.     }
  127.  
  128.     @Override
  129.     public TextureAtlasSprite getParticleTexture() {
  130.         return BASE.getParticleTexture();
  131.     }
  132.  
  133.     @Override
  134.     public boolean isAmbientOcclusion() {
  135.         return BASE.isAmbientOcclusion();
  136.     }
  137.  
  138.     @Override
  139.     public boolean isGui3d() {
  140.         return BASE.isGui3d();
  141.     }
  142.  
  143.     @Override
  144.     public boolean isBuiltInRenderer() {
  145.         return BASE.isBuiltInRenderer();
  146.     }
  147.  
  148.     @Override
  149.     public ItemOverrideList getOverrides() {
  150.         return BASE.getOverrides();
  151.     }
  152.  
  153.     @Override
  154.     public ItemCameraTransforms getItemCameraTransforms() {
  155.         return BASE.getItemCameraTransforms();
  156.     }
  157.  
  158.     @Override
  159.     public Pair<? extends IBakedModel, Matrix4f> handlePerspective(
  160.             ItemCameraTransforms.TransformType cameraTransformType) {
  161.         if (BASE instanceof IPerspectiveAwareModel) {
  162.             Matrix4f matrix4f = ((IPerspectiveAwareModel) BASE).handlePerspective(cameraTransformType).getRight();
  163.             return Pair.of(this, matrix4f);
  164.         } else {
  165.  
  166.             ItemCameraTransforms itemCameraTransforms = BASE.getItemCameraTransforms();
  167.             ItemTransformVec3f itemTransformVec3f = itemCameraTransforms.getTransform(cameraTransformType);
  168.             TRSRTransformation tr = new TRSRTransformation(itemTransformVec3f);
  169.             Matrix4f mat = null;
  170.             if (tr != null) {
  171.                 mat = tr.getMatrix();
  172.             }
  173.  
  174.             return Pair.of(this, mat);
  175.         }
  176.     }
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement