From 530d5dfbc2a952b63669d7f356e843c8f5890444 Mon Sep 17 00:00:00 2001 From: StavWasPlayZ Date: Tue, 18 Jul 2023 02:36:34 +0300 Subject: [PATCH 01/10] Add stereo varient to Ka, fix identifier package --- .../instrument/drum/DrumNoteButton.java | 2 +- .../instrument/partial/note/NoteButton.java | 2 +- .../partial/notegrid/NoteGridButton.java | 2 +- .../event/InstrumentPlayedEvent.java | 2 +- .../networking/ModPacketHandler.java | 6 +- .../buttonidentifier/DrumNoteIdentifier.java | 43 +++++++ .../NoteButtonIdentifier.java | 121 ++++++++++++++++++ .../NoteGridButtonIdentifier.java | 40 ++++++ .../packets/instrument/InstrumentPacket.java | 2 +- .../packets/instrument/PlayNotePacket.java | 2 +- .../genshinstrument/sound/NoteSound.java | 2 +- .../genshinstrument/util/ServerUtil.java | 2 +- 12 files changed, 215 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java create mode 100644 src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java create mode 100644 src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java diff --git a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/drum/DrumNoteButton.java b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/drum/DrumNoteButton.java index bd9ce39a..049c3ed7 100644 --- a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/drum/DrumNoteButton.java +++ b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/drum/DrumNoteButton.java @@ -2,7 +2,7 @@ import com.cstav.genshinstrument.client.config.ModClientConfigs; import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.NoteButton; -import com.cstav.genshinstrument.networking.buttonidentifiers.DrumNoteIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.DrumNoteIdentifier; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; diff --git a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java index 9573df45..c1dbbd26 100644 --- a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java +++ b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java @@ -11,7 +11,7 @@ import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.animation.NoteAnimationController; import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.label.NoteLabelSupplier; import com.cstav.genshinstrument.networking.ModPacketHandler; -import com.cstav.genshinstrument.networking.buttonidentifiers.NoteButtonIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; import com.cstav.genshinstrument.networking.packets.instrument.InstrumentPacket; import com.cstav.genshinstrument.sound.NoteSound; import com.cstav.genshinstrument.util.CommonUtil; diff --git a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/NoteGridButton.java b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/NoteGridButton.java index f5737479..9d99e31c 100644 --- a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/NoteGridButton.java +++ b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/NoteGridButton.java @@ -2,7 +2,7 @@ import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.NoteButton; import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.label.NoteLabelSupplier; -import com.cstav.genshinstrument.networking.buttonidentifiers.NoteGridButtonIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteGridButtonIdentifier; import com.cstav.genshinstrument.sound.NoteSound; import net.minecraftforge.api.distmarker.Dist; diff --git a/src/main/java/com/cstav/genshinstrument/event/InstrumentPlayedEvent.java b/src/main/java/com/cstav/genshinstrument/event/InstrumentPlayedEvent.java index 4c7771e1..6875e27e 100644 --- a/src/main/java/com/cstav/genshinstrument/event/InstrumentPlayedEvent.java +++ b/src/main/java/com/cstav/genshinstrument/event/InstrumentPlayedEvent.java @@ -1,6 +1,6 @@ package com.cstav.genshinstrument.event; -import com.cstav.genshinstrument.networking.buttonidentifiers.NoteButtonIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; import com.cstav.genshinstrument.sound.NoteSound; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/cstav/genshinstrument/networking/ModPacketHandler.java b/src/main/java/com/cstav/genshinstrument/networking/ModPacketHandler.java index 29e8d37d..0985060d 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/ModPacketHandler.java +++ b/src/main/java/com/cstav/genshinstrument/networking/ModPacketHandler.java @@ -5,9 +5,9 @@ import org.slf4j.Logger; import com.cstav.genshinstrument.Main; -import com.cstav.genshinstrument.networking.buttonidentifiers.DrumNoteIdentifier; -import com.cstav.genshinstrument.networking.buttonidentifiers.NoteButtonIdentifier; -import com.cstav.genshinstrument.networking.buttonidentifiers.NoteGridButtonIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.DrumNoteIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteGridButtonIdentifier; import com.cstav.genshinstrument.networking.packets.instrument.CloseInstrumentPacket; import com.cstav.genshinstrument.networking.packets.instrument.InstrumentPacket; import com.cstav.genshinstrument.networking.packets.instrument.NotifyInstrumentOpenPacket; diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java new file mode 100644 index 00000000..c4696512 --- /dev/null +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java @@ -0,0 +1,43 @@ +package com.cstav.genshinstrument.networking.buttonidentifier; + +import com.cstav.genshinstrument.client.gui.screens.instrument.drum.DrumButtonType; +import com.cstav.genshinstrument.client.gui.screens.instrument.drum.DrumNoteButton; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public class DrumNoteIdentifier extends NoteButtonIdentifier { + + private DrumButtonType noteType; + private boolean isRight; + + @OnlyIn(Dist.CLIENT) + public DrumNoteIdentifier(final DrumNoteButton note) { + super(note); + noteType = note.btnType; + isRight = note.isRight; + } + + public DrumNoteIdentifier(FriendlyByteBuf buf) { + super(buf); + noteType = buf.readEnum(DrumButtonType.class); + isRight = buf.readBoolean(); + } + @Override + public void writeToNetwork(FriendlyByteBuf buf) { + super.writeToNetwork(buf); + buf.writeEnum(noteType); + buf.writeBoolean(isRight); + } + + @Override + public boolean matches(NoteButtonIdentifier other) { + return MatchType.forceMatch(other, this::drumMatch); + } + private boolean drumMatch(final DrumNoteIdentifier other) { + return (noteType == other.noteType) && (isRight == other.isRight); + } + + +} diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java new file mode 100644 index 00000000..e64ea40f --- /dev/null +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java @@ -0,0 +1,121 @@ +package com.cstav.genshinstrument.networking.buttonidentifier; + +import java.util.function.Function; + +import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.NoteButton; +import com.cstav.genshinstrument.networking.ModPacketHandler; +import com.cstav.genshinstrument.sound.NoteSound; +import com.mojang.logging.LogUtils; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +/** + *

+ * A class used for identifying {@link NoteButton note buttons} over network. + * By default, uses a button's {@link NoteSound} as an identifier + *

+ * All implementors must include a constructor that gets type {@link FriendlyByteBuf}. + */ +public class NoteButtonIdentifier { + + // Default implementation + //TODO: Seperate to DefaultNoteButtonIdentifier + // Then remove all unnecessary super calls from the chlidren + private NoteSound sound; + + public NoteButtonIdentifier(final NoteSound sound) { + this.sound = sound; + } + @OnlyIn(Dist.CLIENT) + public NoteButtonIdentifier(final NoteButton note) { + this(note.getSound()); + } + + public void setSound(NoteSound sound) { + this.sound = sound; + } + + + public boolean matches(NoteButtonIdentifier other) { + return other.sound.equals(sound); + } + + + + public NoteButtonIdentifier(final FriendlyByteBuf buf) { + sound = NoteSound.readFromNetwork(buf); + } + public void writeToNetwork(final FriendlyByteBuf buf) { + buf.writeUtf(getClass().getName()); + sound.writeToNetwork(buf); + } + + + + @Override + public boolean equals(Object other) { + if (other instanceof NoteButtonIdentifier) + return matches((NoteButtonIdentifier)other); + return false; + } + + + public static NoteButtonIdentifier readIdentifier(FriendlyByteBuf buf) { + try { + return ModPacketHandler.getValidIdentifier(buf.readUtf()) + .getDeclaredConstructor(FriendlyByteBuf.class).newInstance(buf); + } catch (Exception e) { + LogUtils.getLogger().error("Error initializing button identifier", e); + return null; + } + } + + + + /** + * A class holding methods to simplify the usage of the {@link NoteButtonIdentifier#matches matches} function + */ + public static abstract class MatchType { + /** + *

Executes match methods such that if the current {@code matchFunction} returned {@code false}, + * the {@code unmatchFunction} will execute in its stead.

+ * If the type of {@code other} and {@code T} do not match, then {@code unmatchFunction} will be executed. + * @param The type of the identifier to expect + * @param other + * @param matchFunction The function for when the type is as expected + * @param unmatchFunction The function for when the type is as unexpected (generic, {@link NoteButtonIdentifier}) + * @return The result of the identification process + */ + @SuppressWarnings("unchecked") + public static boolean hierarchyMatch(NoteButtonIdentifier other, + Function matchFunction, Function unmatchFunction) { + + try { + return matchFunction.apply((T)other) || unmatchFunction.apply(other); + } catch (ClassCastException e) { + return unmatchFunction.apply(other); + } + } + /** + * Executes the given match method such that if the expected type does not match {@code other}, + * {@code false} will be returned. + * @param The type of the identifier to expect + * @param other + * @param matchFunction The function for when the type is as expected + * @return The result of the identification process, or {@code false} if the expected type and {@code other}'s do not match + */ + @SuppressWarnings("unchecked") + public static boolean forceMatch(NoteButtonIdentifier other, + Function matchFunction) { + + try { + return matchFunction.apply((T)other); + } catch (ClassCastException e) { + return false; + } + } + } + +} diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java new file mode 100644 index 00000000..e9d544e8 --- /dev/null +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java @@ -0,0 +1,40 @@ +package com.cstav.genshinstrument.networking.buttonidentifier; + +import com.cstav.genshinstrument.client.gui.screens.instrument.partial.notegrid.NoteGridButton; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public class NoteGridButtonIdentifier extends NoteButtonIdentifier { + + private int row, column; + @OnlyIn(Dist.CLIENT) + public NoteGridButtonIdentifier(final NoteGridButton button) { + super(button); + this.row = button.row; + this.column = button.column; + } + + public NoteGridButtonIdentifier(FriendlyByteBuf buf) { + super(buf); + row = buf.readInt(); + column = buf.readInt(); + } + @Override + public void writeToNetwork(FriendlyByteBuf buf) { + super.writeToNetwork(buf); + buf.writeInt(row); + buf.writeInt(column); + } + + + @Override + public boolean matches(NoteButtonIdentifier other) { + return MatchType.forceMatch(other, this::gridMatch); + } + private boolean gridMatch(final NoteGridButtonIdentifier other) { + return (row == other.row) && (column == other.column); + } + +} \ No newline at end of file diff --git a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/InstrumentPacket.java b/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/InstrumentPacket.java index d7a6d3fd..bde5fed4 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/InstrumentPacket.java +++ b/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/InstrumentPacket.java @@ -4,7 +4,7 @@ import com.cstav.genshinstrument.capability.instrumentOpen.InstrumentOpen; import com.cstav.genshinstrument.networking.ModPacket; -import com.cstav.genshinstrument.networking.buttonidentifiers.NoteButtonIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; import com.cstav.genshinstrument.sound.NoteSound; import com.cstav.genshinstrument.util.ServerUtil; diff --git a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/PlayNotePacket.java b/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/PlayNotePacket.java index 6d9aa410..6a959886 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/PlayNotePacket.java +++ b/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/PlayNotePacket.java @@ -5,7 +5,7 @@ import java.util.function.Supplier; import com.cstav.genshinstrument.networking.ModPacket; -import com.cstav.genshinstrument.networking.buttonidentifiers.NoteButtonIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; import com.cstav.genshinstrument.sound.NoteSound; import net.minecraft.core.BlockPos; diff --git a/src/main/java/com/cstav/genshinstrument/sound/NoteSound.java b/src/main/java/com/cstav/genshinstrument/sound/NoteSound.java index d8c40271..7d3d9817 100644 --- a/src/main/java/com/cstav/genshinstrument/sound/NoteSound.java +++ b/src/main/java/com/cstav/genshinstrument/sound/NoteSound.java @@ -6,7 +6,7 @@ import com.cstav.genshinstrument.client.config.ModClientConfigs; import com.cstav.genshinstrument.client.config.enumType.InstrumentChannelType; import com.cstav.genshinstrument.event.InstrumentPlayedEvent; -import com.cstav.genshinstrument.networking.buttonidentifiers.NoteButtonIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.sounds.SimpleSoundInstance; diff --git a/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java b/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java index 555b5123..3b0d82ab 100644 --- a/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java +++ b/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java @@ -5,7 +5,7 @@ import com.cstav.genshinstrument.event.InstrumentPlayedEvent; import com.cstav.genshinstrument.networking.ModPacketHandler; -import com.cstav.genshinstrument.networking.buttonidentifiers.NoteButtonIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; import com.cstav.genshinstrument.networking.packets.instrument.PlayNotePacket; import com.cstav.genshinstrument.sound.NoteSound; From 659ccb20d1bc7179357264a76ee2cd3542974711 Mon Sep 17 00:00:00 2001 From: StavWasPlayZ Date: Tue, 18 Jul 2023 02:36:46 +0300 Subject: [PATCH 02/10] p2 --- .../buttonidentifiers/DrumNoteIdentifier.java | 43 ------- .../NoteButtonIdentifier.java | 119 ------------------ .../NoteGridButtonIdentifier.java | 40 ------ .../genshinstrument/sound/ModSounds.java | 2 +- .../assets/genshinstrument/sounds.json | 4 + .../sounds/glorious_drum/don.ogg | Bin 6831 -> 6950 bytes .../sounds/glorious_drum/ka.ogg | Bin 6324 -> 7248 bytes .../sounds/glorious_drum/ka.stereo.ogg | Bin 0 -> 9840 bytes 8 files changed, 5 insertions(+), 203 deletions(-) delete mode 100644 src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/DrumNoteIdentifier.java delete mode 100644 src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/NoteButtonIdentifier.java delete mode 100644 src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/NoteGridButtonIdentifier.java create mode 100644 src/main/resources/assets/genshinstrument/sounds/glorious_drum/ka.stereo.ogg diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/DrumNoteIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/DrumNoteIdentifier.java deleted file mode 100644 index bf0ccd79..00000000 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/DrumNoteIdentifier.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.cstav.genshinstrument.networking.buttonidentifiers; - -import com.cstav.genshinstrument.client.gui.screens.instrument.drum.DrumButtonType; -import com.cstav.genshinstrument.client.gui.screens.instrument.drum.DrumNoteButton; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -public class DrumNoteIdentifier extends NoteButtonIdentifier { - - private DrumButtonType noteType; - private boolean isRight; - - @OnlyIn(Dist.CLIENT) - public DrumNoteIdentifier(final DrumNoteButton note) { - super(note); - noteType = note.btnType; - isRight = note.isRight; - } - - public DrumNoteIdentifier(FriendlyByteBuf buf) { - super(buf); - noteType = buf.readEnum(DrumButtonType.class); - isRight = buf.readBoolean(); - } - @Override - public void writeToNetwork(FriendlyByteBuf buf) { - super.writeToNetwork(buf); - buf.writeEnum(noteType); - buf.writeBoolean(isRight); - } - - @Override - public boolean matches(NoteButtonIdentifier other) { - return MatchType.forceMatch(other, this::drumMatch); - } - private boolean drumMatch(final DrumNoteIdentifier other) { - return (noteType == other.noteType) && (isRight == other.isRight); - } - - -} diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/NoteButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/NoteButtonIdentifier.java deleted file mode 100644 index 80c4c6df..00000000 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/NoteButtonIdentifier.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.cstav.genshinstrument.networking.buttonidentifiers; - -import java.util.function.Function; - -import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.NoteButton; -import com.cstav.genshinstrument.networking.ModPacketHandler; -import com.cstav.genshinstrument.sound.NoteSound; -import com.mojang.logging.LogUtils; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -/** - *

- * A class used for identifying {@link NoteButton note buttons} over network. - * By default, uses a button's {@link NoteSound} as an identifier - *

- * All implementors must include a constructor that gets type {@link FriendlyByteBuf}. - */ -public class NoteButtonIdentifier { - - // Default implementation - private NoteSound sound; - - public NoteButtonIdentifier(final NoteSound sound) { - this.sound = sound; - } - @OnlyIn(Dist.CLIENT) - public NoteButtonIdentifier(final NoteButton note) { - this(note.getSound()); - } - - public void setSound(NoteSound sound) { - this.sound = sound; - } - - - public boolean matches(NoteButtonIdentifier other) { - return other.sound.equals(sound); - } - - - - public NoteButtonIdentifier(final FriendlyByteBuf buf) { - sound = NoteSound.readFromNetwork(buf); - } - public void writeToNetwork(final FriendlyByteBuf buf) { - buf.writeUtf(getClass().getName()); - sound.writeToNetwork(buf); - } - - - - @Override - public boolean equals(Object other) { - if (other instanceof NoteButtonIdentifier) - return matches((NoteButtonIdentifier)other); - return false; - } - - - public static NoteButtonIdentifier readIdentifier(FriendlyByteBuf buf) { - try { - return ModPacketHandler.getValidIdentifier(buf.readUtf()) - .getDeclaredConstructor(FriendlyByteBuf.class).newInstance(buf); - } catch (Exception e) { - LogUtils.getLogger().error("Error initializing button identifier", e); - return null; - } - } - - - - /** - * A class holding methods to simplify the usage of the {@link NoteButtonIdentifier#matches matches} function - */ - public static abstract class MatchType { - /** - *

Executes match methods such that if the current {@code matchFunction} returned {@code false}, - * the {@code unmatchFunction} will execute in its stead.

- * If the type of {@code other} and {@code T} do not match, then {@code unmatchFunction} will be executed. - * @param The type of the identifier to expect - * @param other - * @param matchFunction The function for when the type is as expected - * @param unmatchFunction The function for when the type is as unexpected (generic, {@link NoteButtonIdentifier}) - * @return The result of the identification process - */ - @SuppressWarnings("unchecked") - public static boolean hierarchyMatch(NoteButtonIdentifier other, - Function matchFunction, Function unmatchFunction) { - - try { - return matchFunction.apply((T)other) || unmatchFunction.apply(other); - } catch (ClassCastException e) { - return unmatchFunction.apply(other); - } - } - /** - * Executes the given match method such that if the expected type does not match {@code other}, - * {@code false} will be returned. - * @param The type of the identifier to expect - * @param other - * @param matchFunction The function for when the type is as expected - * @return The result of the identification process, or false if the expected type and {@code other}'s do not match - */ - @SuppressWarnings("unchecked") - public static boolean forceMatch(NoteButtonIdentifier other, - Function matchFunction) { - - try { - return matchFunction.apply((T)other); - } catch (ClassCastException e) { - return false; - } - } - } - -} diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/NoteGridButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/NoteGridButtonIdentifier.java deleted file mode 100644 index 1735e971..00000000 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifiers/NoteGridButtonIdentifier.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.cstav.genshinstrument.networking.buttonidentifiers; - -import com.cstav.genshinstrument.client.gui.screens.instrument.partial.notegrid.NoteGridButton; - -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - -public class NoteGridButtonIdentifier extends NoteButtonIdentifier { - - private int row, column; - @OnlyIn(Dist.CLIENT) - public NoteGridButtonIdentifier(final NoteGridButton button) { - super(button); - this.row = button.row; - this.column = button.column; - } - - public NoteGridButtonIdentifier(FriendlyByteBuf buf) { - super(buf); - row = buf.readInt(); - column = buf.readInt(); - } - @Override - public void writeToNetwork(FriendlyByteBuf buf) { - super.writeToNetwork(buf); - buf.writeInt(row); - buf.writeInt(column); - } - - - @Override - public boolean matches(NoteButtonIdentifier other) { - return MatchType.forceMatch(other, this::gridMatch); - } - private boolean gridMatch(final NoteGridButtonIdentifier other) { - return (row == other.row) && (column == other.column); - } - -} \ No newline at end of file diff --git a/src/main/java/com/cstav/genshinstrument/sound/ModSounds.java b/src/main/java/com/cstav/genshinstrument/sound/ModSounds.java index d0dc9a02..b7a19ebe 100644 --- a/src/main/java/com/cstav/genshinstrument/sound/ModSounds.java +++ b/src/main/java/com/cstav/genshinstrument/sound/ModSounds.java @@ -28,7 +28,7 @@ public static void register(final IEventBus bus) { GLORIOUS_DRUM = new NoteSound[] { registerNote(SOUNDS, loc("glorious_drum_don")), - registerNote(SOUNDS, loc("glorious_drum_ka")) + registerNote(SOUNDS, loc("glorious_drum_ka"), true) } ; diff --git a/src/main/resources/assets/genshinstrument/sounds.json b/src/main/resources/assets/genshinstrument/sounds.json index dd9a88d5..3b9d3b27 100644 --- a/src/main/resources/assets/genshinstrument/sounds.json +++ b/src/main/resources/assets/genshinstrument/sounds.json @@ -434,5 +434,9 @@ "glorious_drum_ka": { "category": "record", "sounds": ["genshinstrument:glorious_drum/ka"] + }, + "glorious_drum_ka_stereo": { + "category": "record", + "sounds": ["genshinstrument:glorious_drum/ka.stereo"] } } \ No newline at end of file diff --git a/src/main/resources/assets/genshinstrument/sounds/glorious_drum/don.ogg b/src/main/resources/assets/genshinstrument/sounds/glorious_drum/don.ogg index 5c41642e5debd7ba56f16e3b92a2be4ffd2f952a..3a5c1060a674daff3c9165480feb3836e11d542d 100644 GIT binary patch literal 6950 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 literal 6831 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 D4>-eh literal 6324 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 Date: Tue, 18 Jul 2023 02:39:37 +0300 Subject: [PATCH 03/10] Fix packet package name --- .../instrument/partial/AbstractInstrumentScreen.java | 2 +- .../screens/instrument/partial/note/NoteButton.java | 2 +- .../criteria/InstrumentPlayedTrigger.java | 2 +- .../com/cstav/genshinstrument/item/InstrumentItem.java | 4 ++-- .../genshinstrument/networking/ModPacketHandler.java | 10 +++++----- .../instrument/CloseInstrumentPacket.java | 2 +- .../instrument/InstrumentPacket.java | 2 +- .../instrument/NotifyInstrumentOpenPacket.java | 2 +- .../instrument/OpenInstrumentPacket.java | 2 +- .../{packets => packet}/instrument/PlayNotePacket.java | 2 +- .../com/cstav/genshinstrument/util/ServerUtil.java | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) rename src/main/java/com/cstav/genshinstrument/networking/{packets => packet}/instrument/CloseInstrumentPacket.java (95%) rename src/main/java/com/cstav/genshinstrument/networking/{packets => packet}/instrument/InstrumentPacket.java (97%) rename src/main/java/com/cstav/genshinstrument/networking/{packets => packet}/instrument/NotifyInstrumentOpenPacket.java (95%) rename src/main/java/com/cstav/genshinstrument/networking/{packets => packet}/instrument/OpenInstrumentPacket.java (97%) rename src/main/java/com/cstav/genshinstrument/networking/{packets => packet}/instrument/PlayNotePacket.java (97%) diff --git a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/AbstractInstrumentScreen.java b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/AbstractInstrumentScreen.java index c3de3b97..a67d5313 100644 --- a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/AbstractInstrumentScreen.java +++ b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/AbstractInstrumentScreen.java @@ -7,7 +7,7 @@ import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.NoteButton; import com.cstav.genshinstrument.client.gui.screens.options.instrument.AbstractInstrumentOptionsScreen; import com.cstav.genshinstrument.networking.ModPacketHandler; -import com.cstav.genshinstrument.networking.packets.instrument.CloseInstrumentPacket; +import com.cstav.genshinstrument.networking.packet.instrument.CloseInstrumentPacket; import com.cstav.genshinstrument.sound.NoteSound; import com.mojang.blaze3d.platform.InputConstants.Key; import com.mojang.blaze3d.platform.InputConstants.Type; diff --git a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java index c1dbbd26..b7aa41a5 100644 --- a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java +++ b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java @@ -12,7 +12,7 @@ import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.label.NoteLabelSupplier; import com.cstav.genshinstrument.networking.ModPacketHandler; import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; -import com.cstav.genshinstrument.networking.packets.instrument.InstrumentPacket; +import com.cstav.genshinstrument.networking.packet.instrument.InstrumentPacket; import com.cstav.genshinstrument.sound.NoteSound; import com.cstav.genshinstrument.util.CommonUtil; import com.mojang.blaze3d.systems.RenderSystem; diff --git a/src/main/java/com/cstav/genshinstrument/criteria/InstrumentPlayedTrigger.java b/src/main/java/com/cstav/genshinstrument/criteria/InstrumentPlayedTrigger.java index 0b4f46a0..eb51a2e4 100644 --- a/src/main/java/com/cstav/genshinstrument/criteria/InstrumentPlayedTrigger.java +++ b/src/main/java/com/cstav/genshinstrument/criteria/InstrumentPlayedTrigger.java @@ -1,6 +1,6 @@ package com.cstav.genshinstrument.criteria; -import com.cstav.genshinstrument.networking.packets.instrument.InstrumentPacket; +import com.cstav.genshinstrument.networking.packet.instrument.InstrumentPacket; import com.google.gson.JsonObject; import net.minecraft.advancements.critereon.AbstractCriterionTriggerInstance; diff --git a/src/main/java/com/cstav/genshinstrument/item/InstrumentItem.java b/src/main/java/com/cstav/genshinstrument/item/InstrumentItem.java index 6513f579..76ec4071 100644 --- a/src/main/java/com/cstav/genshinstrument/item/InstrumentItem.java +++ b/src/main/java/com/cstav/genshinstrument/item/InstrumentItem.java @@ -6,8 +6,8 @@ import com.cstav.genshinstrument.client.gui.screens.instrument.partial.AbstractInstrumentScreen; import com.cstav.genshinstrument.item.clientExtensions.ClientInstrumentItem; import com.cstav.genshinstrument.networking.ModPacketHandler; -import com.cstav.genshinstrument.networking.packets.instrument.NotifyInstrumentOpenPacket; -import com.cstav.genshinstrument.networking.packets.instrument.OpenInstrumentPacket; +import com.cstav.genshinstrument.networking.packet.instrument.NotifyInstrumentOpenPacket; +import com.cstav.genshinstrument.networking.packet.instrument.OpenInstrumentPacket; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; diff --git a/src/main/java/com/cstav/genshinstrument/networking/ModPacketHandler.java b/src/main/java/com/cstav/genshinstrument/networking/ModPacketHandler.java index 0985060d..9ee840b0 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/ModPacketHandler.java +++ b/src/main/java/com/cstav/genshinstrument/networking/ModPacketHandler.java @@ -8,11 +8,11 @@ import com.cstav.genshinstrument.networking.buttonidentifier.DrumNoteIdentifier; import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; import com.cstav.genshinstrument.networking.buttonidentifier.NoteGridButtonIdentifier; -import com.cstav.genshinstrument.networking.packets.instrument.CloseInstrumentPacket; -import com.cstav.genshinstrument.networking.packets.instrument.InstrumentPacket; -import com.cstav.genshinstrument.networking.packets.instrument.NotifyInstrumentOpenPacket; -import com.cstav.genshinstrument.networking.packets.instrument.OpenInstrumentPacket; -import com.cstav.genshinstrument.networking.packets.instrument.PlayNotePacket; +import com.cstav.genshinstrument.networking.packet.instrument.CloseInstrumentPacket; +import com.cstav.genshinstrument.networking.packet.instrument.InstrumentPacket; +import com.cstav.genshinstrument.networking.packet.instrument.NotifyInstrumentOpenPacket; +import com.cstav.genshinstrument.networking.packet.instrument.OpenInstrumentPacket; +import com.cstav.genshinstrument.networking.packet.instrument.PlayNotePacket; import com.cstav.genshinstrument.util.ServerUtil; import com.mojang.logging.LogUtils; diff --git a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/CloseInstrumentPacket.java b/src/main/java/com/cstav/genshinstrument/networking/packet/instrument/CloseInstrumentPacket.java similarity index 95% rename from src/main/java/com/cstav/genshinstrument/networking/packets/instrument/CloseInstrumentPacket.java rename to src/main/java/com/cstav/genshinstrument/networking/packet/instrument/CloseInstrumentPacket.java index c98a27ce..13b75811 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/CloseInstrumentPacket.java +++ b/src/main/java/com/cstav/genshinstrument/networking/packet/instrument/CloseInstrumentPacket.java @@ -1,4 +1,4 @@ -package com.cstav.genshinstrument.networking.packets.instrument; +package com.cstav.genshinstrument.networking.packet.instrument; import java.util.function.Supplier; diff --git a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/InstrumentPacket.java b/src/main/java/com/cstav/genshinstrument/networking/packet/instrument/InstrumentPacket.java similarity index 97% rename from src/main/java/com/cstav/genshinstrument/networking/packets/instrument/InstrumentPacket.java rename to src/main/java/com/cstav/genshinstrument/networking/packet/instrument/InstrumentPacket.java index bde5fed4..0c6d5f31 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/InstrumentPacket.java +++ b/src/main/java/com/cstav/genshinstrument/networking/packet/instrument/InstrumentPacket.java @@ -1,4 +1,4 @@ -package com.cstav.genshinstrument.networking.packets.instrument; +package com.cstav.genshinstrument.networking.packet.instrument; import java.util.function.Supplier; diff --git a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/NotifyInstrumentOpenPacket.java b/src/main/java/com/cstav/genshinstrument/networking/packet/instrument/NotifyInstrumentOpenPacket.java similarity index 95% rename from src/main/java/com/cstav/genshinstrument/networking/packets/instrument/NotifyInstrumentOpenPacket.java rename to src/main/java/com/cstav/genshinstrument/networking/packet/instrument/NotifyInstrumentOpenPacket.java index 1eeaadf7..b69482f1 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/NotifyInstrumentOpenPacket.java +++ b/src/main/java/com/cstav/genshinstrument/networking/packet/instrument/NotifyInstrumentOpenPacket.java @@ -1,4 +1,4 @@ -package com.cstav.genshinstrument.networking.packets.instrument; +package com.cstav.genshinstrument.networking.packet.instrument; import java.util.UUID; import java.util.function.Supplier; diff --git a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/OpenInstrumentPacket.java b/src/main/java/com/cstav/genshinstrument/networking/packet/instrument/OpenInstrumentPacket.java similarity index 97% rename from src/main/java/com/cstav/genshinstrument/networking/packets/instrument/OpenInstrumentPacket.java rename to src/main/java/com/cstav/genshinstrument/networking/packet/instrument/OpenInstrumentPacket.java index a3372dc9..e0d23e46 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/OpenInstrumentPacket.java +++ b/src/main/java/com/cstav/genshinstrument/networking/packet/instrument/OpenInstrumentPacket.java @@ -1,4 +1,4 @@ -package com.cstav.genshinstrument.networking.packets.instrument; +package com.cstav.genshinstrument.networking.packet.instrument; import java.util.Map; import java.util.function.Function; diff --git a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/PlayNotePacket.java b/src/main/java/com/cstav/genshinstrument/networking/packet/instrument/PlayNotePacket.java similarity index 97% rename from src/main/java/com/cstav/genshinstrument/networking/packets/instrument/PlayNotePacket.java rename to src/main/java/com/cstav/genshinstrument/networking/packet/instrument/PlayNotePacket.java index 6a959886..39128e0a 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/packets/instrument/PlayNotePacket.java +++ b/src/main/java/com/cstav/genshinstrument/networking/packet/instrument/PlayNotePacket.java @@ -1,4 +1,4 @@ -package com.cstav.genshinstrument.networking.packets.instrument; +package com.cstav.genshinstrument.networking.packet.instrument; import java.util.Optional; import java.util.UUID; diff --git a/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java b/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java index 3b0d82ab..3c60e0b2 100644 --- a/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java +++ b/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java @@ -6,7 +6,7 @@ import com.cstav.genshinstrument.event.InstrumentPlayedEvent; import com.cstav.genshinstrument.networking.ModPacketHandler; import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; -import com.cstav.genshinstrument.networking.packets.instrument.PlayNotePacket; +import com.cstav.genshinstrument.networking.packet.instrument.PlayNotePacket; import com.cstav.genshinstrument.sound.NoteSound; import net.minecraft.core.BlockPos; From f68c7c898713a0ccf6035bf5ada539c56a4a84bd Mon Sep 17 00:00:00 2001 From: StavWasPlayZ Date: Tue, 18 Jul 2023 02:52:11 +0300 Subject: [PATCH 04/10] Seperated default identifier to an abstract one --- .../instrument/partial/note/NoteButton.java | 8 +++- .../DefaultNoteButtonIdentifier.java | 36 +++++++++++++++++ .../buttonidentifier/DrumNoteIdentifier.java | 2 - .../NoteButtonIdentifier.java | 39 ++----------------- .../NoteGridButtonIdentifier.java | 2 - .../genshinstrument/util/ServerUtil.java | 5 ++- 6 files changed, 49 insertions(+), 43 deletions(-) create mode 100644 src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java diff --git a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java index b7aa41a5..d5f8b104 100644 --- a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java +++ b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/note/NoteButton.java @@ -11,6 +11,7 @@ import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.animation.NoteAnimationController; import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.label.NoteLabelSupplier; import com.cstav.genshinstrument.networking.ModPacketHandler; +import com.cstav.genshinstrument.networking.buttonidentifier.DefaultNoteButtonIdentifier; import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; import com.cstav.genshinstrument.networking.packet.instrument.InstrumentPacket; import com.cstav.genshinstrument.sound.NoteSound; @@ -61,7 +62,7 @@ public static int getSize() { * You may use the {@link DefaultNoteButtonIdentifier default implementation} if you're too lazy. */ public NoteButtonIdentifier getIdentifier() { - return new NoteButtonIdentifier(getSound()); + return new DefaultNoteButtonIdentifier(getSound()); } @@ -125,7 +126,10 @@ public NoteSound getSound() { } public void setSound(NoteSound sound) { this.sound = sound; - getIdentifier().setSound(sound); + + // Update the sound for the sound (default) identifier + if (getIdentifier() instanceof DefaultNoteButtonIdentifier) + ((DefaultNoteButtonIdentifier)getIdentifier()).setSound(sound); } diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java new file mode 100644 index 00000000..d6a404f9 --- /dev/null +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java @@ -0,0 +1,36 @@ +package com.cstav.genshinstrument.networking.buttonidentifier; + +import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.NoteButton; +import com.cstav.genshinstrument.sound.NoteSound; + +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +/** + * The default note button identifier. Uses a button's {@link NoteSound} as an identifier. + */ +public class DefaultNoteButtonIdentifier extends NoteButtonIdentifier { + + private NoteSound sound; + + public DefaultNoteButtonIdentifier(final NoteSound sound) { + this.sound = sound; + } + @OnlyIn(Dist.CLIENT) + public DefaultNoteButtonIdentifier(final NoteButton note) { + this(note.getSound()); + } + + public void setSound(NoteSound sound) { + this.sound = sound; + } + + + public boolean matches(NoteButtonIdentifier other) { + return MatchType.forceMatch(other, this::matchSound); + } + private boolean matchSound(final DefaultNoteButtonIdentifier other) { + return other.sound.equals(sound); + } + +} diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java index c4696512..b8607a86 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java @@ -14,13 +14,11 @@ public class DrumNoteIdentifier extends NoteButtonIdentifier { @OnlyIn(Dist.CLIENT) public DrumNoteIdentifier(final DrumNoteButton note) { - super(note); noteType = note.btnType; isRight = note.isRight; } public DrumNoteIdentifier(FriendlyByteBuf buf) { - super(buf); noteType = buf.readEnum(DrumButtonType.class); isRight = buf.readBoolean(); } diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java index e64ea40f..4c32443a 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java @@ -4,55 +4,24 @@ import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.NoteButton; import com.cstav.genshinstrument.networking.ModPacketHandler; -import com.cstav.genshinstrument.sound.NoteSound; import com.mojang.logging.LogUtils; import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; /** *

* A class used for identifying {@link NoteButton note buttons} over network. - * By default, uses a button's {@link NoteSound} as an identifier *

- * All implementors must include a constructor that gets type {@link FriendlyByteBuf}. + * All implementors must include a constructor that gets a type {@link FriendlyByteBuf}. */ -public class NoteButtonIdentifier { +public abstract class NoteButtonIdentifier { - // Default implementation - //TODO: Seperate to DefaultNoteButtonIdentifier - // Then remove all unnecessary super calls from the chlidren - private NoteSound sound; - - public NoteButtonIdentifier(final NoteSound sound) { - this.sound = sound; - } - @OnlyIn(Dist.CLIENT) - public NoteButtonIdentifier(final NoteButton note) { - this(note.getSound()); - } - - public void setSound(NoteSound sound) { - this.sound = sound; - } - - - public boolean matches(NoteButtonIdentifier other) { - return other.sound.equals(sound); - } - - - - public NoteButtonIdentifier(final FriendlyByteBuf buf) { - sound = NoteSound.readFromNetwork(buf); - } public void writeToNetwork(final FriendlyByteBuf buf) { buf.writeUtf(getClass().getName()); - sound.writeToNetwork(buf); } - + public abstract boolean matches(NoteButtonIdentifier other); + @Override public boolean equals(Object other) { diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java index e9d544e8..7ec2123e 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java @@ -11,13 +11,11 @@ public class NoteGridButtonIdentifier extends NoteButtonIdentifier { private int row, column; @OnlyIn(Dist.CLIENT) public NoteGridButtonIdentifier(final NoteGridButton button) { - super(button); this.row = button.row; this.column = button.column; } public NoteGridButtonIdentifier(FriendlyByteBuf buf) { - super(buf); row = buf.readInt(); column = buf.readInt(); } diff --git a/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java b/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java index 3c60e0b2..2a682175 100644 --- a/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java +++ b/src/main/java/com/cstav/genshinstrument/util/ServerUtil.java @@ -5,6 +5,7 @@ import com.cstav.genshinstrument.event.InstrumentPlayedEvent; import com.cstav.genshinstrument.networking.ModPacketHandler; +import com.cstav.genshinstrument.networking.buttonidentifier.DefaultNoteButtonIdentifier; import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; import com.cstav.genshinstrument.networking.packet.instrument.PlayNotePacket; import com.cstav.genshinstrument.sound.NoteSound; @@ -38,7 +39,7 @@ public class ServerUtil { public static void sendPlayNotePackets(ServerPlayer player, InteractionHand hand, NoteSound sound, ResourceLocation instrumentId, float pitch) { - sendPlayNotePackets(player, hand, sound, instrumentId, new NoteButtonIdentifier(sound), pitch); + sendPlayNotePackets(player, hand, sound, instrumentId, new DefaultNoteButtonIdentifier(sound), pitch); } /** * Sends {@link PlayNotePacket}s in the specified {@link ServerUtil#PLAY_DISTANCE}. @@ -85,7 +86,7 @@ public static void sendPlayNotePackets(ServerPlayer player, InteractionHand hand * @param pitch The pitch of the sound to initiate */ public static void sendPlayNotePackets(Level level, BlockPos pos, NoteSound sound, ResourceLocation instrumentId, float pitch) { - sendPlayNotePackets(level, pos, sound, instrumentId, new NoteButtonIdentifier(sound), pitch); + sendPlayNotePackets(level, pos, sound, instrumentId, new DefaultNoteButtonIdentifier(sound), pitch); } /** * Sends {@link PlayNotePacket}s in the specified {@link ServerUtil#PLAY_DISTANCE}. From 4a9d0b32b85974fc1cc07cb8196530b98f9052a8 Mon Sep 17 00:00:00 2001 From: StavWasPlayZ Date: Tue, 18 Jul 2023 03:02:25 +0300 Subject: [PATCH 05/10] Identifiers now derive from the default --- .../DefaultNoteButtonIdentifier.java | 14 ++++++++++++++ .../buttonidentifier/DrumNoteIdentifier.java | 6 ++++-- .../buttonidentifier/NoteButtonIdentifier.java | 4 ++++ .../buttonidentifier/NoteGridButtonIdentifier.java | 6 ++++-- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java index d6a404f9..0218631d 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java @@ -3,6 +3,7 @@ import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.NoteButton; import com.cstav.genshinstrument.sound.NoteSound; +import net.minecraft.network.FriendlyByteBuf; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -26,6 +27,19 @@ public void setSound(NoteSound sound) { } + public DefaultNoteButtonIdentifier(final FriendlyByteBuf buf) { + sound = NoteSound.readFromNetwork(buf); + } + + @Override + public void writeToNetwork(FriendlyByteBuf buf) { + super.writeToNetwork(buf); + sound.writeToNetwork(buf); + } + + + + public boolean matches(NoteButtonIdentifier other) { return MatchType.forceMatch(other, this::matchSound); } diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java index b8607a86..db315727 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java @@ -7,18 +7,20 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -public class DrumNoteIdentifier extends NoteButtonIdentifier { +public class DrumNoteIdentifier extends DefaultNoteButtonIdentifier { private DrumButtonType noteType; private boolean isRight; @OnlyIn(Dist.CLIENT) public DrumNoteIdentifier(final DrumNoteButton note) { + super(note); noteType = note.btnType; isRight = note.isRight; } public DrumNoteIdentifier(FriendlyByteBuf buf) { + super(buf); noteType = buf.readEnum(DrumButtonType.class); isRight = buf.readBoolean(); } @@ -31,7 +33,7 @@ public void writeToNetwork(FriendlyByteBuf buf) { @Override public boolean matches(NoteButtonIdentifier other) { - return MatchType.forceMatch(other, this::drumMatch); + return MatchType.hierarchyMatch(other, this::drumMatch, super::matches); } private boolean drumMatch(final DrumNoteIdentifier other) { return (noteType == other.noteType) && (isRight == other.isRight); diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java index 4c32443a..77ed226f 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java @@ -45,6 +45,10 @@ public static NoteButtonIdentifier readIdentifier(FriendlyByteBuf buf) { /** * A class holding methods to simplify the usage of the {@link NoteButtonIdentifier#matches matches} function + * + * @apiNote It is mostly always recommended to use a {@link MatchType#hierarchyMatch hierarchy match} + * (with the {@link DefaultNoteButtonIdentifier default identifier} as a basis), because a lower type of + * identifier may be triggered as a result of 3rd-party initiation of notes. */ public static abstract class MatchType { /** diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java index 7ec2123e..45f14370 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java @@ -6,16 +6,18 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -public class NoteGridButtonIdentifier extends NoteButtonIdentifier { +public class NoteGridButtonIdentifier extends DefaultNoteButtonIdentifier { private int row, column; @OnlyIn(Dist.CLIENT) public NoteGridButtonIdentifier(final NoteGridButton button) { + super(button); this.row = button.row; this.column = button.column; } public NoteGridButtonIdentifier(FriendlyByteBuf buf) { + super(buf); row = buf.readInt(); column = buf.readInt(); } @@ -29,7 +31,7 @@ public void writeToNetwork(FriendlyByteBuf buf) { @Override public boolean matches(NoteButtonIdentifier other) { - return MatchType.forceMatch(other, this::gridMatch); + return MatchType.hierarchyMatch(other, this::gridMatch, super::matches); } private boolean gridMatch(final NoteGridButtonIdentifier other) { return (row == other.row) && (column == other.column); From 1057e53f87a1f3d96f0421a84fa34a88b7cd4f6e Mon Sep 17 00:00:00 2001 From: StavWasPlayZ Date: Tue, 18 Jul 2023 03:21:36 +0300 Subject: [PATCH 06/10] Add match type to adjust for the drum --- .../DefaultNoteButtonIdentifier.java | 4 +- .../buttonidentifier/DrumNoteIdentifier.java | 2 +- .../NoteButtonIdentifier.java | 37 +++++++++++++++---- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java index 0218631d..08e2354a 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DefaultNoteButtonIdentifier.java @@ -30,7 +30,7 @@ public void setSound(NoteSound sound) { public DefaultNoteButtonIdentifier(final FriendlyByteBuf buf) { sound = NoteSound.readFromNetwork(buf); } - + @Override public void writeToNetwork(FriendlyByteBuf buf) { super.writeToNetwork(buf); @@ -38,8 +38,6 @@ public void writeToNetwork(FriendlyByteBuf buf) { } - - public boolean matches(NoteButtonIdentifier other) { return MatchType.forceMatch(other, this::matchSound); } diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java index db315727..3a6cf2d9 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java @@ -33,7 +33,7 @@ public void writeToNetwork(FriendlyByteBuf buf) { @Override public boolean matches(NoteButtonIdentifier other) { - return MatchType.hierarchyMatch(other, this::drumMatch, super::matches); + return MatchType.perferMatch(other, this::drumMatch, super::matches); } private boolean drumMatch(final DrumNoteIdentifier other) { return (noteType == other.noteType) && (isRight == other.isRight); diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java index 77ed226f..a5f0828f 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java @@ -45,20 +45,16 @@ public static NoteButtonIdentifier readIdentifier(FriendlyByteBuf buf) { /** * A class holding methods to simplify the usage of the {@link NoteButtonIdentifier#matches matches} function - * - * @apiNote It is mostly always recommended to use a {@link MatchType#hierarchyMatch hierarchy match} - * (with the {@link DefaultNoteButtonIdentifier default identifier} as a basis), because a lower type of - * identifier may be triggered as a result of 3rd-party initiation of notes. */ public static abstract class MatchType { /** - *

Executes match methods such that if the current {@code matchFunction} returned {@code false}, + *

Executes the match methods such that if the current {@code matchFunction} returned {@code false}, * the {@code unmatchFunction} will execute in its stead.

* If the type of {@code other} and {@code T} do not match, then {@code unmatchFunction} will be executed. * @param The type of the identifier to expect * @param other * @param matchFunction The function for when the type is as expected - * @param unmatchFunction The function for when the type is as unexpected (generic, {@link NoteButtonIdentifier}) + * @param unmatchFunction The function for when the type is unexpected (generic, {@link NoteButtonIdentifier}) * @return The result of the identification process */ @SuppressWarnings("unchecked") @@ -71,13 +67,40 @@ public static boolean hierarchyMatch(NoteButton return unmatchFunction.apply(other); } } + /** + *

Executes the match methods such that only that if {@code other} did not match the type of {@code matchFunction}, + * the {@code unmatchFunction} will execute in its stead.

+ * @param The type of the identifier to expect + * @param other + * @param matchFunction The function for when the type is as expected + * @param unmatchFunction The function for when the type is unexpected (generic, {@link NoteButtonIdentifier}) + * @return The result of the identification process + */ + @SuppressWarnings("unchecked") + public static boolean perferMatch(NoteButtonIdentifier other, + Function matchFunction, Function unmatchFunction) { + + try { + return matchFunction.apply((T)other); + } catch (ClassCastException e) { + return unmatchFunction.apply(other); + } + } + /** * Executes the given match method such that if the expected type does not match {@code other}, * {@code false} will be returned. * @param The type of the identifier to expect * @param other * @param matchFunction The function for when the type is as expected - * @return The result of the identification process, or {@code false} if the expected type and {@code other}'s do not match + * @return The result of the identification process, or {@code false} if the expected type does not match + * + * + * @apiNote It is generally recommended not to use this match method, + * because a lower type of identifier may be triggered as a result of 3rd-party initiation of notes. + * + * Implementors should instead consider using any of the other types + * with {@link DefaultNoteButtonIdentifier the default identifier} as their basis. */ @SuppressWarnings("unchecked") public static boolean forceMatch(NoteButtonIdentifier other, From c6e5df0610403516c2347efa7ebb60d8b66b9ccd Mon Sep 17 00:00:00 2001 From: StavWasPlayZ Date: Tue, 18 Jul 2023 03:24:59 +0300 Subject: [PATCH 07/10] Update grid identifier to use perfer match type --- .../networking/buttonidentifier/NoteGridButtonIdentifier.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java index 45f14370..85112b9a 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java @@ -31,7 +31,7 @@ public void writeToNetwork(FriendlyByteBuf buf) { @Override public boolean matches(NoteButtonIdentifier other) { - return MatchType.hierarchyMatch(other, this::gridMatch, super::matches); + return MatchType.perferMatch(other, this::gridMatch, super::matches); } private boolean gridMatch(final NoteGridButtonIdentifier other) { return (row == other.row) && (column == other.column); From 07382b2644166c011cc4ad03beea1706cba06b67 Mon Sep 17 00:00:00 2001 From: StavWasPlayZ Date: Tue, 18 Jul 2023 04:20:59 +0300 Subject: [PATCH 08/10] Optimized lookup method of grid instruments --- .../partial/AbstractInstrumentScreen.java | 13 +++++++++ .../AbstractGridInstrumentScreen.java | 29 +++++++++++++++++++ .../instrument/partial/notegrid/NoteGrid.java | 2 +- .../genshinstrument/event/ClientEvents.java | 9 ++---- .../buttonidentifier/DrumNoteIdentifier.java | 4 +-- .../NoteButtonIdentifier.java | 4 +-- .../NoteGridButtonIdentifier.java | 2 +- 7 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/AbstractInstrumentScreen.java b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/AbstractInstrumentScreen.java index a67d5313..0608c414 100644 --- a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/AbstractInstrumentScreen.java +++ b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/AbstractInstrumentScreen.java @@ -1,12 +1,14 @@ package com.cstav.genshinstrument.client.gui.screens.instrument.partial; import java.util.Map; +import java.util.NoSuchElementException; import com.cstav.genshinstrument.capability.instrumentOpen.InstrumentOpenProvider; import com.cstav.genshinstrument.client.config.ModClientConfigs; import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.NoteButton; import com.cstav.genshinstrument.client.gui.screens.options.instrument.AbstractInstrumentOptionsScreen; import com.cstav.genshinstrument.networking.ModPacketHandler; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; import com.cstav.genshinstrument.networking.packet.instrument.CloseInstrumentPacket; import com.cstav.genshinstrument.sound.NoteSound; import com.mojang.blaze3d.platform.InputConstants.Key; @@ -69,6 +71,17 @@ protected static final InstrumentThemeLoader initThemeLoader(String modId, Strin */ public abstract NoteSound[] getSounds(); + /** + * @return The first {@link NoteButton} that matches the description of the given identifier + */ + public NoteButton getNoteButton(final NoteButtonIdentifier noteIdentifier) throws NoSuchElementException { + for (NoteButton note : notesIterable()) + if (note.getIdentifier().matches(noteIdentifier)) + return note; + + throw new NoSuchElementException("Could not find a note in "+getClass().getSimpleName()+" based on the given identifier"); + } + /** * @return A map holding an integer key as its keycode and a {@link NoteButton} as its value. */ diff --git a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/AbstractGridInstrumentScreen.java b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/AbstractGridInstrumentScreen.java index 9f480123..ce6612f6 100644 --- a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/AbstractGridInstrumentScreen.java +++ b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/AbstractGridInstrumentScreen.java @@ -1,6 +1,7 @@ package com.cstav.genshinstrument.client.gui.screens.instrument.partial.notegrid; import java.util.Map; +import java.util.NoSuchElementException; import com.cstav.genshinstrument.Main; import com.cstav.genshinstrument.client.config.ModClientConfigs; @@ -9,6 +10,8 @@ import com.cstav.genshinstrument.client.gui.screens.options.instrument.AbstractInstrumentOptionsScreen; import com.cstav.genshinstrument.client.gui.screens.options.instrument.GridInstrumentOptionsScreen; import com.cstav.genshinstrument.client.keyMaps.KeyMappings; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteButtonIdentifier; +import com.cstav.genshinstrument.networking.buttonidentifier.NoteGridButtonIdentifier; import com.mojang.blaze3d.platform.InputConstants.Key; import net.minecraft.client.gui.GuiGraphics; @@ -37,6 +40,32 @@ public int rows() { return DEF_ROWS; } + + /** + *

+ * If the given identifier is of type {@link NoteGridButtonIdentifier}, + * uses the optimal method to obtain the described {@link NoteButton}. + *

+ * Otherwise, uses {@link AbstractInstrumentScreen#getNoteButton the regular linear method}. + * @return The {@link NoteButton} as described by the given identifier + */ + @Override + public NoteButton getNoteButton(final NoteButtonIdentifier noteIdentifier) throws IndexOutOfBoundsException, NoSuchElementException { + if (!(noteIdentifier instanceof NoteGridButtonIdentifier)) + return super.getNoteButton(noteIdentifier); + + return getNoteButton((NoteGridButtonIdentifier)noteIdentifier); + } + /** + * Gets a {@link NoteButton} based on the location of the note as described by the given identifier. + */ + public NoteButton getNoteButton(final NoteGridButtonIdentifier noteIdentifier) throws IndexOutOfBoundsException { + return getNoteButton(noteIdentifier.row, noteIdentifier.column); + } + + public NoteButton getNoteButton(final int row, final int column) throws IndexOutOfBoundsException { + return noteGrid.getNoteButton(row, column); + } // Abstract implementations /** diff --git a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/NoteGrid.java b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/NoteGrid.java index 7e9fced9..50017e16 100644 --- a/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/NoteGrid.java +++ b/src/main/java/com/cstav/genshinstrument/client/gui/screens/instrument/partial/notegrid/NoteGrid.java @@ -119,7 +119,7 @@ public AbstractLayout initNoteGridLayout(final float vertAlignment, final int sc } - public NoteButton getNote(final int row, final int column) { + public NoteButton getNoteButton(final int row, final int column) throws IndexOutOfBoundsException { return notes[column][row]; } diff --git a/src/main/java/com/cstav/genshinstrument/event/ClientEvents.java b/src/main/java/com/cstav/genshinstrument/event/ClientEvents.java index ee17466f..3ffca048 100644 --- a/src/main/java/com/cstav/genshinstrument/event/ClientEvents.java +++ b/src/main/java/com/cstav/genshinstrument/event/ClientEvents.java @@ -3,7 +3,6 @@ import com.cstav.genshinstrument.Main; import com.cstav.genshinstrument.client.config.ModClientConfigs; import com.cstav.genshinstrument.client.gui.screens.instrument.partial.AbstractInstrumentScreen; -import com.cstav.genshinstrument.client.gui.screens.instrument.partial.note.NoteButton; import com.cstav.genshinstrument.event.InstrumentPlayedEvent.ByPlayer; import com.cstav.genshinstrument.item.InstrumentItem; import com.cstav.genshinstrument.util.ServerUtil; @@ -61,11 +60,9 @@ public static void onInstrumentPlayed(final InstrumentPlayedEvent event) { return; - for (NoteButton note : screen.notesIterable()) - if (note.getIdentifier().matches(event.noteIdentifier)) { - note.playNoteAnimation(true); - return; - } + try { + screen.getNoteButton(event.noteIdentifier).playNoteAnimation(true); + } catch (Exception e) {} } } diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java index 3a6cf2d9..d92c2408 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/DrumNoteIdentifier.java @@ -9,8 +9,8 @@ public class DrumNoteIdentifier extends DefaultNoteButtonIdentifier { - private DrumButtonType noteType; - private boolean isRight; + public final DrumButtonType noteType; + public final boolean isRight; @OnlyIn(Dist.CLIENT) public DrumNoteIdentifier(final DrumNoteButton note) { diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java index a5f0828f..5348be72 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteButtonIdentifier.java @@ -10,7 +10,7 @@ /** *

- * A class used for identifying {@link NoteButton note buttons} over network. + * A class used for identifying {@link NoteButton note button}s' UI placement over network. *

* All implementors must include a constructor that gets a type {@link FriendlyByteBuf}. */ @@ -86,7 +86,7 @@ public static boolean perferMatch(NoteButtonIde return unmatchFunction.apply(other); } } - + /** * Executes the given match method such that if the expected type does not match {@code other}, * {@code false} will be returned. diff --git a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java index 85112b9a..f6239f37 100644 --- a/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java +++ b/src/main/java/com/cstav/genshinstrument/networking/buttonidentifier/NoteGridButtonIdentifier.java @@ -8,7 +8,7 @@ public class NoteGridButtonIdentifier extends DefaultNoteButtonIdentifier { - private int row, column; + public final int row, column; @OnlyIn(Dist.CLIENT) public NoteGridButtonIdentifier(final NoteGridButton button) { super(button); From 2fcea5467c6a7b1ba90524512b83a40c8f964acb Mon Sep 17 00:00:00 2001 From: StavWasPlayZ Date: Tue, 18 Jul 2023 04:32:12 +0300 Subject: [PATCH 09/10] Bump mod version to v2.8.2 --- gradle.properties | 2 +- public/updates.json | 7 ++++--- src/main/resources/META-INF/mods.toml | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index d7ed7301..f83b3656 100644 --- a/gradle.properties +++ b/gradle.properties @@ -49,7 +49,7 @@ mod_name=Genshin Instruments # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=CC-BY-NC 4.0 # The mod version. See https://semver.org/ -mod_version=2.8.1 +mod_version=2.8.2 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/public/updates.json b/public/updates.json index a4cf8ec7..56575b94 100644 --- a/public/updates.json +++ b/public/updates.json @@ -35,7 +35,8 @@ "1.20.1": { "2.7.8": "- Update to 1.20.1\n- Pitch slider now has note names", "2.8": "- Added the staff instrument background", - "2.8.1": "- Fixed drum and zither shared playing issues" + "2.8.1": "- Fixed drum and zither shared playing issues", + "2.8.2": "- Improved drum sounds\n- Optimized note buttons' UI lookup" }, @@ -53,7 +54,7 @@ "1.20-latest": "2.7.7", "1.20-recommended": "2.7.7", - "1.20.1-latest": "2.8.1", - "1.20.1-recommended": "2.8.1" + "1.20.1-latest": "2.8.2", + "1.20.1-recommended": "2.8.2" } } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 1735c4fb..59d72a77 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -17,7 +17,7 @@ license="CC-BY-NC 4.0" # The modid of the mod modId="genshinstrument" #mandatory # The version number of the mod -version="2.8.1" #mandatory +version="2.8.2" #mandatory # A display name for the mod displayName="Genshin Instruments" #mandatory # A URL to query for updates for this mod. See the JSON update specification https://docs.minecraftforge.net/en/latest/misc/updatechecker/ From 0e2deda6e69fe52ab78ae4a3a83f3e846d5bd64a Mon Sep 17 00:00:00 2001 From: StavWasPlayZ Date: Tue, 18 Jul 2023 04:33:46 +0300 Subject: [PATCH 10/10] forgor to note --- public/updates.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/updates.json b/public/updates.json index 56575b94..169c4816 100644 --- a/public/updates.json +++ b/public/updates.json @@ -34,7 +34,7 @@ }, "1.20.1": { "2.7.8": "- Update to 1.20.1\n- Pitch slider now has note names", - "2.8": "- Added the staff instrument background", + "2.8": "- Added the staff instrument background\n- Removed note names from pitch slider", "2.8.1": "- Fixed drum and zither shared playing issues", "2.8.2": "- Improved drum sounds\n- Optimized note buttons' UI lookup" },