Giter Site home page Giter Site logo

streamchatmod's Introduction

StreamChat mod by mini_bomba

A simple chat client for Twitch put into Minecraft 1.8.9's chat box!

Installation

The mod can be downloaded from the release list. You can either download a stable full release, or the "Latest Commit (that compiles)" prerelease which is automatically compiled on new commit. After downloading, this mod can be installed simply by putting the .jar file in the mods folder of your minecraft installation. It is located in %APPDATA%\.minecraft on Windows and ~/.minecraft on Linux. If you use Prism Launcher or MultiMC, you can just drag & drop the file into the mods window

NOTE: The last "stable" release was 2 years ago and probably doesn't work by now. Please use the rolling "latest" pre-release instead.

Configuration

NOTE: All commands listed are NOT Twitch chat commands, and should be run in your Minecraft client, not the Twitch chat window.

First, generate & set the Twitch token. To do that, simply run /twitch token. A prompt for granting permission to your Twitch account will appear in your browser. After granting permission, you will be redirected to a localhost page. If permission was granted within around 120 seconds, the token will automatically be saved (as indicated by the ✅ emoji in your browser and a confirmation message in your minecraft client). If you got a connection refused page instead, you can still manually set the token by copying it from the url (the access_token query param) and use the command /twitch settoken <token>. If the prompt window did not appear, you can use this link. If you leak your token, you can quickly invalidate it by running /twitch revoketoken

After configuring the token, use the command /twitch enable to enable the Twitch chat and run /twitch chat join <channel name> for every channel's chat you want to see in-game.

If you want to send messages from the in-game chat to your stream chat, run /twitch chat select <channel name> to select the channel to send messages to. Then you can use /twitchchat <your message> or /tc <your message> to send a message.

Usage

After loading a world (either single- or multiplayer), any messages sent in any of the configured stream chats will be relayed to your player's local chat.

If you selected a channel in the configuration section, you can use /tc <message> to send any message from in-game to your selected stream chat.

You can delete a message (if you have permissions to do so) by clicking on it in-game and sending the suggested command. Since commit 0e6601e3 deleted messages are also deleted from minecraft's chat.

All Twitch related configuration commands can be viewed by running /twitch help.

Moderation from Minecraft

Some moderation commands are available from in-game. They are listed below:

  • /twitch delete <channel> <message id>: Delete the specified message. It is supposed to be entered by clicking on a message in-game, since there is no easy way to get the ID of a message.
  • /twitch clearchat: Clears the currently selected Twitch Chat. Does not clear the in-game chat; use F3+D to do that.
  • /twitch timeout <user> <duration> [reason]: Timeouts the given user in the currently selected Twitch Chat. There is no un-timeout command, time the user out for 1 second to do that.
  • /twitch ban <user> [reason]: Bans the given user in the currently selected Twitch Chat.
  • /twitch unban <user>: Unbans the given user in the currently selected Twitch Chat.
  • Tip 19: Ban an annoying humanoid from your stream with /twitch ban <user> [reason] ( ex: /twitch ban Rajdo Being an annoying humanoid.)

Confirmation messages for moderation commands have been recently implemented in commit 45b4be14

Other features

Emotes

StreamChatMod allows Minecraft to render Twitch, BetterTTV and FrankerFaceZ emotes in your chat, including animated ones!

Emotes are downloaded & cached mostly during game startup, but will also be updated when restarting the Twitch client or joining new chats.
Note that loading emotes while playing will cause the game to freeze for a few seconds. (like when reloading a texture pack)

You can also prevent each type of emotes from being rendered in an image form, using the /twitch emote command.

NOTE: If you are using the Patcher mod, you need to turn off the Optimized Font Renderer feature for emotes to work.

Emote feature showcase

Badges

Since 8fea1932a, StreamChatMod also allows you to display your chatter's badges, as icons (same as the emotes).

This can be disabled using /twitch emote, which reverts to text-based display for the 5 main badges (streamer, twitch staff, channel mod, VIP, subscriber)

Badge icon showcase

Showing Twitch emotes in all messages

Since 80489715, StreamChatMod allows you to render Twitch emotes in all Minecraft messages!
This is disabled by default and can be enabled in /twitch emotes.
The channel emotes rendered are pulled from your currently selected channel (or your channel, if no channel is selected)

Using a BTTV emote in guild chat

Automatic update checker

The mod automatically checks for updates on startup.

You can also check for updates every 15 minutes, by running /twitch updatechecker enable ( or /twitch updatechecker disable to disable). This is automatically enabled on prerelease builds.

Chat formatting

By default, any formatting codes are "neutralized" (the § character is replaced with &). However, this can be changed: you may either allow everyone to use formatting codes, or only subscribers, VIPs and moderators.

When enabled, the inverse of the "neutralization" happens: the & is replaced with §, allowing viewers to use Essentials(X)-like color codes.

Clip embedding

Whenever someone sends a link to a Twitch clip, that link is automatically looked up, important data about it extracted and presented to you in your Minecraft chat.
The link will be replaced with the clip name and you'll be able to hover over it to view extra details about the clip or click it to view the clip in your browser.

Example: Clip Embedding demonstration

New follow events

When a new user follows, you will get a message about it & a sound will play. This may take longer than your event overlay in OBS, though. This can also be completely disabled if you get a lot of followers.

Send chat messages to the Twitch chat by default

You can use /twitch chatmode to make any non-command messages be automatically sent to the selected Twitch channel.

You may also set a "Minecraft chat prefix" using /twitch mcchatprefix. Prepending this prefix to the message while the redirect mode is enabled will result in the message being sent to the Minecraft server instead (disabling redirection for that message only). The default prefix is !! (since ! is a commonly used prefix for chatbots). The prefix is removed before the message is forwarded to the server.

Note: This may not work nicely with all mods and some mods may make this feature not work. If you find a well-known mod, which does not work with this, please submit a bug report.

ProTip: a purple outline will appear if you are in Twitch chat mode, so you always know where your messages are going.
ProProTip: the outline will change to green when you enter the prefix while in Twitch chat mode to notify you that the message will be sent to the Minecraft server.

Chat outline for selected SCM commands

The outline visible with Twitch chat mode enabled will also appear when typing some StreamChatMod commands. This currently mostly applies to moderation commands & the /twitchchat command.

The outline will be either purple or red, indicating whether you've made an obvious mistake or not. The text above the chat input bar will tell you what the command will do and what obvious mistake you've made.

Examples: Valid Ban Command Valid Timeout Command Invalid Timeout Duration Missing Parameters

Clip & Marker commands & shortcuts

StreamChatMod allows you to quickly & easily create clips or markers on your streams with configurable keyboard shortcuts!

Simply find the StreamChatMod category in Controls and assign keys to the shortcuts you need. All shortcuts are currently unassigned by default.

You may also use the /twitch clip & /twitch marker [optional description] to create a clip or a marker.

Shortcuts

Notes:

  • Clips & markers are created on the currently selected channel. Change it using /twitch channel select
  • Clip creation has a cooldown of 2 minutes, due to Twitch's API having a global limit on clip creation per app.
  • Clips cannot be named via command. This is a Twitch API limitation.
  • Markers cannot be named when using the Create new marker shortcut. A Create new marker with description shortcut is planned.
  • You must either be the broadcaster or have editor permissions on the channel you want to create markers on.

Customizable prefix for Twitch messages (thanks to NopoTheGamer)

Since d3a56390ff, you can change the text shown before each Twitch message in the chat!

Currently, this can only be done by editing the config file (config/streamchatmod.cfg), command will be added... someday

Default prefix Customized prefix

Quick revoking of your token

Accidentally showed the configuration file or authorization window on stream?

Use /twitch revoketoken to quickly invalidate that token to minimize damage.

Note to self:

Run setupDecompWorkspace Gradle task before configuring Gradle project

forthebadge

forthebadge

forthebadge

forthebadge

forthebadge

forthebadge

discordapp

streamchatmod's People

Contributors

domiehomie avatar m1auch4t avatar mini-bomba avatar nopothegamer avatar thatgravyboat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

streamchatmod's Issues

[CRASH] the game crashes during startup

Reproduction steps
Steps to reproduce the behavior:

  1. Install the latest commit
  2. Start your game

Expected behavior
The game starts like normal

Crash report logs

java.lang.NullPointerException
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_312]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[?:1.8.0_312]
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[?:1.8.0_312]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) ~[?:1.8.0_312]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[?:1.8.0_312]
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[?:1.8.0_312]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:1.8.0_312]
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566) ~[?:1.8.0_312]
	at me.mini_bomba.streamchatmod.StreamChatMod.postInit(StreamChatMod.java:135) ~[StreamChatMod.class:1.4.0]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_312]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_312]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_312]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_312]
	at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:560) ~[forge-1.8.9-11.15.1.2318-1.8.9-universal.jar:?]
	at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) ~[?:?]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_312]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_312]
	at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?]
	at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?]
	at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?]
	at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?]
	at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?]
	at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:211) ~[forge-1.8.9-11.15.1.2318-1.8.9-universal.jar:?]
	at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:189) ~[forge-1.8.9-11.15.1.2318-1.8.9-universal.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_312]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_312]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_312]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_312]
	at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?]
	at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?]
	at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?]
	at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?]
	at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?]
	at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:118) [LoadController.class:?]
	at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:742) [Loader.class:?]
	at net.minecraftforge.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:310) [FMLClientHandler.class:?]
	at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:495) [ave.class:?]
	at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:329) [ave.class:?]
	at net.minecraft.client.main.Main.main(SourceFile:124) [Main.class:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_312]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_312]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_312]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_312]
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_312]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_312]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_312]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_312]
	at gg.essential.loader.stage2.relaunch.Relaunch.relaunch(Relaunch.java:91) [stage2.forge_1.8.9.jar:?]
	at gg.essential.loader.stage2.EssentialLoader.addToClasspath(EssentialLoader.java:86) [stage2.forge_1.8.9.jar:?]
	at gg.essential.loader.stage2.EssentialLoaderBase.addToClasspath(EssentialLoaderBase.java:320) [stage2.forge_1.8.9.jar:?]
	at gg.essential.loader.stage2.EssentialLoaderBase.load(EssentialLoaderBase.java:135) [stage2.forge_1.8.9.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_312]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_312]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_312]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_312]
	at gg.essential.loader.stage1.EssentialLoaderBase.load(EssentialLoaderBase.java:110) [stage1.jar:4]
	at gg.essential.loader.stage1.EssentialSetupTweaker.<init>(EssentialSetupTweaker.java:41) [stage1.jar:4]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [?:1.8.0_312]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [?:1.8.0_312]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [?:1.8.0_312]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423) [?:1.8.0_312]
	at gg.essential.loader.stage0.EssentialSetupTweaker.loadStage1(EssentialSetupTweaker.java:53) [Keystrokes-8.1.2%20(1.8.9).jar:?]
	at gg.essential.loader.stage0.EssentialSetupTweaker.<init>(EssentialSetupTweaker.java:26) [Keystrokes-8.1.2%20(1.8.9).jar:?]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [?:1.8.0_312]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [?:1.8.0_312]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [?:1.8.0_312]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423) [?:1.8.0_312]
	at java.lang.Class.newInstance(Class.java:442) [?:1.8.0_312]
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:98) [launchwrapper-1.12.jar:?]
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_312]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_312]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_312]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_312]
	at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:210) [NewLaunch.jar:?]
	at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:245) [NewLaunch.jar:?]
	at org.multimc.EntryPoint.listen(EntryPoint.java:143) [NewLaunch.jar:?]
	at org.multimc.EntryPoint.main(EntryPoint.java:34) [NewLaunch.jar:?]

Environment information

  • OS: Windows
  • Forge version: 1.8.9 Latest
  • Mod version: Latest commit
  • Other installed mods:

[✔️] Autotip-3.0.1 [1.8-1.12.2]
[✔️] dungeonsguide-3.7.3
[✔️] Keystrokes-8.1.2 (1.8.9)
[✔️] NotEnoughUpdates-2.1-REL
[✔️] OldAnimations_1.0.0_-_beta_10.1
[✔️] Patcher-1.7.0 (1.8.9)
[✔️] preview_OptiFine_1.8.9_HD_U_M6_pre2
[✔️] ResourcePackOrganizer++MC-1.8.9++v1.0.3
[✔️] Scrollable Tooltips-1.4 (1.8.9)
[✔️] SkyblockAddons-1.6.1-for-MC-1.8.9
[✔️] SkyblockExtras-2.1.9.3
[✔️] Skytils-1.0.9-RC1
[✔️] StreamChatMod-git_68417765-for-1.8.9


note: if you are using additional mods, please make sure this crash can still be replicated without them.
if this crash can only be replicated with additional mods, please use the "Incompatibility report" template instead.

**Still crashes without any other mods** 

**Additional context**
N/A

[FEATURE] Change cache implementation to Caffeine

Is your feature request related to a problem? Please describe.
The current cache implementation is basically just a Map and a LinkedList. I feel like a higher performance cache could be beneficial, especially with the larger emote limit we have now.

Describe the solution you'd like
My solution is to use Caffeine, which is a very high performance and easy to use caching library for the caches.

Game crashing after getting "Invalid OAuth token"

Hello! After setting 2FA all previous tokens had been disabled (I guess) and due to that I started getting crashes every single time I tried launching my game.

Log line:
[4:responseBody={"error":"Unauthorized","status":401,"message":"Invalid OAuth token"}]

I wish you a wonderful day and wait patiently for the next version!

[BUG] Cannot escape the format character

Describe the bug
When chat formatting is enabled, the chat formatting character cannot be escaped by using &&

Reproduction steps
Steps to reproduce the behavior:

  1. start up the chat
  2. enable formatting
  3. send a message including an escaped format sequence, such as &&a
  4. See it not escape the character

Expected behavior
&&a should be replaced by &a

Actual behavior
you get & and the rest has formatting changed

Logs & Screenshots
If applicable, add logs and/or screenshots to help explain your problem.
screenshot from minecraft
screenshot from twitch

Environment information

  • OS: windoz
  • Forge version: idk
  • Mod version: he wont tell me the exact version, but we all know it's slightly outdated
  • Other installed mods: a lot
  • got from EnduuS' stream

note: if you are using additional mods, please make sure this bug can still be replicated without them.
if this bug can only be replicated with additional mods, please use the "Incompatibility report" template instead.

Additional context
Add any other context about the problem here.
found this bug on @EnduuS stream

[BUG] found a bug, plz fix

Describe the bug
you can use the § character to change the formatting of the text in mc twitch chat

Reproduction steps
Steps to reproduce the behavior:

  1. type out § and any text after that on twitch's chat

Expected behavior
It should normally type out what the viewer said without formatting

Actual behavior
It does it with formatting

Logs & Screenshots
image
(yes i know 4K ULTRA HD)

Environment information
twitch.tv/enduus

Additional context
¯_(ツ)_/¯

[BUG] IRC Notices missing

Describe the bug
IRC Notices missing for hosting events.

Reproduction steps
Host a channel

Expected behavior
It should probs say something along the lines of "X Channel is now hosting Y Channel." or "X Channel is no longer hosting a channel."

Logs & Screenshots
image

Environment information

  • OS: Windows
  • Forge version: 11.15.1.2318
  • Mod version: 1.4.0
  • Other installed mods: None.

[FEATURE] "/twitch stats" command

Hello! I just want to suggest an idea related to SCM. The idea is "/twitch stats" command which would show current stats of user's stream. Eventually it could be divided to another subcommands such as "/twitch stats viewers" which would show how many viewers are watching the stream at the moment. Btw. I love eating kebabs and yeah... I know that no one asked B)

[BUG] Some messages dont show with badges on

Describe the bug
Some random peoples messages don't show if you have image badges on

Reproduction steps
Steps to reproduce the behavior:

  1. join channel
  2. have badges on
  3. get people to send messages
  4. notice some peoples don't show

Logs & Screenshots
This persons badges worked in my chat
You can see my message sent in throwpo1 but when I posted in my own chat my message didn't show but the bot did
Here you can see everyone with badges don't show Image 2

Environment information

note: if you are using additional mods, please make sure this bug can still be replicated without them.
if this bug can only be replicated with additional mods, please use the "Incompatibility report" template instead.

Additional context
At first I thought it was just if you had 2 badges but some peoples messages show with 2 badges as well

[FEATURE] Add an option that makes emotes work everywhere, not just in twitch output

Is your feature request related to a problem? Please describe.
I'm always frustrated when i type a twitch emote in something like the Hypixel guild chat, and its just a slob of text.

Describe the solution you'd like
It would be great if u could make it so you can turn this feature on with a command of some sorts, and maybe even import emotes from a specific streamer? if thats feasible.

Describe alternatives you've considered
I have considered looking through the code and making it on my own, but i have no idea what is going on half the time.

Additional context
N/A

[BUG] The colored names are just wrong

Describe the bug
The colors for the names are just wrong

Reproduction steps
Steps to reproduce the behavior:

  1. go to like any twitch chat

Expected behavior
The name colors to look like twitch chat

Environment information

  • OS: Arch Linux
  • Forge version: 2318
  • Mod version: idk newest
  • Other installed mods: shouldnt matter right?

note: if you are using additional mods, please make sure this bug can still be replicated without them.
if this bug can only be replicated with additional mods, please use the "Incompatibility report" template instead.

Additional context
https://cdn.discordapp.com/attachments/832652653292027904/930265664072081409/unknown.png
https://cdn.discordapp.com/attachments/832652653292027904/930268078309253140/unknown.png
Here i think my name should be aqua

https://cdn.discordapp.com/attachments/832652653292027904/930266383537815582/unknown.png
https://cdn.discordapp.com/attachments/832652653292027904/930266384624123944/unknown.png
Here streamelements should be dark blue, squidy should be red, speedrunner same color as streamelements
https://cdn.discordapp.com/attachments/832652653292027904/930266992039034950/unknown.png
https://cdn.discordapp.com/attachments/832652653292027904/930267016194031676/unknown.png
bird should be light green

[BUG] Error while setting token

Describe the bug
When I set the token via /twitch token or /twitch settoken xxxx

Expected behavior
Twitch token should be set and /twitch enable should work

Actual behavior
Error while executing commands. /twitch enable says An important action for the Twitch Chat is currently pending, please wait.

Logs & Screenshots
[15:06:01] [Client thread/INFO]: [CHAT] §aTwitch token was successfully updated! [15:06:01] [Client thread/INFO]: [CHAT] §7Restarting Twitch Chat... [15:06:01] [Client thread/INFO]: [CHAT] An unknown error occurred while attempting to perform this command [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: java.util.ConcurrentModificationException: An important async action is currently scheduled! [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at me.mini_bomba.streamchatmod.StreamChatMod.asyncTwitchAction(StreamChatMod.java:279) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at me.mini_bomba.streamchatmod.StreamChatMod.asyncRestartTwitch(StreamChatMod.java:322) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at me.mini_bomba.streamchatmod.commands.subcommands.TwitchSetTokenSubcommand.processSubcommand(TwitchSetTokenSubcommand.java:64) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at me.mini_bomba.streamchatmod.commands.TwitchCommand.func_71515_b(TwitchCommand.java:104) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraftforge.client.ClientCommandHandler.func_71556_a(ClientCommandHandler.java:72) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.client.gui.GuiScreen.func_175281_b(GuiScreen.java:446) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.client.gui.GuiScreen.func_175275_f(GuiScreen.java:437) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.optifine.gui.GuiChatOF.func_175275_f(GuiChatOF.java:41) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.client.gui.GuiChat.func_73869_a(GuiChat.java:111) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.client.gui.GuiScreen.func_146282_l(GuiScreen.java:578) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.client.gui.GuiScreen.func_146269_k(GuiScreen.java:534) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:1674) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:1024) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:349) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.client.main.Main.main(SourceFile:124) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at java.lang.reflect.Method.invoke(Method.java:498) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at java.lang.reflect.Method.invoke(Method.java:498) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at gg.essential.loader.stage2.relaunch.Relaunch.relaunch(Relaunch.java:91) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at gg.essential.loader.stage2.EssentialLoader.addToClasspath(EssentialLoader.java:86) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at gg.essential.loader.stage2.EssentialLoaderBase.addToClasspath(EssentialLoaderBase.java:320) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at gg.essential.loader.stage2.EssentialLoaderBase.load(EssentialLoaderBase.java:135) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at java.lang.reflect.Method.invoke(Method.java:498) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at gg.essential.loader.stage1.EssentialLoaderBase.load(EssentialLoaderBase.java:110) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at gg.essential.loader.stage1.EssentialSetupTweaker.<init>(EssentialSetupTweaker.java:41) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at java.lang.reflect.Constructor.newInstance(Constructor.java:423) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at gg.essential.loader.stage0.EssentialSetupTweaker.loadStage1(EssentialSetupTweaker.java:111) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at gg.essential.loader.stage0.EssentialSetupTweaker.<init>(EssentialSetupTweaker.java:34) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at club.sk1er.oldanimations.loader.AnimationsTweak.<init>(AnimationsTweak.java:19) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at java.lang.reflect.Constructor.newInstance(Constructor.java:423) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at java.lang.Class.newInstance(Class.java:442) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.launchwrapper.Launch.launch(Launch.java:98) [15:06:01] [Client thread/INFO]: [net.minecraftforge.client.ClientCommandHandler:func_71556_a:91]: at net.minecraft.launchwrapper.Launch.main(Launch.java:28)

Environment information

  • OS: Mac
  • Forge version: 11.15.1.2318
  • Mod version: StreamChatMod-git_80489715-for-1.8.9.jar but also happens with the one before it.
  • Other installed mods: Normal Skyblock mods. Mod signature data [15:01:06] [Client thread/DEBUG]: Valid Signatures: [15:01:06] [Client thread/DEBUG]: (e3c3d50c7c986df74c645c0ac54639741c90a557) FML (Forge Mod Loader 8.0.99.99) forge-1.8.9-11.15.1.2318-1.8.9.jar [15:01:06] [Client thread/DEBUG]: (e3c3d50c7c986df74c645c0ac54639741c90a557) Forge (Minecraft Forge 11.15.1.2318) forge-1.8.9-11.15.1.2318-1.8.9.jar [15:01:06] [Client thread/DEBUG]: (0422b7d5e421b108a16a2cc652eb05b5f35e9546) SkyblockExtras (SkyblockExtras 2.1.9.1) SkyblockExtras-2.1.9.1.jar [15:01:06] [Client thread/DEBUG]: Missing Signatures: [15:01:06] [Client thread/DEBUG]: mcp (Minecraft Coder Pack 9.19) minecraft.jar [15:01:06] [Client thread/DEBUG]: essential (Essential 1.0.0) Essential (forge_1.8.9).jar [15:01:06] [Client thread/DEBUG]: autotip (Autotip 3.0.1) Autotip-3.0.1 [1.8-1.12.2].jar [15:01:06] [Client thread/DEBUG]: BazaarNotifier (BazaarNotifier 1.4.7) BazaarNotifier-1.4.7.jar [15:01:06] [Client thread/DEBUG]: ct.js (ChatTriggers 1.3.2) ctjs-1.3.2-1.8.9.jar [15:01:06] [Client thread/DEBUG]: dungeonrooms (Dungeon Rooms Mod 3.2.4) Dungeon_Rooms-3.2.4.jar [15:01:06] [Client thread/DEBUG]: notenoughupdates (NotEnoughUpdates 2.0.0-REL) NotEnoughUpdates-2.0.0.jar [15:01:06] [Client thread/DEBUG]: sk1er_old_animations (Sk1er Old Animations 0.2.0) OldAnimations_1.0.0_-_beta_9.jar [15:01:06] [Client thread/DEBUG]: patcher (Patcher 1.7.0) Patcher-1.7.0 (1.8.9).jar [15:01:06] [Client thread/DEBUG]: text_overflow_scroll (Scrollable Tooltips 1.4.0) Scrollable Tooltips-1.4 (1.8.9).jar [15:01:06] [Client thread/DEBUG]: skyblockaddons (SkyblockAddons 1.6.1) SkyblockAddons-1.6.1-for-MC-1.8.9.jar [15:01:06] [Client thread/DEBUG]: skytils (Skytils 1.0.9-pre1.1) Skytils-1.0.9-pre1.1.jar [15:01:06] [Client thread/DEBUG]: streamchatmod (streamchatmod 1.4.0) StreamChatMod-git_80489715-for-1.8.9.jar

note: if you are using additional mods, please make sure this bug can still be replicated without them.
if this bug can only be replicated with additional mods, please use the "Incompatibility report" template instead.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.