 their defense leading to offense, and it paid off in the second half.
Chelsea scored 22 combined points between the third and fourth quarters, eventually clearing the deficit with around a minute left thanks to a 3-pointer from Ashley Washington.
Washington’s three put the Hornets in front by one point. The defense did its job from there, eventually getting the ball back, leading to a strong finish from Mary Cartee at the line.
She made three of her four free throws to protect Chelsea’s lead and help the Hornets close out a 32-28 comeback victory against the Spartans.
With that win, Chelsea improved to 5-0 in area play and earned hosting rights for the Class 6A, Area 9 tournament as the one seed.
In the second half, the Hornets hit eight field goals, including three 3-pointers. That was five more made shots than the opening half and two more from beyond the arc, while they matched their 3-4 mark from the free throw line.
But the struggles in the first half put them in chase mode early.
Chelsea scored six points in the opening quarter, which became their high for the first two quarters, getting four from Sydney Schwallie and two free throws from Lexi Redd.
Redd carried her points into the second quarter, making one 3-pointer and a free throw for four more points, but she was the only one to find the basket in the period.
Meanwhile, Mountain Brook was able to follow up a seven-point opening quarter with 11 in the second quarter, thanks in large part to six from Libby Geisler.
With that, the Spartans extended their lead from one point to eight at the break.
But Chelsea committed to defense helping lift the offense going into the second half, and that quickly paid off.
The Hornets limited Mountain Brook to seven points on two made shots and two free throws, while the seal came off the basket for the offense.
Chelsea got 3-pointers from Cartee and Washington, while Redd added four more and Schwallie two more.
With those 12 points, the Hornets had clawed back to within three points at 25-22 going to the final quarter.
Chelsea then put the final stamp on the game by limiting the Spartans to one made 3-pointer in the final quarter.
But the comeback wasn’t complete until the final minute.
Trailing 28-26, that’s when Washington hit her 3-pointer before Cartee added her free throws to cement the comeback.
Redd led the Hornets with 14 points in the win, while Cartee and Washington each added six clutch points in the second half. Schwallie also totaled six in the victory.Before the Raging Bull season, 12-15 of our club members would buy the LP every season. After Raging Bull, 2 or 3 do. Congrats Gameloft.

Title kind of says it all. Up to the Raging Bull season, our club with 17 or 18 members would have the vast majority buy the legend pass every season. Usually 12, but as many as 14 or 15.

We all equally feel burned by Gameloft over that legend pass, and in the next two seasons (the short one, and this current one), 3 club members bought the short one, and only two bought this one.

So Gameloft went from having our club spending roughly $200 per season on the game, to spending $25 or so. And we're all agreed the days of us buying the legend pass are over.

Congrats Gameloft. Brilliant marketing strategy.<filename>src/main/java/io/github/apace100/origins/mixin/LivingEntityRendererMixin.java
package io.github.apace100.origins.mixin;

import io.github.apace100.origins.component.OriginComponent;
import io.github.apace100.origins.power.InvisibilityPower;
import io.github.apace100.origins.power.ModelColorPower;
import io.github.apace100.origins.power.ShakingPower;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.EntityRenderDispatcher;
import net.minecraft.client.render.entity.EntityRenderer;
import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.render.entity.model.EntityModel;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import java.util.List;

@Mixin(LivingEntityRenderer.class)
public abstract class LivingEntityRendererMixin extends EntityRenderer<LivingEntity> {

    protected LivingEntityRendererMixin(EntityRenderDispatcher dispatcher) {
        super(dispatcher);
    }

    @Inject(method = "isShaking", at = @At("HEAD"), cancellable = true)
    private void letPlayersShakeTheirBodies(LivingEntity entity, CallbackInfoReturnable<Boolean> cir) {
        if(OriginComponent.hasPower(entity, ShakingPower.class)) {
            cir.setReturnValue(true);
        }
    }

    @Inject(method = "render", at = @At(value = "HEAD"), cancellable = true)
    private void preventPumpkinRendering(LivingEntity livingEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo info) {
        List<InvisibilityPower> invisibilityPowers = OriginComponent.getPowers(livingEntity, InvisibilityPower.class);
        if(invisibilityPowers.size() > 0 && invisibilityPowers.stream().noneMatch(InvisibilityPower::shouldRenderArmor)) {
            info.cancel();
        }
    }

    @ModifyVariable(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/VertexConsumerProvider;getBuffer(Lnet/minecraft/client/render/RenderLayer;)Lnet/minecraft/client/render/VertexConsumer;", shift = At.Shift.BEFORE))
    private RenderLayer changeRenderLayerWhenTranslucent(RenderLayer original, LivingEntity entity) {
        if(entity instanceof PlayerEntity) {
            if(OriginComponent.getPowers(entity, ModelColorPower.class).stream().anyMatch(ModelColorPower::isTranslucent)) {
                return RenderLayer.getItemEntityTranslucentCull(getTexture(entity));
            }
        }
        return original;
    }

    @Environment(EnvType.CLIENT)
    @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/model/EntityModel;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;IIFFFF)V", ordinal = 0))
    private void renderColorChangedModel(EntityModel model, MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha, LivingEntity player) {
        if(player instanceof PlayerEntity) {
            List<ModelColorPower> modelColorPowers = OriginComponent.getPowers(player, ModelColorPower.class);
            if (modelColorPowers.size() > 0) {
                float r = modelColorPowers.stream().map(ModelColorPower::getRed).reduce((a, b) -> a * b).get();
                float g = modelColorPowers.stream().map(ModelColorPower::getGreen).reduce((a, b) -> a * b).get();
                float b = modelColorPowers.stream().map(ModelColorPower::getBlue).reduce((a, c) -> a * c).get();
                float a = modelColorPowers.stream().map(ModelColorPower::getAlpha).min(Float::compare).get();
                model.render(matrices, vertices, light, overlay, r * red, g * green, b * blue, a * alpha);
                return;
            }
        }
        model.render(matrices, vertices, light