aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRule.java24
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java51
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java14
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json9
4 files changed, 72 insertions, 26 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRule.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRule.java
index 0fe1c3f1..97431305 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRule.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRule.java
@@ -3,6 +3,8 @@ package de.hysky.skyblocker.skyblock.chat;
import de.hysky.skyblocker.utils.Utils;
import net.minecraft.client.sound.Sound;
import net.minecraft.item.ItemStack;
+import net.minecraft.sound.SoundEvent;
+import net.minecraft.sound.SoundEvents;
import java.util.List;
import java.util.Objects;
@@ -28,7 +30,7 @@ public class ChatRule {
private Boolean showActionBar;
private Boolean showAnnouncement;
private String replaceMessage; //todo extract parts of original message
- private Sound customSound;
+ private SoundEvent customSound;
/**
* Creates a chat rule with default options.
*/
@@ -49,22 +51,6 @@ public class ChatRule {
this.customSound = null;
}
-
- public ChatRule(String name, Boolean enabled, Boolean isPartialMatch, Boolean isRegex, Boolean isIgnoreCase, String filter, String validLocation, List<ItemStack> validItems, Boolean hideMessage, Boolean showActionBar, Boolean showAnnouncement, String replaceMessage, Sound customSound) {
- this.name = name;
- this.enabled = enabled;
- this.isPartialMatch = isPartialMatch;
- this.isRegex = isRegex;
- this.isIgnoreCase = isIgnoreCase;
- this.filter = filter;
- this.validLocations = validLocation;
- this.hideMessage = hideMessage;
- this.showActionBar = showActionBar;
- this.showAnnouncement = showAnnouncement;
- this.replaceMessage = replaceMessage;
- this.customSound = customSound;
- }
-
public Boolean getEnabled() { //todo remove unused getters and set
return enabled;
}
@@ -137,11 +123,11 @@ public class ChatRule {
this.replaceMessage = replaceMessage;
}
- public Sound getCustomSound() {
+ public SoundEvent getCustomSound() {
return customSound;
}
- public void setCustomSound(Sound customSound) {
+ public void setCustomSound(SoundEvent customSound) {
this.customSound = customSound;
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java
index c38271f5..f46af79b 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java
@@ -6,16 +6,32 @@ import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.TextFieldWidget;
+import net.minecraft.sound.SoundEvent;
+import net.minecraft.sound.SoundEvents;
+import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import java.awt.*;
+import java.util.Map;
+
+import static java.util.Map.entry;
public class ChatRuleConfigScreen extends Screen {
private static final int SPACER_X = 5;
private static final int SPACER_Y = 25;
+ private final Map<MutableText, SoundEvent> soundsLookup = Map.ofEntries(
+ entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.pling"), SoundEvents.BLOCK_NOTE_BLOCK_PLING.value()),
+ entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.cave"), SoundEvents.AMBIENT_CAVE.value()),
+ entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.zombie"), SoundEvents.ENTITY_ZOMBIE_AMBIENT),
+ entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.crit"), SoundEvents.ENTITY_PLAYER_ATTACK_CRIT),
+ entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.arrowHit"), SoundEvents.ENTITY_ARROW_HIT_PLAYER),
+ entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.amethyst"), SoundEvents.BLOCK_AMETHYST_BLOCK_HIT),
+ entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.anvil"), SoundEvents.BLOCK_ANVIL_LAND)
+ );//todo amathis / more sounds
+
private final int chatRuleIndex;
private final ChatRule chatRule;
@@ -32,8 +48,8 @@ public class ChatRuleConfigScreen extends Screen {
private ButtonWidget hideMessageToggle;
private ButtonWidget actionBarToggle;
private ButtonWidget announcementToggle;
+ private ButtonWidget soundsToggle;
private TextFieldWidget replaceMessageInput;
- //todo custom sound thing
//textLocations
private IntIntPair nameLabelTextPos;
@@ -51,11 +67,10 @@ public class ChatRuleConfigScreen extends Screen {
private IntIntPair hideMessageTextPos;
private IntIntPair actionBarTextPos;
private IntIntPair announcementTextPos;
-
- private IntIntPair replaceMessageLabelTextPos;
-
private IntIntPair customSoundLabelTextPos;
+ private IntIntPair replaceMessageLabelTextPos;
+ private int currentSoundIndex;
private final Screen parent;
@@ -66,6 +81,7 @@ public class ChatRuleConfigScreen extends Screen {
this.chatRuleIndex = chatRuleIndex;
this.chatRule = ChatRulesHandler.chatRuleList.get(chatRuleIndex);
this.parent = parent;
+ this.currentSoundIndex = soundsLookup.values().stream().toList().indexOf(chatRule.getCustomSound());
}
@Override
@@ -164,7 +180,23 @@ public class ChatRuleConfigScreen extends Screen {
.position(currentPos.leftInt() + lineXOffset, currentPos.rightInt())
.size(75,20)
.build();
+ lineXOffset += 75 + SPACER_X;
+ customSoundLabelTextPos = IntIntPair.of(currentPos.leftInt() + lineXOffset,currentPos.rightInt());
+ lineXOffset += client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds")) + SPACER_X;
+ soundsToggle = ButtonWidget.builder(getSoundName(), a -> {
+ currentSoundIndex += 1;
+ if (currentSoundIndex == soundsLookup.size()) {
+ currentSoundIndex = -1;
+ }
+ MutableText newText = getSoundName();
+ soundsToggle.setMessage(newText);
+ chatRule.setCustomSound(soundsLookup.get(newText));
+ })
+ .position(currentPos.leftInt() + lineXOffset, currentPos.rightInt())
+ .size(100,20)
+ .build();
currentPos = IntIntPair.of(currentPos.leftInt(),currentPos.rightInt() + SPACER_Y);
+
replaceMessageLabelTextPos = currentPos;
lineXOffset = client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.replace")) + SPACER_X;
replaceMessageInput = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, currentPos.leftInt() + lineXOffset, currentPos.rightInt(), 200, 20, Text.of(""));
@@ -187,6 +219,7 @@ public class ChatRuleConfigScreen extends Screen {
addDrawableChild(hideMessageToggle);
addDrawableChild(actionBarToggle);
addDrawableChild(announcementToggle);
+ addDrawableChild(soundsToggle);
addDrawableChild(replaceMessageInput);
addDrawableChild(finishButton);
}
@@ -239,6 +272,7 @@ public class ChatRuleConfigScreen extends Screen {
context.drawTextWithShadow(this.textRenderer,Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.hideMessage"), hideMessageTextPos.leftInt(), hideMessageTextPos.rightInt() + yOffset, 0xFFFFFF);
context.drawTextWithShadow(this.textRenderer,Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.actionBar"), actionBarTextPos.leftInt(), actionBarTextPos.rightInt() + yOffset, 0xFFFFFF);
context.drawTextWithShadow(this.textRenderer,Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.announcement"), announcementTextPos.leftInt(), announcementTextPos.rightInt() + yOffset, 0xFFFFFF);
+ context.drawTextWithShadow(this.textRenderer,Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds"), customSoundLabelTextPos.leftInt(), customSoundLabelTextPos.rightInt() + yOffset, 0xFFFFFF);
context.drawTextWithShadow(this.textRenderer,Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.replace"), replaceMessageLabelTextPos.leftInt(), replaceMessageLabelTextPos.rightInt() + yOffset, 0xFFFFFF);
}
@@ -259,4 +293,13 @@ public class ChatRuleConfigScreen extends Screen {
ChatRulesHandler.chatRuleList.set(chatRuleIndex,chatRule);
}
+
+ private MutableText getSoundName() {
+ if (currentSoundIndex == -1){
+ return Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.none");
+ }
+ return soundsLookup.keySet().stream().toList().get(currentSoundIndex);
+ }
+
+
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java
index 035e7e8f..3f61d217 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesHandler.java
@@ -6,6 +6,7 @@ import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.sound.SoundEvents;
import net.minecraft.text.Text;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -73,14 +74,14 @@ public class ChatRulesHandler {
if (rule.isMatch(plain)) {
//get a replacement message
Text newMessage;
- if (!rule.getReplaceMessage().isBlank()){
+ if (!rule.getReplaceMessage().isBlank()) {
newMessage = Text.of(rule.getReplaceMessage());
}
else {
newMessage = message;
}
- if (rule.getShowAnnouncement()){
+ if (rule.getShowAnnouncement()) {
ChatRuleAnnouncementScreen.setText(newMessage);
}
@@ -88,10 +89,17 @@ public class ChatRulesHandler {
if (rule.getShowActionBar() && CLIENT.player != null) {
CLIENT.player.sendMessage(newMessage, true);
}
+
//hide message
- if (!rule.getHideMessage() && CLIENT.player != null){
+ if (!rule.getHideMessage() && CLIENT.player != null) {
CLIENT.player.sendMessage(newMessage, false);
}
+
+ //play sound
+ if (rule.getCustomSound() != null && CLIENT.player != null) {
+ CLIENT.player.playSound(rule.getCustomSound(), 100f, 0.1f);
+ }
+
//do not send original message
return false;
}
diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json
index bd8b9bb8..079d060e 100644
--- a/src/main/resources/assets/skyblocker/lang/en_us.json
+++ b/src/main/resources/assets/skyblocker/lang/en_us.json
@@ -393,6 +393,15 @@
"text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.announcement": "Show Announcement:",
"text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.replace": "Replace Message With:",
"text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.finish": "finish",
+ "text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds": "Play Sound:",
+ "text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.none": "None",
+ "text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.pling": "Pling",
+ "text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.cave": "Cave",
+ "text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.zombie": "Zombie",
+ "text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.crit": "Critical",
+ "text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.arrowHit": "Dink",
+ "text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.amethyst": "Amethyst",
+ "text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.anvil": "Break",
"text.autoconfig.skyblocker.category.slayer": "Slayers",
"text.autoconfig.skyblocker.option.slayer.endermanSlayer": "[Beta] Enderman Slayer",
"text.autoconfig.skyblocker.option.slayer.endermanSlayer.highlightNukekubiHeads": "Nukekubi Head Highlighting",