Skip to content

Commit

Permalink
Refactor + nullification/changing of header and footer option
Browse files Browse the repository at this point in the history
  • Loading branch information
jwkerr committed Aug 26, 2023
1 parent f0e0698 commit 0089860
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 72 deletions.
4 changes: 4 additions & 0 deletions src/main/java/com/fwloopins/tabby/config/TabbyConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ public static class General {
@ConfigEntry.BoundedDiscrete(min = 1, max = 10)
@Comment("The amount to divide the players online by to determine how many rows will be rendered when adaptive is set to true\nFormula: x / y = maxRows\nWhere x is the value of maxCount and y is the adaptiveDivisor value")
public int adaptiveDivisor = 5;
@Comment("Change header to a custom string, leave blank for no change, write null for nothing to be rendered")
public String customHeader = "";
@Comment("Change footer to a custom string, leave blank for no change, write null for nothing to be rendered")
public String customFooter = "";
}

public static class Colour {
Expand Down
47 changes: 47 additions & 0 deletions src/main/java/com/fwloopins/tabby/mixin/HighlightMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.fwloopins.tabby.mixin;

import com.fwloopins.tabby.config.TabbyConfig;
import me.shedaniel.autoconfig.AutoConfig;
import net.minecraft.client.gui.hud.PlayerListHud;
import net.minecraft.text.MutableText;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Mixin(PlayerListHud.class)
public class HighlightMixin {
@Unique
TabbyConfig config = AutoConfig.getConfigHolder(TabbyConfig.class).getConfig();

// Hacky clusterfuck
@Inject(method = "applyGameModeFormatting", at = @At("RETURN"), cancellable = true)
private void modifyNameColour(CallbackInfoReturnable<MutableText> cir) {
if (config.colour.customColours) {
MutableText text = cir.getReturnValue();
String[] splitOne = config.colour.namesOne.split(" ");
String[] splitTwo = config.colour.namesTwo.split(" ");
String[] splitThree = config.colour.namesThree.split(" ");
String[] splitFour = config.colour.namesFour.split(" ");
List<String> nameListOne = new ArrayList<>(Arrays.asList(splitOne));
List<String> nameListTwo = new ArrayList<>(Arrays.asList(splitTwo));
List<String> nameListThree = new ArrayList<>(Arrays.asList(splitThree));
List<String> nameListFour = new ArrayList<>(Arrays.asList(splitFour));

if (nameListOne.contains(text.getString())) {
cir.setReturnValue(text.formatted(config.colour.highlightColourOne.formatting()));
} else if (nameListTwo.contains(text.getString())) {
cir.setReturnValue(text.formatted(config.colour.highlightColourTwo.formatting()));
} else if (nameListThree.contains(text.getString())) {
cir.setReturnValue(text.formatted(config.colour.highlightColourThree.formatting()));
} else if (nameListFour.contains(text.getString())) {
cir.setReturnValue(text.formatted(config.colour.highlightColourFour.formatting()));
}
}
}
}
70 changes: 0 additions & 70 deletions src/main/java/com/fwloopins/tabby/mixin/TabMixin.java

This file was deleted.

71 changes: 71 additions & 0 deletions src/main/java/com/fwloopins/tabby/mixin/TabSizeMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.fwloopins.tabby.mixin;

import com.fwloopins.tabby.config.TabbyConfig;
import me.shedaniel.autoconfig.AutoConfig;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.hud.PlayerListHud;
import net.minecraft.text.Text;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.*;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

@Mixin(PlayerListHud.class)
public abstract class TabSizeMixin {
@Shadow @Final private MinecraftClient client;
@Shadow public abstract void setFooter(@Nullable Text footer);

@Shadow public abstract void setHeader(@Nullable Text header);

@Unique
TabbyConfig config = AutoConfig.getConfigHolder(TabbyConfig.class).getConfig();

@ModifyConstant(constant = @Constant(longValue = 80L), method = "collectPlayerEntries")
private long modifyCount(long count) {
if (config.general.maxCount <= 0)
return client.player.networkHandler.getListedPlayerListEntries().size();

return config.general.maxCount;
}

@ModifyConstant(constant = @Constant(intValue = 20), method = "render")
private int modifyMaxRows(int MAX_ROWS) {
setHeaderAndFooter();

if (!config.general.adaptive)
return Math.max(1, config.general.maxRows);

if (config.general.maxCount <= 0) {
int onlinePlayers = client.player.networkHandler.getListedPlayerListEntries().size();
return Math.max(1, onlinePlayers / config.general.adaptiveDivisor);
}

return (int) Math.max(1, config.general.maxCount / config.general.adaptiveDivisor);
}

@Unique
private void setHeaderAndFooter() {
if (!config.general.customHeader.isEmpty()) {
if (config.general.customHeader.equals("null")) {
setHeader(null);
} else {
setHeader(Text.of(config.general.customHeader));
}
}

if (!config.general.customFooter.isEmpty()) {
if (config.general.customFooter.equals("null")) {
setFooter(null);
} else {
setFooter(Text.of(config.general.customFooter));
}
}
}
}
4 changes: 3 additions & 1 deletion src/main/resources/assets/tabby/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
"text.autoconfig.Tabby.option.general.maxRows": "Max Rows",
"text.autoconfig.Tabby.option.general.adaptive": "Adaptive",
"text.autoconfig.Tabby.option.general.adaptiveDivisor": "Adaptive Divisor",
"text.autoconfig.Tabby.option.general.customHeader": "Custom Header",
"text.autoconfig.Tabby.option.general.customFooter": "Custom Footer",

"text.autoconfig.Tabby.category.Colour": "Colour",
"text.autoconfig.Tabby.option.colour.customColours": "Custom colours",
"text.autoconfig.Tabby.option.colour.customColours": "Custom Colours",
"text.autoconfig.Tabby.option.colour.namesOne": "First list of names",
"text.autoconfig.Tabby.option.colour.highlightColourOne": "First list's colour",
"text.autoconfig.Tabby.option.colour.namesTwo": "Second list of names",
Expand Down
3 changes: 2 additions & 1 deletion src/main/resources/tabby.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
"mixins": [
],
"client": [
"TabMixin"
"TabSizeMixin",
"HighlightMixin"
],
"injectors": {
"defaultRequire": 1
Expand Down

0 comments on commit 0089860

Please sign in to comment.