tterrag1098

Untitled

Jan 12th, 2017
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.72 KB | None | 0 0
  1. package team.chisel.client.render;
  2.  
  3. import java.util.Collection;
  4. import java.util.EnumMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Map.Entry;
  8. import java.util.stream.Collectors;
  9.  
  10. import lombok.Getter;
  11. import lombok.SneakyThrows;
  12. import lombok.experimental.Accessors;
  13. import net.minecraft.block.state.IBlockState;
  14. import net.minecraft.client.Minecraft;
  15. import net.minecraft.client.renderer.block.model.IBakedModel;
  16. import net.minecraft.client.renderer.block.model.Variant;
  17. import net.minecraft.client.renderer.block.statemap.DefaultStateMapper;
  18. import net.minecraft.client.renderer.block.statemap.StateMapperBase;
  19. import net.minecraft.client.renderer.texture.TextureAtlasSprite;
  20. import net.minecraft.client.renderer.texture.TextureMap;
  21. import net.minecraft.client.renderer.vertex.VertexFormat;
  22. import net.minecraft.util.EnumFacing;
  23. import net.minecraft.util.ResourceLocation;
  24. import net.minecraftforge.client.model.IModel;
  25. import net.minecraftforge.client.model.ModelLoaderRegistry;
  26. import net.minecraftforge.client.model.ModelProcessingHelper;
  27. import net.minecraftforge.common.model.IModelState;
  28. import net.minecraftforge.common.model.TRSRTransformation;
  29. import net.minecraftforge.common.property.IExtendedBlockState;
  30. import team.chisel.api.render.IChiselFace;
  31. import team.chisel.api.render.IChiselTexture;
  32. import team.chisel.api.render.IModelChisel;
  33. import team.chisel.common.util.json.JsonHelper;
  34.  
  35. import com.google.common.base.Function;
  36. import com.google.common.collect.ImmutableList;
  37. import com.google.common.collect.Lists;
  38. import com.google.common.collect.Maps;
  39.  
  40. @Deprecated
  41. public class ModelChiselOld implements IModelChisel {
  42.  
  43.     private static StateMapperBase mapper = new DefaultStateMapper();
  44.    
  45.     private Variant model;
  46.     private Map<String, Variant> models = Maps.newHashMap();;
  47.    
  48.     private String face;
  49.     private Map<EnumFacing, String> overrides = Maps.newHashMap();
  50.    
  51.     @Getter(onMethod = @__({@Override}))
  52.     @Accessors(fluent = true)
  53.     private boolean ignoreStates;
  54.    
  55.     private transient IChiselFace faceObj;
  56.     private transient Map<EnumFacing, IChiselFace> overridesObj = new EnumMap<>(EnumFacing.class);
  57.     private transient IBakedModel modelObj;
  58.    
  59.     private transient Map<String, IBakedModel> modelsObj = Maps.newHashMap();
  60.    
  61.     private transient Map<IBlockState, IBakedModel> stateMap = Maps.newHashMap();
  62.    
  63.     private transient List<ResourceLocation> textures = Lists.newArrayList();
  64.    
  65.     @Override
  66.     public Collection<ResourceLocation> getDependencies() {
  67.         List<ResourceLocation> list = Lists.newArrayList(model.getModelLocation());
  68.         list.addAll(models.values().stream().map(v -> v.getModelLocation()).collect(Collectors.toList()));
  69.         return list;
  70.     }
  71.  
  72.     @Override
  73.     public Collection<ResourceLocation> getTextures() {
  74.         return ImmutableList.copyOf(textures);
  75.     }
  76.  
  77.     @Override
  78.     public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) {
  79.         Function<ResourceLocation, TextureAtlasSprite> dummyGetter = t -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(TextureMap.LOCATION_MISSING_TEXTURE.toString());
  80.         modelObj = bake(model, format, dummyGetter);
  81.         for (Entry<String, Variant> e : models.entrySet()) {
  82.             Variant v = e.getValue();
  83.             modelsObj.put(e.getKey(), bake(v, format, dummyGetter));
  84.         }
  85.         return new ModelChiselBlock(this);
  86.     }
  87.    
  88.     @SneakyThrows
  89.     private IBakedModel bake(Variant variant, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> getter) {
  90.         IModel imodel = ModelLoaderRegistry.getModel(variant.getModelLocation());
  91.         imodel = ModelProcessingHelper.uvlock(imodel, variant.isUvLock());
  92.         return imodel.bake(variant.getState(), format, getter);
  93.     }
  94.    
  95.     @Override
  96.     public void load() {
  97.         if (faceObj != null) {
  98.             return;
  99.         }
  100.         faceObj = JsonHelper.getOrCreateFace(new ResourceLocation(face));
  101.         for (Entry<EnumFacing, String> e : overrides.entrySet()) {
  102.             overridesObj.put(e.getKey(), JsonHelper.getOrCreateFace(new ResourceLocation(e.getValue())));
  103.         }
  104.         faceObj.getTextureList().forEach(t -> textures.addAll(t.getTextures()));
  105.         overridesObj.values().forEach(f -> f.getTextureList().forEach(t -> textures.addAll(t.getTextures())));
  106.     }
  107.  
  108.     @Override
  109.     public IModelState getDefaultState() {
  110.         return TRSRTransformation.identity();
  111.     }
  112.  
  113.     @Override
  114.     public IChiselFace getDefaultFace() {
  115.         return faceObj;
  116.     }
  117.    
  118.     @Override
  119.     public List<IChiselTexture<?>> getChiselTextures() {
  120.         List<IChiselTexture<?>> ret = Lists.newArrayList();
  121.         ret.addAll(getDefaultFace().getTextureList());
  122.         for (IChiselFace face : overridesObj.values()) {
  123.             ret.addAll(face.getTextureList());
  124.         }
  125.         return ret;
  126.     }
  127.  
  128.     @Override
  129.     public IChiselFace getFace(EnumFacing facing) {
  130.         return overridesObj.getOrDefault(facing, faceObj);
  131.     }
  132.  
  133.     @Override
  134.     public IBakedModel getModel(IBlockState state) {
  135.         if (state instanceof IExtendedBlockState) {
  136.             state = ((IExtendedBlockState)state).getClean();
  137.         }
  138.         String stateStr = mapper.getPropertyString(state.getProperties());
  139.         stateStr = stateStr.substring(stateStr.indexOf(",") + 1, stateStr.length());
  140.        
  141.         final String capture = stateStr;
  142.         if (modelsObj.containsKey(stateStr)) {
  143.             stateMap.computeIfAbsent(state, s -> modelsObj.get(capture));
  144.         }
  145.        
  146.         return stateMap.getOrDefault(state, modelObj);
  147.     }
  148. }
Advertisement
Add Comment
Please, Sign In to add comment