private List<BakedQuad> fixQuadTint( EnumFacing facing, TextureAtlasSprite texDark, TextureAtlasSprite texMedium, TextureAtlasSprite texBright ) { List<BakedQuad> quads = this.baseModel.getQuads( null, facing, 0 ); List<BakedQuad> result = new ArrayList<>( quads.size() ); for( BakedQuad quad : quads ) { int tint; if( quad.getSprite() == texDark ) { tint = 1; } else if( quad.getSprite() == texMedium ) { tint = 2; } else if( quad.getSprite() == texBright ) { tint = 3; } else { result.add( quad ); continue; } BakedQuad newQuad = new BakedQuad( quad.getVertexData(), tint, quad.getFace(), quad.getSprite(), quad.shouldApplyDiffuseLighting(), quad .getFormat() ); result.add( newQuad ); } return result; }
return new BakedQuad( newData, quad.getTintIndex(), newFace, quad.getSprite(), quad.shouldApplyDiffuseLighting(), quad.getFormat() );
BakedQuad packedQuad = new BakedQuad( unpackedQuad.getVertexData(), quad.getTintIndex(), unpackedQuad.getFace(), quad.getSprite(), quad .shouldApplyDiffuseLighting(), quad.getFormat() ); rotated.add( packedQuad );
builder.setQuadTint( quad.getTintIndex() ); builder.setQuadOrientation( quad.getFace() ); builder.setTexture( quad.getSprite() ); builder.setApplyDiffuseLighting( false ); return builder.build();
private static void markQuads(List<BakedQuad> quads) { CompiledChunk compiledChunk = TemporaryStorage.currentCompiledChunk.get(); if (compiledChunk != null) { Set<TextureAtlasSprite> visibleTextures = ((IPatchedCompiledChunk) compiledChunk).getVisibleTextures(); for (BakedQuad quad : quads) { if (quad.getSprite() != null) { visibleTextures.add(quad.getSprite()); } } } else { // Called from non-chunk render thread. Unfortunately, the best we can do // is assume it's only going to be used once: for (BakedQuad quad : quads) { if (quad.getSprite() != null) { ((IPatchedTextureAtlasSprite) quad.getSprite()).markNeedsAnimationUpdate(); } } } } }
private static void markQuads(List<BakedQuad> quads) { CompiledChunk compiledChunk = TemporaryStorage.currentCompiledChunk.get(); if (compiledChunk != null) { Set<TextureAtlasSprite> visibleTextures = ((IPatchedCompiledChunk) compiledChunk).getVisibleTextures(); for (BakedQuad quad : quads) { if (quad.getSprite() != null) { visibleTextures.add(quad.getSprite()); } } } else { // Called from non-chunk render thread. Unfortunately, the best we can do // is assume it's only going to be used once: for (BakedQuad quad : quads) { if (quad.getSprite() != null) { ((IPatchedTextureAtlasSprite) quad.getSprite()).markNeedsAnimationUpdate(); } } } } }
private static List<BakedQuad> transformQuads(List<BakedQuad> oldQuads, Set<String> textures) { List<BakedQuad> quads = new ArrayList<>(oldQuads); for (int i = 0; i < quads.size(); ++i) { BakedQuad quad = quads.get(i); if (textures.contains(quad.getSprite().getIconName())) { quads.set(i, transformQuad(quad, 0.007F)); } } return quads; }
/** * @reason Keep a list of textures that have been used this frame to render an item * such that their animation can be updated next tick. */ @Inject(method = "renderQuads", at = @At("HEAD")) public void beforeRenderItem(BufferBuilder renderer, List<BakedQuad> quads, int color, ItemStack stack, CallbackInfo ci) { for (BakedQuad quad : quads) { if (quad.getSprite() == null) continue; ((IPatchedTextureAtlasSprite) quad.getSprite()).markNeedsAnimationUpdate(); } } }
@Inject(method = "renderModel(Lnet/minecraft/client/renderer/block/model/IBakedModel;Lnet/minecraft/item/ItemStack;F)V", at = @At("HEAD"), remap = false) private static void onRenderModel(IBakedModel model, ItemStack stack, float alphaOverride, CallbackInfo ci) { List<BakedQuad> quads = model.getQuads(null, null, 0); for (BakedQuad quad : quads) { if (quad.getSprite() != null) { ((IPatchedTextureAtlasSprite) quad.getSprite()).markNeedsAnimationUpdate(); } } } }
/** * Offsets the z coordinate and color the quads * @param quads The original quads * @param offset The offset to apply * @param color The color * @return The offsetted quads */ private Collection<? extends BakedQuad> offsetAndColor(List<BakedQuad> quads, float offset, int color) { List<BakedQuad> offsetQuads = Lists.newArrayListWithExpectedSize(quads.size()); for (BakedQuad quad : quads) { int[] vertexData = Arrays.copyOf(quad.getVertexData(), quad.getVertexData().length); for(int i = 0; i < vertexData.length / 7; i++) { float originalZ = Float.intBitsToFloat(vertexData[i * 7 + 2]); originalZ += offset; vertexData[i * 7 + 2] = Float.floatToIntBits(originalZ); vertexData[i * 7 + 3] = color; } offsetQuads.add(new BakedQuad(vertexData, quad.getTintIndex(), quad.getFace(), quad.getSprite(), false, DefaultVertexFormats.ITEM)); } return offsetQuads; }
/** * Color the quads * @param quads The original quads * @param color The color * @return The colored quads */ private Collection<? extends BakedQuad> color(List<BakedQuad> quads, int color) { List<BakedQuad> offsetQuads = Lists.newArrayListWithExpectedSize(quads.size()); for (BakedQuad quad : quads) { int[] vertexData = Arrays.copyOf(quad.getVertexData(), quad.getVertexData().length); for(int i = 0; i < vertexData.length / 7; i++) { vertexData[i * 7 + 3] = color; } offsetQuads.add(new BakedQuad(vertexData, quad.getTintIndex(), quad.getFace(), quad.getSprite(), false, DefaultVertexFormats.ITEM)); } return offsetQuads; }
@Override public List<BakedQuad> getGeneralQuads() { List<BakedQuad> quads = Lists.newLinkedList(); // Base chalice model quads.addAll(chaliceModel.getQuads(blockState, facing, rand)); // Colored gems int color = getColorSeed(this.id); for(BakedQuad quad : gemsModel.getQuads(blockState, facing, rand)) { int[] data = quad.getVertexData(); for(int i = 0; i < data.length / 7; i++) { data[i * 7 + 3] = color; } quads.add(new BakedQuad(data, quad.getTintIndex(), quad.getFace(), quad.getSprite(), true, DefaultVertexFormats.ITEM)); } // Fluid if(fluidStack != null) { quads.addAll(getFluidQuads(fluidStack, TileEntangledChalice.BASE_CAPACITY)); } return quads; }
public BakedTintedQuad(BakedQuad quad) { super(Arrays.copyOf(quad.getVertexData(), quad.getVertexData().length), 1, FaceBakery.getFacingFromVertexData(quad.getVertexData()), quad.getSprite(), quad.shouldApplyDiffuseLighting(), quad.getFormat()); } }
private static BakedQuad tint(PartInfo.ClientInfo info, BakedQuad quad) { return quad.hasTintIndex() ? new BakedQuad(quad.getVertexData(), info.getTint(quad.getTintIndex()), quad.getFace(), quad.getSprite(), quad.shouldApplyDiffuseLighting(), quad.getFormat()) : quad; }
@Override public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) { if (bakedQuads.isEmpty()) { IModel crateModel = ModelLoaderRegistry.getModelOrMissing(new ResourceLocation(Constants.MOD_ID + ":item/crate-filled")); IBakedModel bakedModel = crateModel.bake(ModelManager.getInstance().getDefaultItemState(), DefaultVertexFormats.ITEM, DefaultTextureGetter.INSTANCE); //Set the crate color index to 100 for (BakedQuad quad : bakedModel.getQuads(null, null, 0L)) { bakedQuads.add(new BakedQuad(quad.getVertexData(), 100, quad.getFace(), quad.getSprite(), quad.shouldApplyDiffuseLighting(), quad.getFormat())); } } IBakedModel model; List<BakedQuad> quads = new LinkedList<>(bakedQuads); IBakedModel contentModel = getCustomContentModel(); if (contentModel == null) { model = new ModelCrateBaked(quads, contained); } else { quads.addAll(contentModel.getQuads(null, null, 0)); model = new ModelCrateBaked(quads); } return new PerspectiveMapWrapper(model, ModelManager.getInstance().getDefaultItemState()); } }
b.setQuadOrientation( myFace ); b.setQuadTint( 1 ); b.setTexture( g.getSprite() );
builder.setTexture(quad.getSprite()); builder.setApplyDiffuseLighting(false);