From fa3dab0adb522f944040fe5a2ab682d7f8d7f9d3 Mon Sep 17 00:00:00 2001 From: Brady Date: Sat, 15 Dec 2018 17:50:01 -0600 Subject: [PATCH] Startup FitMC intro sound --- .../launch/mixins/MixinMinecraft.java | 13 ++- src/main/java/baritone/Baritone.java | 6 ++ .../utils/resource/BaritoneResourcePack.java | 76 ++++++++++++++++++ .../resources/assets/baritone/sounds.json | 10 +++ .../assets/baritone/sounds/fitmc/intro.ogg | Bin 0 -> 25191 bytes 5 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 src/main/java/baritone/utils/resource/BaritoneResourcePack.java create mode 100644 src/main/resources/assets/baritone/sounds.json create mode 100644 src/main/resources/assets/baritone/sounds/fitmc/intro.ogg diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 7e30d9a03..791e8350e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -25,15 +25,18 @@ import baritone.api.event.events.TickEvent; import baritone.api.event.events.WorldEvent; import baritone.api.event.events.type.EventState; import baritone.utils.BaritoneAutoTest; +import baritone.utils.resource.BaritoneResourcePack; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.resources.IResourcePack; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import org.spongepowered.asm.lib.Opcodes; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -42,6 +45,8 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +import java.util.List; + /** * @author Brady * @since 7/31/2018 @@ -49,10 +54,9 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(Minecraft.class) public class MixinMinecraft { - @Shadow - public EntityPlayerSP player; - @Shadow - public WorldClient world; + @Shadow public EntityPlayerSP player; + @Shadow public WorldClient world; + @Shadow @Final private List defaultResourcePacks; @Inject( method = "init", @@ -71,6 +75,7 @@ public class MixinMinecraft { ) private void preInit(CallbackInfo ci) { BaritoneAutoTest.INSTANCE.onPreInit(); + this.defaultResourcePacks.add(new BaritoneResourcePack()); } @Inject( diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 41fa36c50..719543015 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -35,6 +35,9 @@ import baritone.utils.InputOverrideHandler; import baritone.utils.PathingControlManager; import baritone.utils.player.PrimaryPlayerContext; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; import java.io.File; import java.io.IOException; @@ -98,6 +101,9 @@ public class Baritone implements IBaritone { return; } + SoundEvent event = new SoundEvent(new ResourceLocation("baritone", "fitmc_intro")); + Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(event, 1.0F)); + // Define this before behaviors try and get it, or else it will be null and the builds will fail! this.playerContext = PrimaryPlayerContext.INSTANCE; diff --git a/src/main/java/baritone/utils/resource/BaritoneResourcePack.java b/src/main/java/baritone/utils/resource/BaritoneResourcePack.java new file mode 100644 index 000000000..5eedbb50a --- /dev/null +++ b/src/main/java/baritone/utils/resource/BaritoneResourcePack.java @@ -0,0 +1,76 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.utils.resource; + +import net.minecraft.client.resources.IResourcePack; +import net.minecraft.client.resources.data.IMetadataSection; +import net.minecraft.client.resources.data.MetadataSerializer; +import net.minecraft.util.ResourceLocation; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.Set; + +/** + * @author Brady + * @since 12/15/2018 + */ +public class BaritoneResourcePack implements IResourcePack { + + @Override + public InputStream getInputStream(@Nonnull ResourceLocation location) { + return getResourceStream(location); + } + + @Override + public boolean resourceExists(@Nonnull ResourceLocation location) { + return getResourceStream(location) != null; + } + + @Nonnull + @Override + public Set getResourceDomains() { + return Collections.singleton("baritone"); + } + + @Nullable + @Override + public T getPackMetadata(@Nonnull MetadataSerializer metadataSerializer, @Nonnull String metadataSectionName) throws IOException { + return null; + } + + @Override + public BufferedImage getPackImage() { + return null; + } + + @Nonnull + @Override + public String getPackName() { + return "baritone"; + } + + @Nullable + private InputStream getResourceStream(ResourceLocation location) { + return BaritoneResourcePack.class.getResourceAsStream("/assets/" + location.getNamespace() + "/" + location.getPath()); + } +} diff --git a/src/main/resources/assets/baritone/sounds.json b/src/main/resources/assets/baritone/sounds.json new file mode 100644 index 000000000..271d5eb2e --- /dev/null +++ b/src/main/resources/assets/baritone/sounds.json @@ -0,0 +1,10 @@ +{ + "fitmc_intro": { + "category": "master", + "sounds": [ + { + "name": "baritone:fitmc/intro" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/baritone/sounds/fitmc/intro.ogg b/src/main/resources/assets/baritone/sounds/fitmc/intro.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2a8d651f90c5efea048e8c09e31c835d33249d47 GIT binary patch literal 25191 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