petroleum/remappedSrc/pm/j4/petroleum/mixin/ModListMixin.java

90 lines
2.5 KiB
Java

package pm.j4.petroleum.mixin;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.TranslatableText;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import pm.j4.petroleum.modules.list.ModList;
import pm.j4.petroleum.util.config.ConfigHolder;
import pm.j4.petroleum.util.config.ConfigManager;
import pm.j4.petroleum.util.module.ModuleBase;
/**
* The type Mod list mixin.
*/
@Mixin(InGameHud.class)
public abstract class ModListMixin extends DrawableHelper {
/**
* The Scaled height.
*/
@Shadow
private int scaledHeight;
/**
* The Client.
*/
private final MinecraftClient client;
/**
* Gets font renderer.
*
* @return the font renderer
*/
@Shadow
public abstract TextRenderer getFontRenderer();
/**
* Instantiates a new Mod list mixin.
*
* @param client the client
*/
public ModListMixin(MinecraftClient client) {
this.client = client;
}
/**
* Render.
*
* @param matrices the matrices
* @param tickDelta the tick delta
* @param ci the ci
*/
@Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;F)V",
at = @At("HEAD"))
public void render(MatrixStack matrices, float tickDelta, CallbackInfo ci) {
Optional<ConfigHolder> config = ConfigManager.getConfig();
if (config.isPresent() &&
config.get().isModuleEnabled("petroleum.modlist") &&
!this.client.options.hudHidden &&
!this.client.options.debugEnabled) {
renderModuleList(matrices);
}
}
/**
* Render module list.
*
* @param matrices the matrices
*/
private void renderModuleList(MatrixStack matrices) {
List<ModuleBase> modules = ModList.getActive();
List<TranslatableText> activeModuleList = modules.stream().map(module -> module.getReadableName()).collect(Collectors.toList());
int fontHeight = this.getFontRenderer().fontHeight;
int startHeight = this.scaledHeight - (activeModuleList.size() * (fontHeight + 4));
for (int i = 0; i < activeModuleList.size(); i++) {
this.getFontRenderer().drawWithShadow(matrices, activeModuleList.get(i), 10, 10 + (i * (fontHeight + 4)), -1);
}
}
}