Skip to content

Commit

Permalink
Merge branch 'main' into 1.21.3
Browse files Browse the repository at this point in the history
# Conflicts:
#	src/main/java/net/nayrus/noteblockmaster/NoteBlockMaster.java
#	src/main/java/net/nayrus/noteblockmaster/block/TuningCore.java
#	src/main/java/net/nayrus/noteblockmaster/item/ComposersNote.java
#	src/main/java/net/nayrus/noteblockmaster/item/TunerItem.java
#	src/main/java/net/nayrus/noteblockmaster/screen/base/BaseTunerScreen.java
#	src/main/java/net/nayrus/noteblockmaster/setup/Registry.java
  • Loading branch information
IONayrus committed Feb 3, 2025
2 parents 0c66101 + fdb9700 commit 3d5947a
Show file tree
Hide file tree
Showing 17 changed files with 236 additions and 72 deletions.
31 changes: 7 additions & 24 deletions src/main/java/net/nayrus/noteblockmaster/NoteBlockMaster.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@
import net.minecraft.core.registries.Registries;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.nayrus.noteblockmaster.block.AdvancedNoteBlock;
import net.nayrus.noteblockmaster.block.TuningCore;
import net.nayrus.noteblockmaster.command.BPMInfoCommand;
import net.nayrus.noteblockmaster.command.MainCommand;
import net.nayrus.noteblockmaster.datagen.recipes.TunerRecipe;
import net.nayrus.noteblockmaster.event.ClientEvents;
import net.nayrus.noteblockmaster.event.CommonEvents;
Expand All @@ -19,16 +16,13 @@
import net.nayrus.noteblockmaster.utils.KeyBindings;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.fml.loading.FMLEnvironment;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.RegisterCommandsEvent;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.server.command.ConfigCommand;
import org.slf4j.Logger;

@Mod(NoteBlockMaster.MOD_ID)
Expand All @@ -45,32 +39,21 @@ public NoteBlockMaster(IEventBus modEventBus, ModContainer modContainer)
{
modContainer.registerConfig(ModConfig.Type.STARTUP, StartupConfig.START_UP);
modContainer.registerConfig(ModConfig.Type.CLIENT, ClientConfig.CLIENT);
SoundRegistry.SOUND_EVENTS.register(modEventBus);
TuningCore.loadSustainProperty();

modEventBus.addListener(AdvancedNoteBlock::loadPropertiesFromConfig);
NeoForge.EVENT_BUS.register(this);

Registry.register(modEventBus);
modEventBus.addListener(Registry::registerClientExtensions);
modEventBus.addListener(Registry::registerParticles);
RECIPE_SERIALIZERS.register(modEventBus);

modEventBus.addListener(PacketHandler::registerNetwork);
modEventBus.addListener(KeyBindings::registerBindings);

if(FMLEnvironment.dist == Dist.CLIENT){
NeoForge.EVENT_BUS.register(ClientEvents.class);
modEventBus.addListener(Registry::registerClientExtensions);
modEventBus.addListener(Registry::registerParticles);
modEventBus.addListener(KeyBindings::registerBindings);
}else{
NeoForge.EVENT_BUS.register(ServerEvents.class);
}
NeoForge.EVENT_BUS.register(CommonEvents.class);
}
SoundRegistry.SOUND_EVENTS.register(modEventBus);

@SubscribeEvent
public void onCommandRegister(RegisterCommandsEvent event){
new BPMInfoCommand(event.getDispatcher());
MainCommand.mainCommand(event.getDispatcher());
ConfigCommand.register(event.getDispatcher());
modEventBus.addListener(AdvancedNoteBlock::loadPropertiesFromConfig);
Registry.register(modEventBus);
RECIPE_SERIALIZERS.register(modEventBus);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ public static void loadPropertiesFromConfig(final NewRegistryEvent ignoredEvent)
NOTE = IntegerProperty.create("note", MIN_NOTE_VAL, MAX_NOTE_VAL);

TOTAL_NOTES = MAX_NOTE_VAL - MIN_NOTE_VAL;

TuningCore.loadSustainProperty();
}

private BlockState setInstrument(LevelReader reader, BlockPos pos, BlockState state) {
Expand Down Expand Up @@ -172,7 +174,7 @@ protected void attack(BlockState state, Level level, BlockPos pos, Player player
player.awardStat(Stats.PLAY_NOTEBLOCK);
}
else{
int new_val = data.setmode() ? data.value() + MIN_NOTE_VAL : this.changeNoteValueBy(state, -data.value());
int new_val = data.isSetmode() ? data.value() + MIN_NOTE_VAL : this.changeNoteValueBy(state, -data.value());
this.onNoteChange(level, player, state, pos, new_val);
}
}
Expand All @@ -182,7 +184,7 @@ protected void attack(BlockState state, Level level, BlockPos pos, Player player
.withColor(AdvancedNoteBlock.getColor(state, Utils.PROPERTY.TEMPO).getRGB()), true);
else{
int new_val;
if(data.setmode()) new_val = data.value();
if(data.isSetmode()) new_val = data.value();
else{
int diff = state.getValue(SUBTICK) - data.value();
new_val = diff < 0 ? (diff + SUBTICKS) : diff;
Expand Down
15 changes: 11 additions & 4 deletions src/main/java/net/nayrus/noteblockmaster/block/TuningCore.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
import net.nayrus.noteblockmaster.setup.Registry;
import net.nayrus.noteblockmaster.utils.FinalTuple;
import net.nayrus.noteblockmaster.utils.Utils;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import net.neoforged.neoforge.common.util.DeferredSoundType;

import java.util.ArrayList;
Expand Down Expand Up @@ -209,17 +211,22 @@ protected InteractionResult useItemOn(ItemStack stack, BlockState state, Level l
}
if(!(stack.is(NBMTags.Items.TUNERS) || (stack.is(NBMTags.Items.CORES)))) return super.useItemOn(stack, state, level, pos, player, hand, hitResult);
BlockState anb = level.getBlockState(pos.below());

if(!anb.is(Registry.ADVANCED_NOTEBLOCK)){
if(!level.isClientSide()) level.scheduleTick(pos, state.getBlock(), 0);
return InteractionResult.SUCCESS;
}
if(level.isClientSide()){
Minecraft.getInstance().setScreen(new CoreScreen(state, pos, anb.getValue(AdvancedNoteBlock.INSTRUMENT),
AdvancedNoteBlock.getPitchFromNote(AdvancedNoteBlock.getNoteValue(anb))));
}
if(level.isClientSide()) openCoreScreen(state, anb, pos);

return InteractionResult.SUCCESS;
}

@OnlyIn(Dist.CLIENT)
public static void openCoreScreen(BlockState state, BlockState anb, BlockPos pos){
Minecraft.getInstance().setScreen(new CoreScreen(state, pos, anb.getValue(AdvancedNoteBlock.INSTRUMENT),
AdvancedNoteBlock.getPitchFromNote(AdvancedNoteBlock.getNoteValue(anb))));
}

protected void removeOneCore(BlockState state, Level level, BlockPos pos, Player player, boolean sustainFirst){
if(level.isClientSide()) return;
boolean sus = isSustaining(state) && sustainFirst;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public static void onClientTick(ClientTickEvent.Post event) {
while (KeyBindings.OPEN_OFFHAND_GUI.get().consumeClick()) {
if(!(Minecraft.getInstance().player instanceof Player player)) return;
ItemStack off = player.getOffhandItem();
if(off.is(NBMTags.Items.TUNERS)) TunerItem.openTunerGUI(off, player.getMainHandItem());
if(off.is(NBMTags.Items.TUNERS)) TunerItem.openTunerGUI(off, player.getMainHandItem(), true);
if(off.is(Registry.COMPOSER)) Minecraft.getInstance().setScreen(new ComposerScreen(off));
}
if(ticks%200==0) CoreRender.clearMaps();
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/net/nayrus/noteblockmaster/event/CommonEvents.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,28 @@
import net.minecraft.world.level.block.RepeaterBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.nayrus.noteblockmaster.block.AdvancedNoteBlock;
import net.nayrus.noteblockmaster.command.BPMInfoCommand;
import net.nayrus.noteblockmaster.command.MainCommand;
import net.nayrus.noteblockmaster.item.TunerItem;
import net.nayrus.noteblockmaster.network.data.ComposeData;
import net.nayrus.noteblockmaster.setup.Registry;
import net.nayrus.noteblockmaster.sound.SoundRegistry;
import net.nayrus.noteblockmaster.utils.FinalTuple;
import net.nayrus.noteblockmaster.utils.Utils;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.neoforge.event.RegisterCommandsEvent;
import net.neoforged.neoforge.event.entity.player.UseItemOnBlockEvent;
import net.neoforged.neoforge.server.command.ConfigCommand;

public class CommonEvents {

@SubscribeEvent
public static void onCommandRegister(RegisterCommandsEvent event){
new BPMInfoCommand(event.getDispatcher());
MainCommand.mainCommand(event.getDispatcher());
ConfigCommand.register(event.getDispatcher());
}

@SubscribeEvent
public static void useItemOnBlockEvent(UseItemOnBlockEvent event){
UseOnContext context = event.getUseOnContext();
Expand Down
11 changes: 8 additions & 3 deletions src/main/java/net/nayrus/noteblockmaster/item/ComposersNote.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
import net.nayrus.noteblockmaster.screen.ComposerScreen;
import net.nayrus.noteblockmaster.setup.Registry;
import net.nayrus.noteblockmaster.utils.Utils;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;

public class ComposersNote extends Item {

Expand Down Expand Up @@ -98,9 +100,12 @@ public static Tuple<Integer, Integer> subtickAndPauseOnBeat(int beat, float bpm)
@Override
public InteractionResult use(Level level, Player player, InteractionHand usedHand) {
ItemStack item = player.getItemInHand(usedHand);
if(level.isClientSide()){
Minecraft.getInstance().setScreen(new ComposerScreen(item));
}
if(level.isClientSide()) openComposer(item);
return InteractionResult.SUCCESS;
}

@OnlyIn(Dist.CLIENT)
public static void openComposer(ItemStack item){
Minecraft.getInstance().setScreen(new ComposerScreen(item));
}
}
22 changes: 14 additions & 8 deletions src/main/java/net/nayrus/noteblockmaster/item/TunerItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
import net.nayrus.noteblockmaster.screen.TempoTunerScreen;
import net.nayrus.noteblockmaster.setup.Registry;
import net.nayrus.noteblockmaster.utils.Utils;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;


public class TunerItem extends Item {
Expand All @@ -43,7 +45,7 @@ public ItemStack getCraftingRemainder(ItemStack itemStack) {
public static TunerData getTunerData(ItemStack stack){
TunerData data = stack.get(Registry.TUNER_DATA);
if(data == null) {
data = new TunerData(1, false);
data = TunerData.of(1, false, false);
stack.set(Registry.TUNER_DATA, data);
}
return data;
Expand All @@ -63,7 +65,7 @@ public InteractionResult useOn(UseOnContext context, boolean doOffHandSwing) {
}
TunerData data = getTunerData(tuner);
if(!(state.getBlock() instanceof AdvancedNoteBlock block)){
if(!data.setmode() && !composer.is(Registry.COMPOSER)) return InteractionResult.PASS;
if(!data.isSetmode() && !composer.is(Registry.COMPOSER)) return InteractionResult.PASS;
Inventory inv = player.getInventory();
if(inv.contains(item -> item.is(Registry.ADVANCED_NOTEBLOCK.asItem())) && !doOffHandSwing){
placeAdvancedNoteBlock(level, tuner, pos, data, composer, player, inv);
Expand Down Expand Up @@ -109,7 +111,7 @@ private static void placeAdvancedNoteBlock(Level level, ItemStack tuner, BlockPo

private static InteractionResult changeNoteOn(Level level, BlockState state, AdvancedNoteBlock block, TunerData data, Player player, BlockPos pos) {
if(!level.isClientSide()) {
int new_val = data.setmode() ? data.value() + AdvancedNoteBlock.MIN_NOTE_VAL : block.changeNoteValueBy(state, data.value());
int new_val = data.isSetmode() ? data.value() + AdvancedNoteBlock.MIN_NOTE_VAL : block.changeNoteValueBy(state, data.value());
return block.onNoteChange(level, player, state, pos, new_val);
}
return InteractionResult.SUCCESS;
Expand All @@ -119,7 +121,7 @@ private static InteractionResult changeSubtickOn(Level level, AdvancedNoteBlock
if(!level.isClientSide()) {
int new_val;
if (!composer.is(Registry.COMPOSER))
new_val = (data.setmode() ? data.value() : state.getValue(AdvancedNoteBlock.SUBTICK) + data.value()) % AdvancedNoteBlock.SUBTICKS;
new_val = (data.isSetmode() ? data.value() : state.getValue(AdvancedNoteBlock.SUBTICK) + data.value()) % AdvancedNoteBlock.SUBTICKS;
else {
ComposeData cData = ComposeData.getComposeData(composer);
new_val = cData.subtick();
Expand All @@ -145,14 +147,18 @@ public InteractionResult useOn(UseOnContext context) {
@Override
public InteractionResult use(Level level, Player player, InteractionHand usedHand) {
ItemStack itemstack = player.getItemInHand(usedHand);
if(level.isClientSide()) openTunerGUI(itemstack, player.getItemInHand(InteractionHand.values()[(usedHand.ordinal() + 1) % 2]));
if(level.isClientSide()) openTunerGUI(
itemstack,
player.getItemInHand(InteractionHand.values()[(usedHand.ordinal() + 1) % 2]),
usedHand == InteractionHand.OFF_HAND);
return InteractionResult.SUCCESS;
}

public static void openTunerGUI(ItemStack tuner, ItemStack second){
@OnlyIn(Dist.CLIENT)
public static void openTunerGUI(ItemStack tuner, ItemStack second, boolean tunerInOffhand){
if(tuner.is(Registry.TEMPOTUNER))
Minecraft.getInstance().setScreen(new TempoTunerScreen(tuner, second));
Minecraft.getInstance().setScreen(new TempoTunerScreen(tuner, second, tunerInOffhand));
if(tuner.is(Registry.NOTETUNER))
Minecraft.getInstance().setScreen(new NoteTunerScreen(tuner));
Minecraft.getInstance().setScreen(new NoteTunerScreen(tuner, tunerInOffhand));
}
}
45 changes: 45 additions & 0 deletions src/main/java/net/nayrus/noteblockmaster/network/NetworkUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package net.nayrus.noteblockmaster.network;

import net.minecraft.core.BlockPos;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.nayrus.noteblockmaster.network.payload.ScheduleCoreSound;
import net.neoforged.neoforge.network.PacketDistributor;

import javax.annotation.Nullable;
import java.util.List;

public class NetworkUtil {

public static void broadcastPayload(
List<ServerPlayer> players,
@Nullable Player except,
double x,
double y,
double z,
double radius,
ResourceKey<Level> dimension,
CustomPacketPayload payload
) {
for (ServerPlayer serverplayer : players) {
if (serverplayer != except && serverplayer.level().dimension() == dimension) {
double d0 = x - serverplayer.getX();
double d1 = y - serverplayer.getY();
double d2 = z - serverplayer.getZ();
if (d0 * d0 + d1 * d1 + d2 * d2 < radius * radius) {
PacketDistributor.sendToPlayer(serverplayer, payload);
}
}
}
}

public static void broadcastCoreSound(ServerLevel level, ScheduleCoreSound payload){
BlockPos pos = payload.pos();
broadcastPayload(level.players(), null, pos.getX(), pos.getY(), pos.getZ(), 64, level.dimension(), payload);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,13 @@
import net.nayrus.noteblockmaster.item.TunerItem;
import net.nayrus.noteblockmaster.network.data.ComposeData;
import net.nayrus.noteblockmaster.network.data.TunerData;
import net.nayrus.noteblockmaster.network.payload.ActionPing;
import net.nayrus.noteblockmaster.network.payload.ConfigCheck;
import net.nayrus.noteblockmaster.network.payload.CoreUpdate;
import net.nayrus.noteblockmaster.network.payload.TickSchedule;
import net.nayrus.noteblockmaster.network.payload.*;
import net.nayrus.noteblockmaster.render.ANBInfoRender;
import net.nayrus.noteblockmaster.setup.Registry;
import net.nayrus.noteblockmaster.setup.config.ClientConfig;
import net.nayrus.noteblockmaster.setup.config.StartupConfig;
import net.nayrus.noteblockmaster.setup.Registry;
import net.nayrus.noteblockmaster.sound.AdvancedInstrument;
import net.nayrus.noteblockmaster.sound.SubTickScheduler;
import net.nayrus.noteblockmaster.utils.FinalTuple;
import net.nayrus.noteblockmaster.utils.Utils;
import net.neoforged.bus.api.SubscribeEvent;
Expand All @@ -36,6 +35,7 @@ public static void registerNetwork(final RegisterPayloadHandlersEvent event){

reg.playToClient(ConfigCheck.TYPE, ConfigCheck.STREAM_CODEC, PacketHandler::handleStartUpSync);
reg.playToClient(ActionPing.TYPE, ActionPing.STREAM_CODEC, PacketHandler::handleActionPing);
reg.playToClient(ScheduleCoreSound.TYPE, ScheduleCoreSound.STREAM_CODEC, PacketHandler::handleScheduleCoreSound);

reg.playToServer(TunerData.TYPE, TunerData.TUNER_STREAM_CODEC, PacketHandler::handleTunerData);
reg.playToServer(ComposeData.TYPE, ComposeData.STREAM_CODEC, PacketHandler::handleComposeData);
Expand Down Expand Up @@ -86,11 +86,23 @@ private static void handleActionPing(final ActionPing packet, final IPayloadCont
}
}

private static void handleScheduleCoreSound(final ScheduleCoreSound sound, final IPayloadContext context){
int data = sound.data();
int sustainIndex = data & 0xFF; // Extract 8 bits (0-7)
int noteVal = (data >> 8) & 0xFF; // Extract 8 bits (8-15)
int instrumentOrdinal = (data >> 16) & 0xFF; // Extract 8 bits (16-23)
boolean noDecay = ((data >> 24) & 1) == 1; // Extract 1 bit (24)
int delay = (data >> 25) & 0x1F; // Extract 5 bits (25-29)

AdvancedInstrument instrument = AdvancedInstrument.values()[instrumentOrdinal];
SubTickScheduler.delayedCoredNoteBlockEvent(sound.pos(), sustainIndex, noteVal, sound.volume(), instrument, noDecay, delay);
}

private static void handleTunerData(final TunerData data, final IPayloadContext context){
Player player = context.player();
FinalTuple.ItemStackTuple items = FinalTuple.getHeldItems(player);
if(!(items.contains(TunerItem.class))) return;
ItemStack stack = items.getFirst(TunerItem.class);
ItemStack stack = data.isInOffhand() ? items.getB() : items.getA();
stack.set(Registry.TUNER_DATA, data);
}

Expand All @@ -102,13 +114,13 @@ private static void handleComposeData(final ComposeData data, final IPayloadCont
stack.set(Registry.COMPOSE_DATA, data);
}

public static void handleTickSchedule(final TickSchedule tickSchedule, final IPayloadContext context) {
private static void handleTickSchedule(final TickSchedule tickSchedule, final IPayloadContext context) {
ServerLevel level = (ServerLevel) context.player().level();
BlockPos pos = tickSchedule.pos();
Utils.scheduleTick(level, pos, level.getBlockState(pos).getBlock(), tickSchedule.delay());
}

public static void handleCoreUpdate(final CoreUpdate coreUpdate, final IPayloadContext context) {
private static void handleCoreUpdate(final CoreUpdate coreUpdate, final IPayloadContext context) {
Level level = context.player().level();
BlockPos pos = coreUpdate.pos();
level.setBlockAndUpdate(pos, level.getBlockState(pos)
Expand Down
Loading

0 comments on commit 3d5947a

Please sign in to comment.