Jump to content

[Solved] [1.17.1] Is there any way to make a boss bar use a color that isn't BossBarColor enum?


uSkizzik

Recommended Posts

Basically, I want to have an orange boss bar (or gold as it's called in the ChatFormatting enum) but I can't set the color of that boss bar to anything that isn't in the BossBarColor enum.
Is there any way to bypass that requirement and set it to, as I said, a custom color that already exists in ChatFormatting?

Edited by uSkizzik
Link to comment
Share on other sites

7 hours ago, diesieben07 said:

You'd basically have to write your own network code for it (because the vanilla network code only supports the enum) and then write your own BossEvent class for the server and the client which can store the color. You would then need to make your own texture for it and use RenderGameOverlayEvent.BossInfo to change the rendering.

Sweet! All that work just for a Halloween update. I'll still try it out tho.

Link to comment
Share on other sites

On 9/5/2021 at 10:38 AM, diesieben07 said:

You'd basically have to write your own network code for it (because the vanilla network code only supports the enum) and then write your own BossEvent class for the server and the client which can store the color. You would then need to make your own texture for it and use RenderGameOverlayEvent.BossInfo to change the rendering.

How exactly can I render my custom boss bar?
Vanilla seems to be handling the boss event packet by calling Gui.getBossOverlay().update(). Do I need a custom packet (which I already made) or I need to somehow use the vanilla packet? The issue with a custom packet is that the update method requires an instance of the vanilla boss event packet.

Link to comment
Share on other sites

3 minutes ago, diesieben07 said:

You have to either

  • Use reflection to put your own data into BossHealthOverlay#events
  • Keep your own list of the events

Wait, don't I actually need a custom BossHealthOverlay class because most of it uses vanilla BossEvent and BossBarColor?

Link to comment
Share on other sites

Just now, diesieben07 said:

You have to write your own network code for it. The vanilla network packets can only handle the built in colors.

Yes, I already have a custom packet but what I don't understand is how exactly I'm supposed to handle it.
Currently I'm using this line:

Minecraft.getInstance().gui.getBossOverlay().update(this);

But getBossOverlay returns an instance of BossHealthOverlay which, as you said, won't do the job.

Link to comment
Share on other sites

37 minutes ago, diesieben07 said:

You send a custom network packet which adds it to the map of bars.

You then use the event I mentioned earlier to customize its rendering.

I still don't understand how that makes the game use my custom BossHealthOverlay.
The Gui class still makes an instance of the vanilla class and uses only the vanilla class.

Edit: Does the Gui class even need to use my custom class?

Edited by uSkizzik
Link to comment
Share on other sites

5 hours ago, poopoodice said:

So your custom one should extend it

Vanilla LerpingBossEvent extends vanilla BossBar which isn't what I want.

5 hours ago, poopoodice said:

or as diesieben said just store it yourself.

Then render the custom one in RenderOverlayEvent.

How would I render it via RenderOverlayEvent? 

Link to comment
Share on other sites

41 minutes ago, diesieben07 said:

You draw on the screen. Same as the vanilla boss bar rendering does, but adapted to your needs.

Alright, I'm running into issues with having a custom LerpingBossEvent because the vanilla events field requires a vanilla LerpingBossEvent.
I can't extend it because it itself extends BossEvent and I need it to extend my custom BossEvent.
I also can't make my own events field because then I'll have to call ForgeHooksClient#bossBarRenderPre myself and it also requires a vanilla LerpingBossEvent.
I have no idea what I'm doing and I might just give up...

Link to comment
Share on other sites

1 minute ago, diesieben07 said:

Why?

56 minutes ago, uSkizzik said:

Well, I need to change the BossEvent.BossBarColor to ChatFormatting.

 

2 minutes ago, diesieben07 said:

If you make your own fields, ignore the whole vanilla system and use RenderGameOverlayEvent.Pre to render it

Yea I can actually just do that-

Link to comment
Share on other sites

Alright, I finally got something!
The text is finally rendering (Don't know how, but it works without any errors). What I need now is the actual bar rendering.
I see that vanilla BossHealthOverlay has a method called "drawBar" which uses GuiComponent#blit to draw the bar. How would I do that in my class?
Here's what I currently have:

@Mod.EventBusSubscriber(modid = ProjectApple.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE)
public class PA_RenderGameOverlayEvent {
    private static final ResourceLocation GUI_BARS_LOCATION = new ResourceLocation("textures/gui/bars.png");
    private static final Minecraft minecraft = Minecraft.getInstance();

    @SubscribeEvent
    public static void registerBossBarRendering(RenderGameOverlayEvent.Pre event) {
        Map<UUID, PA_LerpingBossEvent> events = PA_BossEventPacket.getEvents();
        if (!events.isEmpty()) {
            int i = minecraft.getWindow().getGuiScaledWidth();
            int j = 12;

            for(PA_LerpingBossEvent lerpingEvent : events.values()) {
                int k = i / 2 - 91;
                if (!event.isCanceled()) {
                    RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
                    RenderSystem.setShaderTexture(0, GUI_BARS_LOCATION);
                    Component component = lerpingEvent.getName();
                    int l = minecraft.font.width(component);
                    int i1 = i / 2 - l / 2;
                    int j1 = j - 9;
                    minecraft.font.drawShadow(event.getMatrixStack(), component, (float)i1, (float)j1, 16777215);
                }

                if (j >= minecraft.getWindow().getGuiScaledHeight() / 3) {
                    break;
                }
            }
        }
    }
}

P.S.: I know that I need a custom bars texture. I'm using the vanilla one as a placeholder until I get the rendering done.

Link to comment
Share on other sites

14 minutes ago, diesieben07 said:

Exactly the same way...?

I need an instance of BossHealthOverlay to actually call the blit method.

17 minutes ago, diesieben07 said:

This will be called many times every frame. You have to check event.getType.

Yea I actually noticed that but thought it's supposed to be like that.

19 minutes ago, diesieben07 said:

However in 1.17 there is also the overlay registry, which should be used instead, but I have not used it yet.

I'll stick with the getType method. I just have to check if it's RenderGameOverlayEvent.ElementType.BOSSINFO, right?

Link to comment
Share on other sites

2 minutes ago, diesieben07 said:

No, you do not. blit is a static method of the GuiComponent class.

I was looking at the one that BossHealthOverlay uses and didn't see the other ones...

1 minute ago, diesieben07 said:

No, that no longer fires. You have to check for ALL I think.

I'll try it out

Edited by uSkizzik
Link to comment
Share on other sites

At least it's something...
image.png.d7e36df1e3ec1371d91ff005942a374d.png
It manages to render in and out whenever needed but it also looks like this ^ and whenever another boss bar is rendered in, it doesn't move down.
Btw here's the method I'm using for the drawing (only difference from vanilla being that the offset is 80 instead of whatever it is in vanilla)

GuiComponent.blit(pose, windowWidth, windowHeight, 80, 0, bossEvent.getColor().ordinal() * 5 * 2, 182, 5, 265, 265);

 

Link to comment
Share on other sites

2 minutes ago, diesieben07 said:

You'll have to code the moving down manually. And it won't cooperate with vanilla. This is why I originally told you to use an extension of the vanilla class and shove it into the list.

Yea that's gonna be a pain but I'll figure it out (I hope)
Now, about the issue with the texture... Any ideas of how to fix that?
Maybe it's related to the progress of the bar?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • The Carolina Panthers slice their roster down in the direction of 53 avid gamers upon Tuesday inside of accordance with NFL inside optimum seasons, we experienced a favourable thought of almost certainly 45 or hence of the adult men that have been likely in direction of crank out the 's these previous destinations that are often up inside of the are typically a few of surprises upon roster slice working day, and this a single was no Marshall , Jalen Coker inThe Panthers employed a instant spherical choose upon TMJ accurately a few seasons in the past, and he's hardly ever Incredibly found out his experienced flashes of assurance, nonetheless individuals normally appeared in the direction of be adopted as a result of disappearing functions and greatest specifically performed zero snaps within just a activity very last time a person 7 days at the time top the workers in just catches mainly because the instruction personnel effectively forgot regarding matter of the place the blame lies https://www.pantherssportsstore.com/dj-wonnum-jacket, Marshall is his location is undrafted novice Jalen Coker, who acquired the Steve Smith of endorsement all experienced a potent greatest activity of the preseason and obviously did sufficient in the direction of generate the education staff members's have confidence in addition performed distinctive groups snaps, which is constantly a likely tiebreaker Even though analyzing upon element avid gamers at confident placement aren't a great number of exceptional groups acesMost last roster cuts contain a number of of gentlemen that are tagged as the exceptional groups 're normally linebackers, limited finishes, and once in a while defensive Smith-Marsette and Raheem Blackshear are the staff members's shift-in the direction of returners, nevertheless there aren't particularly any other gamers that adhere out as remaining upon the roster essentially for their distinctive groups 's likely not a huge offer https://www.pantherssportsstore.com/taylor-moton-t-shirt, and it's not challenging towards argue that yourself need to have your gamers in direction of be constructive at their basic careers whilst instruction them up upon their unique groups , it's a distinguished departure versus what the personnel is made up of finished made a decision in just the defensive again positional battleWe talked above positional battles likely into the Expenses sport past 7 one of the far more tightly contested kinds was the overcome for the detail locations in just the Panthers secondary.A great deal of avid gamers experienced good scenarios in direction of produce the Panthers elected for D'Shawn Jamison and Chau Smith-Wade earlier mentioned Dicaprio Robinson is shown as a stability and developed the employees alongside with Demani Richardson, the Panthers lone go interceptor of the , cornerback Dane Jackson and protection Sam Franklin are both of those specified towards return in opposition to IR afterwards this period, hence not all of Those adult males can count on in direction of adhere in excess of for way too Matthews' effective preseason not more than enough in direction of gain a roster spotMatthews was arguably the personnel's least difficult move catcher within just the preseason online games with 7 catches for 68 yards and a touchdown throughout the a few online now, he was still left off the roster within want of incumbents Ian Thomas and Tommy Tremble and starter fourth spherical decide on J'Tavion any luck Nick Thurman Jacket, the 32 12 months previous at minimum amount did more than enough towards generate himself a minimal little bit extra period inside the 's a applicant for a veteran vacation spot upon the coach rusher element seeking thenThe Panthers' first 53 male roster contains 4 Gain avid gamers upon it, and they wear't overall look specially Clowney will start out upon a person aspect with possibly DJ Johnson or K'Lavon Chaisson contrary Leota experienced some durable situations within just the preseason, nevertheless I have on't understand that he can be counted upon in the direction of build reliably inside legitimate game Wonnum and Amare Barno will give reinforcements every time they cure versus their respective personal injury, yet the stage community seems to be slim in just the Panthers may well scour the waiver cord for support below.
    • Revenge of the Birds at 8 a. just about every working video game will dwell within just a fresh new write-up every working day for your self toward engage in, discuss with regards to https://www.cardinalsplayersapparel.com/clayton-tune-hoodie, and Deliver necessary take note: this sport involves a marketplace of recent and previous random NFL gamers, not accurately present-day and prior Cardinals 13th gameSeptember 12th gameSeptember 11th gameWhat we have to have against youPlay the gameShare your consequence within just the responses and upon social mediaProvide feedbackSee SB Country inside of-5 sport directions here the Region inside of-5The reason of the video game is in direction of wager the acceptable random NFL participant with the support of up in the direction of 5 'll combination in just Both of those Busy AND RETIRED Gamers this 7 gained't be uncomplicated towards determine it out inside of one particular or 2 guesses, yet some of on your own could be equipped in direction of nail will be a blend of perfectly-recognized avid gamers and some "that men" that we haven't concept of in just some video game will glimpse within just slot 3 of the structure just about every working day this 7 days, with a clean short article each and every working day for the after by yourself accurately wager the participant JuJu Hughes Hoodie, yourself can click on "Percentage Success" toward percentage how on your own did within the feedback and upon social received't shift into other information relating to the sport as we'd such as your responses upon it performs, what on your own imagine of it, the problem issue, and every little thing else your self can imagine of that will enable us recognize what by yourself consider and how we can enhance the yourself can give feed-back in just the suggestions of this report https://www.cardinalsplayersapparel.com/juju-hughes-jacket, or by yourself can fill out this Google !  
    • Hello, I was wondering how I could actually begin to run the server?  Whenever I click on the server file, it says “Check console for possible errors related to” and the name of the file. 
    • idk if im right, but i think that minecraft dont use texture atlas anymore, maybe imi wrong tho  
    • im trying to make a java class for a block, that if you mine it with a hammer it gives you a shard instead of the but, but the code i have its not working rn :c public class BauxiteOreBlock extends Block { public BauxiteOreBlock() { super(BlockBehaviour.Properties.of().strength(1.5f, 4.0f).requiresCorrectToolForDrops()); } @Override public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, @Nullable ItemStack stack) { if (stack.getItem() == ModItems.HAMMER.get()) { popResource(level, pos, new ItemStack(ModItems.BAUXITESHARD.get())); } else { super.playerDestroy(level, player, pos, state, blockEntity, stack); } } }  
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.