aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hype/bbsentials/mixins
diff options
context:
space:
mode:
authorHacktheTime <l4bg0jb7@duck.com>2023-08-09 20:46:00 +0200
committerHacktheTime <l4bg0jb7@duck.com>2023-08-09 20:46:00 +0200
commit2cd5f8e6bd42a084022028adcc24ef566fddab95 (patch)
treee06a18df40629371c33b9efce971489812696ac0 /src/main/java/de/hype/bbsentials/mixins
downloadBBsentials-2cd5f8e6bd42a084022028adcc24ef566fddab95.tar.gz
BBsentials-2cd5f8e6bd42a084022028adcc24ef566fddab95.tar.bz2
BBsentials-2cd5f8e6bd42a084022028adcc24ef566fddab95.zip
Initial commit
Diffstat (limited to 'src/main/java/de/hype/bbsentials/mixins')
-rw-r--r--src/main/java/de/hype/bbsentials/mixins/ClientCommandSourceMixin.java56
-rw-r--r--src/main/java/de/hype/bbsentials/mixins/ItemRendererMixin.java43
-rw-r--r--src/main/java/de/hype/bbsentials/mixins/ScreenMixin.java26
-rw-r--r--src/main/java/de/hype/bbsentials/mixins/SimpleOptionMixin.java33
4 files changed, 158 insertions, 0 deletions
diff --git a/src/main/java/de/hype/bbsentials/mixins/ClientCommandSourceMixin.java b/src/main/java/de/hype/bbsentials/mixins/ClientCommandSourceMixin.java
new file mode 100644
index 0000000..edbe487
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/mixins/ClientCommandSourceMixin.java
@@ -0,0 +1,56 @@
+package de.hype.bbsentials.mixins;
+
+import com.google.common.collect.Lists;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.network.ClientCommandSource;
+import net.minecraft.client.network.ClientPlayNetworkHandler;
+import net.minecraft.client.network.PlayerListEntry;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Overwrite;
+import org.spongepowered.asm.mixin.Shadow;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+@Environment(EnvType.CLIENT)
+@Mixin(ClientCommandSource.class)
+public abstract class ClientCommandSourceMixin {
+ @Shadow
+ private final ClientPlayNetworkHandler networkHandler;
+ private final MinecraftClient client;
+ @Final
+ private List<PlayerListEntry> playerList;
+
+ /**
+ * @return Collection of player names.
+ * @author HacktheTime
+ * @reason Remove hypixels dummy players from the list.
+ * Overwrites the getPlayerNames() method with the new implementation.
+ * This method returns a collection of player names from the playerList.
+ * This method is now also used by server-side commands.
+ */
+ @Overwrite
+ public Collection<String> getPlayerNames() {
+ List<String> list = Lists.newArrayList();
+ Iterator var2 = this.networkHandler.getPlayerList().iterator();
+
+ while (var2.hasNext()) {
+ PlayerListEntry playerListEntry = (PlayerListEntry) var2.next();
+ String playerName = playerListEntry.getProfile().getName();
+ if (!playerName.startsWith("!")) {
+ list.add(playerName);
+ }
+ }
+
+ return list;
+ }
+
+ public ClientCommandSourceMixin(ClientPlayNetworkHandler networkHandler) {
+ this.networkHandler = networkHandler;
+ this.client = MinecraftClient.getInstance();
+ }
+}
diff --git a/src/main/java/de/hype/bbsentials/mixins/ItemRendererMixin.java b/src/main/java/de/hype/bbsentials/mixins/ItemRendererMixin.java
new file mode 100644
index 0000000..d0d3290
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/mixins/ItemRendererMixin.java
@@ -0,0 +1,43 @@
+package de.hype.bbsentials.mixins;
+
+import de.hype.bbsentials.chat.Chat;
+import de.hype.bbsentials.client.BBsentials;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.render.VertexConsumerProvider;
+import net.minecraft.client.render.item.ItemRenderer;
+import net.minecraft.client.render.model.BakedModel;
+import net.minecraft.client.render.model.json.ModelTransformationMode;
+import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.item.ItemStack;
+import net.minecraft.text.Text;
+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.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(ItemRenderer.class)
+public class ItemRendererMixin {
+ @Shadow
+ @Final
+ private MinecraftClient client;
+
+ @Inject(method = "renderItem", at = @At("HEAD"), cancellable = true)
+ private void renderItemMixin(ItemStack stack, ModelTransformationMode renderMode, boolean leftHanded, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, BakedModel model, CallbackInfo ci) {
+ if (BBsentials.config.highlightitem) {
+ setCustomName(stack, BBsentials.bbserver.getItemName());
+ }
+ }
+
+ @Unique
+ private void setCustomName(ItemStack stack, String triggerName) {
+ String temp = stack.getName().getString();
+ if ((!temp.contains("Splash")) && temp.contains(triggerName)) {
+ String tem2 = stack.getNbt().getString("Display");
+ Chat.sendPrivateMessageToSelf(tem2);
+ stack.setCustomName(Text.literal("§6(Bingo Splash) " + temp));
+ }
+ }
+}
diff --git a/src/main/java/de/hype/bbsentials/mixins/ScreenMixin.java b/src/main/java/de/hype/bbsentials/mixins/ScreenMixin.java
new file mode 100644
index 0000000..e046e25
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/mixins/ScreenMixin.java
@@ -0,0 +1,26 @@
+package de.hype.bbsentials.mixins;
+
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.item.ItemStack;
+import net.minecraft.text.Text;
+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.callback.CallbackInfoReturnable;
+
+import java.util.List;
+
+@Mixin(Screen.class)
+public class ScreenMixin {
+ @Inject(method = "getTooltipFromItem", at = @At("RETURN"), cancellable = true)
+ private static void getTooltipFromItem(MinecraftClient client, ItemStack stack, CallbackInfoReturnable<List<Text>> ci) {
+ /*// Cancel the original method
+ List<Text> temp = ci.getReturnValue();
+ temp.add(1,Text.literal("§6Splash on going by missing"));
+ ci.setReturnValue(temp);*/
+
+ //TODO this is an only visual addition for time tooltip.
+ // This means it can be used to add data the server cant see.
+ }
+}
diff --git a/src/main/java/de/hype/bbsentials/mixins/SimpleOptionMixin.java b/src/main/java/de/hype/bbsentials/mixins/SimpleOptionMixin.java
new file mode 100644
index 0000000..7444788
--- /dev/null
+++ b/src/main/java/de/hype/bbsentials/mixins/SimpleOptionMixin.java
@@ -0,0 +1,33 @@
+package de.hype.bbsentials.mixins;
+
+import de.hype.bbsentials.api.ISimpleOption;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.option.SimpleOption;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+
+import java.util.Objects;
+import java.util.function.Consumer;
+
+@Mixin(SimpleOption.class)
+public class SimpleOptionMixin implements ISimpleOption {
+ @Shadow
+ Object value;
+ @Shadow
+ @Final
+ private Consumer<Object> changeCallback;
+
+ @Override
+ public void set(Object value) {
+ if (!MinecraftClient.getInstance().isRunning()) {
+ this.value = value;
+ }
+ else {
+ if (!Objects.equals(this.value, value)) {
+ this.value = value;
+ this.changeCallback.accept(this.value);
+ }
+ }
+ }
+}