diff --git a/.gitignore b/.gitignore index de7130f2d9e..76963f78572 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,5 @@ options.txt /resources_old /resources/assets/tinker /resources/assets/unused -/design \ No newline at end of file +/design +/classes/ diff --git a/src/main/java/slimeknights/tconstruct/library/client/model/BakedSimpleItem.java b/src/main/java/slimeknights/tconstruct/library/client/model/BakedSimpleItem.java index 50c4ef0428c..5be6d886149 100644 --- a/src/main/java/slimeknights/tconstruct/library/client/model/BakedSimpleItem.java +++ b/src/main/java/slimeknights/tconstruct/library/client/model/BakedSimpleItem.java @@ -5,30 +5,77 @@ import java.util.List; -import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import javax.vecmath.Matrix4f; -import slimeknights.mantle.client.model.BakedSimple; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.client.model.ItemLayerModel; +import net.minecraftforge.client.model.PerspectiveMapWrapper; +import net.minecraftforge.common.model.TRSRTransformation; +import org.apache.commons.lang3.tuple.Pair; -public class BakedSimpleItem extends BakedSimple { +/** + * Based on {@link ItemLayerModel.BakedItemModel} + * Implements culling for items in the GUI + */ +public class BakedSimpleItem implements IBakedModel { + private final ImmutableList quads; + private final TextureAtlasSprite particle; + private final ImmutableMap transforms; + private final IBakedModel otherModel; + private final boolean isCulled; + private final ItemOverrideList overrides; - public BakedSimpleItem(ImmutableList quads, ImmutableMap transforms, net.minecraft.client.renderer.block.model.IBakedModel base) { - super(quads, transforms, base); + public BakedSimpleItem(ImmutableList quads, ImmutableMap transforms, IBakedModel original) { + this(quads, original.getParticleTexture(), transforms, original.getOverrides(), null); } - public BakedSimpleItem(List quads, ImmutableMap transforms, net.minecraft.client.renderer.block.model.IBakedModel base) { - super(quads, transforms, base); + private BakedSimpleItem(ImmutableList quads, TextureAtlasSprite particle, ImmutableMap transforms, ItemOverrideList overrides, @Nullable IBakedModel unculledModel) { + this.quads = quads; + this.particle = particle; + this.transforms = transforms; + this.overrides = overrides; + if(unculledModel != null) { + this.otherModel = unculledModel; + this.isCulled = true; + } else { + ImmutableList.Builder builder = ImmutableList.builder(); + for(BakedQuad quad : quads) { + if(quad.getFace() == EnumFacing.SOUTH) { + builder.add(quad); + } + } + this.otherModel = new BakedSimpleItem(builder.build(), particle, transforms, overrides, this); + isCulled = false; + } } - public BakedSimpleItem(List quads, ImmutableMap transforms, net.minecraft.client.renderer.texture.TextureAtlasSprite particle, boolean ambientOcclusion, boolean isGui3d, net.minecraft.client.renderer.block.model.ItemOverrideList overrides) { - super(quads, transforms, particle, ambientOcclusion, isGui3d, overrides); + public boolean isAmbientOcclusion() { return true; } + public boolean isGui3d() { return false; } + public boolean isBuiltInRenderer() { return false; } + public TextureAtlasSprite getParticleTexture() { return particle; } + public ItemOverrideList getOverrides() { return overrides; } + public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) { + if(side == null) { + return quads; + } + return ImmutableList.of(); } - @Nonnull @Override - public List getQuads(net.minecraft.block.state.IBlockState state, net.minecraft.util.EnumFacing side, long rand) { - if(side == null) { - return super.getQuads(state, null, rand); + public Pair handlePerspective(ItemCameraTransforms.TransformType type) { + Pair pair = PerspectiveMapWrapper.handlePerspective(this, transforms, type); + if(type == ItemCameraTransforms.TransformType.GUI && !isCulled && pair.getRight() == null) { + return Pair.of(otherModel, null); + } else if(type != ItemCameraTransforms.TransformType.GUI && isCulled) { + return Pair.of(otherModel, pair.getRight()); } - return ImmutableList.of(); + return pair; } }