Skip to content

Commit 91859b0

Browse files
authored
Merge pull request #24 from HyperRaccoon13/master
Music Display
2 parents 2c57e26 + 2778dab commit 91859b0

File tree

16 files changed

+571
-207
lines changed

16 files changed

+571
-207
lines changed

src/main/java/com/github/ethanicuss/astraladditions/AstralAdditions.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ public class AstralAdditions implements ModInitializer {
1717

1818
@Override
1919
public void onInitialize() {
20-
2120
ModFluids.registerFluids();
2221
ModEntities.registerEntities();
2322
ModBlocks.registerBlocks();

src/main/java/com/github/ethanicuss/astraladditions/AstralAdditionsClient.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package com.github.ethanicuss.astraladditions;
22

3+
import com.github.ethanicuss.astraladditions.musicplayer.NowPlayingHud;
34
import com.github.ethanicuss.astraladditions.registry.*;
45
import com.github.ethanicuss.astraladditions.playertracker.PlayerTracker;
56
import net.fabricmc.api.ClientModInitializer;
7+
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
8+
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
9+
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
610
import org.slf4j.Logger;
711
import org.slf4j.LoggerFactory;
812

913
public class AstralAdditionsClient implements ClientModInitializer {
1014
public static final Logger LOGGER = LoggerFactory.getLogger(AstralAdditions.MOD_ID);
1115
public static PlayerTracker playerTracker = new PlayerTracker();
1216

13-
1417
@Override
1518
public void onInitializeClient() {
1619
ModEntities.registerClient();
@@ -20,5 +23,15 @@ public void onInitializeClient() {
2023
ModItemProperties.registerClient();
2124
ModPotion.registerClient();
2225
LOGGER.info("Astral Additions client is active!");
26+
27+
//!IDK where to move these to
28+
HudRenderCallback.EVENT.register((matrices, tickDelta) -> {
29+
NowPlayingHud.render(matrices);
30+
});
31+
32+
ClientTickEvents.END_CLIENT_TICK.register(client -> {
33+
NowPlayingHud.tick();
34+
});
35+
2336
}
2437
}

src/main/java/com/github/ethanicuss/astraladditions/items/PylonItem.java

Lines changed: 253 additions & 159 deletions
Large diffs are not rendered by default.

src/main/java/com/github/ethanicuss/astraladditions/items/ShimmerBottleItem.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424

2525
public class ShimmerBottleItem extends Item {
2626

27-
StatusEffectInstance glowing = new StatusEffectInstance(StatusEffects.GLOWING, 600);
28-
StatusEffectInstance vision = new StatusEffectInstance(StatusEffects.NIGHT_VISION, 600);
27+
StatusEffectInstance glowing = new StatusEffectInstance(StatusEffects.GLOWING, 600, 0, false, false);
28+
StatusEffectInstance vision = new StatusEffectInstance(StatusEffects.NIGHT_VISION, 600, 0, false, false);
2929

3030
private static final int MAX_USE_TIME = 40;
3131

@@ -37,8 +37,8 @@ public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user){
3737
ItemStack itemStack = super.finishUsing(stack, world, user);
3838
if (!world.isClient) {
3939
PlayerEntity player = (PlayerEntity)user;
40-
player.addStatusEffect(new StatusEffectInstance(StatusEffects.GLOWING, 600, 0, false, false));
41-
player.addStatusEffect(new StatusEffectInstance(StatusEffects.NIGHT_VISION, 600, 0, false, false));
40+
player.addStatusEffect(glowing);
41+
player.addStatusEffect(vision);
4242
player.playSound(SoundEvents.BLOCK_BUBBLE_COLUMN_UPWARDS_INSIDE, SoundCategory.AMBIENT, 0.8f, 0.8f);
4343
return user instanceof PlayerEntity && ((PlayerEntity) user).getAbilities().creativeMode ? itemStack : new ItemStack(Items.GLASS_BOTTLE);
4444
}
@@ -50,7 +50,7 @@ public void appendTooltip(ItemStack stack, @Nullable World world, List<Text> too
5050
}
5151

5252
public int getMaxUseTime(ItemStack stack) {
53-
return 40;
53+
return MAX_USE_TIME;
5454
}
5555

5656
public UseAction getUseAction(ItemStack stack) {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.github.ethanicuss.astraladditions.mixin;
2+
3+
import com.github.ethanicuss.astraladditions.musicplayer.MusicPlayer;
4+
import net.minecraft.client.sound.Sound;
5+
import net.minecraft.client.sound.SoundInstance;
6+
import net.minecraft.client.sound.SoundSystem;
7+
import net.minecraft.client.sound.WeightedSoundSet;
8+
import net.minecraft.sound.SoundCategory;
9+
import net.minecraft.util.Identifier;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.injection.At;
12+
import org.spongepowered.asm.mixin.injection.Inject;
13+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
14+
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
15+
16+
@Mixin(SoundSystem.class)
17+
public class NowPlayingSoundMixin {
18+
@Inject(method = "play(Lnet/minecraft/client/sound/SoundInstance;)V",
19+
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/sound/Sound;getIdentifier()Lnet/minecraft/util/Identifier;"),
20+
locals = LocalCapture.CAPTURE_FAILHARD
21+
)
22+
23+
private void onPlay(SoundInstance instance, CallbackInfo ci,
24+
WeightedSoundSet weightedSoundSet, Identifier soundEventId,
25+
Sound sound, float volume, float pitch, SoundCategory category,
26+
float x, float y, SoundInstance.AttenuationType attenuationType,
27+
boolean looping
28+
) {
29+
if (instance.getCategory() != SoundCategory.MUSIC) return;
30+
31+
Identifier chosen = sound.getIdentifier();
32+
MusicPlayer.onTrackStarted(chosen);
33+
}
34+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.github.ethanicuss.astraladditions.mixin.knockback;
2+
3+
import net.minecraft.entity.attribute.EntityAttribute;
4+
import net.minecraft.entity.attribute.EntityAttributes;
5+
import net.minecraft.entity.player.PlayerEntity;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Redirect;
9+
10+
@Mixin(PlayerEntity.class)
11+
public class AttackKnockbackCompatMixin {
12+
13+
@Redirect(method = "attack(Lnet/minecraft/entity/Entity;)V",
14+
at = @At(value = "FIELD",
15+
target = "Lnet/minecraft/entity/attribute/EntityAttributes;ATTACK_KNOCKBACK:Lnet/minecraft/entity/attribute/EntityAttribute;")
16+
)
17+
private EntityAttribute redirectAttackKnockbackAttribute() {
18+
return EntityAttributes.GENERIC_ATTACK_KNOCKBACK;
19+
}
20+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.github.ethanicuss.astraladditions.mixin.knockback;
2+
3+
import net.minecraft.entity.attribute.EntityAttribute;
4+
import net.minecraft.entity.attribute.EntityAttributes;
5+
import net.minecraft.entity.mob.MobEntity;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Redirect;
9+
10+
@Mixin(MobEntity.class)
11+
public class MobAttackKnockbackCompatMixin {
12+
13+
@Redirect(method = "tryAttack(Lnet/minecraft/entity/Entity;)Z",
14+
at = @At(value = "FIELD",
15+
target = "Lnet/minecraft/entity/attribute/EntityAttributes;ATTACK_KNOCKBACK:Lnet/minecraft/entity/attribute/EntityAttribute;"),
16+
require = 0
17+
)
18+
private EntityAttribute redirectAttackKnockbackAttribute() {
19+
return EntityAttributes.GENERIC_ATTACK_KNOCKBACK;
20+
}
21+
}

src/main/java/com/github/ethanicuss/astraladditions/musicplayer/MusicPlayer.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.ethanicuss.astraladditions.musicplayer;
22

3+
import com.github.ethanicuss.astraladditions.AstralAdditions;
34
import com.github.ethanicuss.astraladditions.AstralAdditionsClient;
45
import com.github.ethanicuss.astraladditions.entities.shimmerblaze.ShimmerBlazeEntity;
56
import com.github.ethanicuss.astraladditions.registry.ModMusic;
@@ -10,6 +11,7 @@
1011
import net.minecraft.entity.boss.dragon.EnderDragonEntity;
1112
import net.minecraft.entity.mob.HostileEntity;
1213
import net.minecraft.sound.MusicSound;
14+
import net.minecraft.util.Identifier;
1315
import net.minecraft.util.TypeFilter;
1416
import net.minecraft.util.math.Box;
1517

@@ -18,6 +20,8 @@
1820
import java.util.function.Predicate;
1921

2022
public class MusicPlayer {
23+
private static net.minecraft.util.Identifier lastShownTrack = null;
24+
2125
private static final Predicate<WitherEntity> WITHER_PREDICATE = (entity) -> {
2226
return true;
2327
};
@@ -220,4 +224,16 @@ public static MusicSound findMusic(MusicTracker musicTracker){
220224
}
221225
return val;
222226
}
223-
}
227+
228+
public static void onTrackStarted(Identifier soundId) {
229+
if (soundId == null) return;
230+
if (!AstralAdditions.MOD_ID.equals(soundId.getNamespace())) return;
231+
if (soundId.equals(lastShownTrack)) return;
232+
lastShownTrack = soundId;
233+
234+
ModMusic.TrackInfo info = ModMusic.getNowPlaying(soundId);
235+
if (info != null) {
236+
NowPlayingHud.show(info.title(), info.artist());
237+
}
238+
}
239+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.github.ethanicuss.astraladditions.musicplayer;
2+
3+
import com.github.ethanicuss.astraladditions.AstralAdditions;
4+
import net.minecraft.client.MinecraftClient;
5+
import net.minecraft.client.font.TextRenderer;
6+
import net.minecraft.client.gui.DrawableHelper;
7+
import net.minecraft.client.util.math.MatrixStack;
8+
import net.minecraft.text.Text;
9+
import net.minecraft.text.TranslatableText;
10+
11+
public class NowPlayingHud {
12+
13+
private static final int showTick = 20*8;
14+
private static final int fadeTick = 20*2;
15+
16+
private static Text title = Text.of("");
17+
private static Text artist = Text.of("");
18+
private static int ticksLeft = 0;
19+
20+
private NowPlayingHud() {}
21+
22+
public static void show(Text titleText, Text artistText) {
23+
title = titleText;
24+
artist = artistText;
25+
ticksLeft = showTick + fadeTick * 2;
26+
}
27+
28+
public static void tick() {
29+
if (ticksLeft > 0) ticksLeft--;
30+
}
31+
32+
public static void render(MatrixStack matrices) {
33+
if (ticksLeft <= 0) return;
34+
35+
MinecraftClient client = MinecraftClient.getInstance();
36+
if (client.options.hudHidden) return;
37+
38+
float alpha = 1.0f;
39+
if (ticksLeft > showTick + fadeTick) {
40+
//fading out
41+
int tick = (showTick + fadeTick * 2) - ticksLeft;
42+
alpha = Math.min(1.0f, tick / (float) fadeTick);
43+
} else if (ticksLeft < fadeTick) {
44+
//fading out
45+
alpha = ticksLeft / (float) fadeTick;
46+
}
47+
48+
int a = ((int)(alpha * 255.0f) & 0xFF) << 24;
49+
50+
Text line1 = new TranslatableText("gui." + AstralAdditions.MOD_ID + ".music_hud_now_playing");
51+
Text line2 = title;
52+
Text line3 = Text.of(new TranslatableText("gui." + AstralAdditions.MOD_ID + ".music_hud_by").getString() + artist.getString());
53+
54+
TextRenderer textRenderer = client.textRenderer;
55+
int x = 10;
56+
int y = 10;
57+
58+
int w = Math.max(Math.max(textRenderer.getWidth(line1), textRenderer.getWidth(line2)), textRenderer.getWidth(line3));
59+
int h = textRenderer.fontHeight * 3 + 6;
60+
61+
DrawableHelper.fill(matrices, x - 4, y - 4, x + w + 4, y + h, a | 0x101010);
62+
63+
textRenderer.drawWithShadow(matrices, line1, x, y, a | 0xFFFFFF);
64+
textRenderer.drawWithShadow(matrices, line2, x, y + textRenderer.fontHeight + 2, a | 0xFFFFFF);
65+
textRenderer.drawWithShadow(matrices, line3, x, y + (textRenderer.fontHeight + 2) * 2, a | 0xB0B0B0);
66+
}
67+
}

src/main/java/com/github/ethanicuss/astraladditions/registry/ModBlocks.java

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -80,25 +80,11 @@ private static ToIntFunction<BlockState> createLightLevelFromLitBlockState(int l
8080
public static final BlockItem JAR_ITEM = new BlockItem(JAR_BLOCK, new FabricItemSettings().group(ItemGroup.DECORATIONS));
8181
public static final BlockEntityType<JarBlockEntity> JAR_BLOCKENTITY = Registry.register(Registry.BLOCK_ENTITY_TYPE, new Identifier(AstralAdditions.MOD_ID, "jar"), FabricBlockEntityTypeBuilder.create(JarBlockEntity::new, JAR_BLOCK).build());
8282

83-
public static final Block DESIZER_1 = new DesizerCasingBlock(FabricBlockSettings.of(Material.METAL).sounds(BlockSoundGroup.METAL).strength(3.0f));
84-
public static final Block DESIZER_2 = new DesizerCasingBlock(FabricBlockSettings.of(Material.METAL).sounds(BlockSoundGroup.METAL).strength(3.0f));
85-
public static final Block DESIZER_3 = new DesizerCasingBlock(FabricBlockSettings.of(Material.METAL).sounds(BlockSoundGroup.METAL).strength(3.0f));
86-
public static final Block DESIZER_4 = new DesizerCasingBlock(FabricBlockSettings.of(Material.METAL).sounds(BlockSoundGroup.METAL).strength(3.0f));
87-
public static final Block DESIZER_6 = new DesizerCasingBlock(FabricBlockSettings.of(Material.METAL).sounds(BlockSoundGroup.METAL).strength(3.0f));
88-
public static final Block DESIZER_7 = new DesizerCasingBlock(FabricBlockSettings.of(Material.METAL).sounds(BlockSoundGroup.METAL).strength(3.0f));
89-
public static final Block DESIZER_8 = new DesizerCasingBlock(FabricBlockSettings.of(Material.METAL).sounds(BlockSoundGroup.METAL).strength(3.0f));
90-
public static final Block DESIZER_9 = new DesizerCasingBlock(FabricBlockSettings.of(Material.METAL).sounds(BlockSoundGroup.METAL).strength(3.0f));
83+
9184
public static final Block DESIZER_CONTROLLER = new DesizerControllerBlock(FabricBlockSettings.of(Material.METAL).sounds(BlockSoundGroup.METAL).strength(3.0f));
9285
public static final Block DESIZER_BASE = new DesizerCasingBlock(FabricBlockSettings.of(Material.METAL).sounds(BlockSoundGroup.METAL).strength(3.0f));
9386

94-
public static final BlockItem DESIZER_1_ITEM = new BlockItem(DESIZER_1, new FabricItemSettings().group(ItemGroup.BUILDING_BLOCKS));
95-
public static final BlockItem DESIZER_2_ITEM = new BlockItem(DESIZER_2, new FabricItemSettings().group(ItemGroup.BUILDING_BLOCKS));
96-
public static final BlockItem DESIZER_3_ITEM = new BlockItem(DESIZER_3, new FabricItemSettings().group(ItemGroup.BUILDING_BLOCKS));
97-
public static final BlockItem DESIZER_4_ITEM = new BlockItem(DESIZER_4, new FabricItemSettings().group(ItemGroup.BUILDING_BLOCKS));
98-
public static final BlockItem DESIZER_6_ITEM = new BlockItem(DESIZER_6, new FabricItemSettings().group(ItemGroup.BUILDING_BLOCKS));
99-
public static final BlockItem DESIZER_7_ITEM = new BlockItem(DESIZER_7, new FabricItemSettings().group(ItemGroup.BUILDING_BLOCKS));
100-
public static final BlockItem DESIZER_8_ITEM = new BlockItem(DESIZER_8, new FabricItemSettings().group(ItemGroup.BUILDING_BLOCKS));
101-
public static final BlockItem DESIZER_9_ITEM = new BlockItem(DESIZER_9, new FabricItemSettings().group(ItemGroup.BUILDING_BLOCKS));
87+
10288
public static final BlockItem DESIZER_CONTROLLER_ITEM = new BlockItem(DESIZER_CONTROLLER, new FabricItemSettings().group(ItemGroup.BUILDING_BLOCKS));
10389
public static final BlockItem DESIZER_BASE_ITEM = new BlockItem(DESIZER_BASE, new FabricItemSettings().group(ItemGroup.BUILDING_BLOCKS));
10490

@@ -124,14 +110,7 @@ public static void registerBlocks() {
124110
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "ender_tip"), ENDER_TIP_BLOCK);
125111
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "ender_sprouts"), ENDER_SPROUT_BLOCK);
126112
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "pearl_pod"), PEARL_POD_BLOCK);
127-
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "desizer_1"), DESIZER_1);
128-
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "desizer_2"), DESIZER_2);
129-
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "desizer_3"), DESIZER_3);
130-
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "desizer_4"), DESIZER_4);
131-
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "desizer_6"), DESIZER_6);
132-
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "desizer_7"), DESIZER_7);
133-
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "desizer_8"), DESIZER_8);
134-
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "desizer_9"), DESIZER_9);
113+
135114
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "desizer_controller"), DESIZER_CONTROLLER);
136115
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "desizer_base"), DESIZER_BASE);
137116
Registry.register(Registry.BLOCK, new Identifier(AstralAdditions.MOD_ID, "the_end"), THE_END_BLOCK);
@@ -149,14 +128,7 @@ public static void registerBlockItems() {
149128
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "ender_tip"), ENDER_TIP_ITEM);
150129
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "ender_sprouts"), ENDER_SPROUT_ITEM);
151130
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "pearl_pod"), PEARL_POD_ITEM);
152-
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "desizer_1"), DESIZER_1_ITEM);
153-
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "desizer_2"), DESIZER_2_ITEM);
154-
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "desizer_3"), DESIZER_3_ITEM);
155-
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "desizer_4"), DESIZER_4_ITEM);
156-
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "desizer_6"), DESIZER_6_ITEM);
157-
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "desizer_7"), DESIZER_7_ITEM);
158-
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "desizer_8"), DESIZER_8_ITEM);
159-
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "desizer_9"), DESIZER_9_ITEM);
131+
160132
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "desizer_controller"), DESIZER_CONTROLLER_ITEM);
161133
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "desizer_base"), DESIZER_BASE_ITEM);
162134
Registry.register(Registry.ITEM, new Identifier(AstralAdditions.MOD_ID, "the_end"), THE_END_BLOCK_ITEM);

0 commit comments

Comments
 (0)