Skip to content

Commit

Permalink
feat: CrystalView (#5489)
Browse files Browse the repository at this point in the history
  • Loading branch information
ccetl authored Jan 30, 2025
1 parent 2d0b104 commit 98b5604
Show file tree
Hide file tree
Showing 6 changed files with 143 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce)
*
* Copyright (c) 2015 - 2023 CCBlueX
*
* LiquidBounce is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* LiquidBounce is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with LiquidBounce. If not, see <https://www.gnu.org/licenses/>.
*/
package net.ccbluex.liquidbounce.injection.mixins.minecraft.render;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import net.ccbluex.liquidbounce.features.module.modules.render.ModuleCrystalView;
import net.minecraft.client.render.entity.model.EndCrystalEntityModel;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;

@Mixin(EndCrystalEntityModel.class)
public abstract class MixinEndCrystalEntityModel {

@ModifyExpressionValue(method = "setAngles(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/EndCrystalEntityRenderer;getYOffset(F)F"))
public float injectYOffsetMultiplier(float original) {
var crystalView = ModuleCrystalView.INSTANCE;
if (crystalView.getRunning()) {
return original * crystalView.getBounce();
}

return original;
}

@ModifyVariable(method = "setAngles(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;)V", at = @At(value = "STORE", opcode = Opcodes.FSTORE, ordinal = 0))
public float injectSpinSpeedMultiplier(float original) {
var crystalView = ModuleCrystalView.INSTANCE;
if (crystalView.getRunning()) {
return original * crystalView.getSpinSpeed();
}

return original;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce)
*
* Copyright (c) 2015 - 2023 CCBlueX
*
* LiquidBounce is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* LiquidBounce is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with LiquidBounce. If not, see <https://www.gnu.org/licenses/>.
*/
package net.ccbluex.liquidbounce.injection.mixins.minecraft.render;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import net.ccbluex.liquidbounce.features.module.modules.render.ModuleCrystalView;
import net.minecraft.client.render.entity.EndCrystalEntityRenderer;
import net.minecraft.client.util.math.MatrixStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

@Mixin(EndCrystalEntityRenderer.class)
public abstract class MixinEndCrystalEntityRenderer {

@WrapOperation(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;scale(FFF)V"))
public void injectScale(MatrixStack instance, float x, float y, float z, Operation<Void> original) {
var crystalView = ModuleCrystalView.INSTANCE;
if (crystalView.getRunning()) {
x *= crystalView.getSize();
y *= crystalView.getSize();
z *= crystalView.getSize();
instance.translate(0f, crystalView.getYTranslate(), 0f);
}

original.call(instance, x, y, z);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,7 @@ object ModuleManager : EventListener, Iterable<ClientModule> by modules {
ModuleDebug,
ModuleZoom,
ModuleItemChams,
ModuleCrystalView,

// World
ModuleAutoBuild,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* This file is part of LiquidBounce (https://github.com/CCBlueX/LiquidBounce)
*
* Copyright (c) 2015 - 2025 CCBlueX
*
* LiquidBounce is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* LiquidBounce is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with LiquidBounce. If not, see <https://www.gnu.org/licenses/>.
*/
package net.ccbluex.liquidbounce.features.module.modules.render

import net.ccbluex.liquidbounce.features.module.Category
import net.ccbluex.liquidbounce.features.module.ClientModule
import net.ccbluex.liquidbounce.injection.mixins.minecraft.render.MixinEndCrystalEntityModel
import net.ccbluex.liquidbounce.injection.mixins.minecraft.render.MixinEndCrystalEntityRenderer

/**
* Module CrystalView
*
* Tweaks how crystal models behave.
*
* Mixins: [MixinEndCrystalEntityModel], [MixinEndCrystalEntityRenderer]
*
* @author ccetl
*/
object ModuleCrystalView : ClientModule("CrystalView", Category.RENDER) {

val size by float("Size", 0.3f, 0.1f..1.5f)
val yTranslate by float("YTranslate", -0.5f, -2f..2f)
val spinSpeed by float("SpinSpeed", 0f, 0f..5f)
val bounce by float("Bounce", 0.25f, -1f..1f)

}
2 changes: 2 additions & 0 deletions src/main/resources/liquidbounce.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@
"minecraft.render.MixinBlockEntityRenderDispatcher",
"minecraft.render.MixinCamera",
"minecraft.render.MixinChunkOcclusionDataBuilder",
"minecraft.render.MixinEndCrystalEntityModel",
"minecraft.render.MixinEndCrystalEntityRenderer",
"minecraft.render.MixinEntityRenderDispatcher",
"minecraft.render.MixinEntityRenderer",
"minecraft.render.MixinGameRenderer",
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/resources/liquidbounce/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -629,6 +629,7 @@
"liquidbounce.module.fastExp.description": "Automatically repairs your armor.",
"liquidbounce.module.bookBot.description": "Automatically writes in books.",
"liquidbounce.module.itemChams.description": "Applies visual effects to your held items.",
"liquidbounce.module.crystalView.description": "Tweaks how crystal models behave.",
"liquidbounce.module.betterTab.description": "Multiple improvements to the tab list.",
"liquidbounce.module.autoPearl.description": "Aims and throws a pearl at an enemies pearl trajectory.",
"liquidbounce.module.replenish.description": "Automatically refills your hotbar with items from your inventory when the count drops to a certain threshold.",
Expand Down

0 comments on commit 98b5604

Please sign in to comment.