Skip to content

Commit 82ab7d8

Browse files
Version 1.3.5.8
1 parent daa04a2 commit 82ab7d8

File tree

58 files changed

+1342
-963
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1342
-963
lines changed

changelog/release-1.3.5.8.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
Title: Bug Patch
2+
Summary: Minor bug fixes
3+
4+
## Improvements
5+
- Added the ability to have more interactions between different cosmetics and emotes
6+
- Improved cosmetic and emote settings and hide additional cosmetic/emote settings if cosmetics/emotes are disabled
7+
- Improved nameplate and tab-list Essential Icon settings
8+
- Improved game window title to say "Multiplayer (Hosted World)" when in a hosted world
9+
10+
## Wardrobe
11+
- Added the ability to move emotes between emote wheels by dragging it over the "switch emote wheel" arrows
12+
- Improved the layout of the Featured page
13+
14+
## Social Menu
15+
- Increased the character limit of chat messages from 500 to 2500
16+
- Added a visual indicator when a chat message approaches, or is over, the character limit
17+
- Added confirmation toast when inviting players to a world
18+
- Removed group invites for now due to various issues with how they behaved
19+
20+
## Bug Fixes
21+
- Fixed Essential nameplate indicator not being correctly affected by lighting in 1.8.9 & 1.12.2
22+
- Fixed the "Direct message notifications" and "Group message notifications" settings not working
23+
- Fixed the show/hide cosmetic keybind doing things despite cosmetics being disabled

elementa/layoutdsl/src/main/kotlin/gg/essential/gui/layoutdsl/layout.kt

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,6 @@ class LayoutScope(
8181
return IfDsl({ state() == null }, true)
8282
}
8383

84-
fun if_(condition: StateByScope.() -> Boolean, cache: Boolean = false, block: LayoutScope.() -> Unit): IfDsl {
85-
return if_(stateBy(condition), cache, block)
86-
}
87-
88-
fun <T> ifNotNull(stateBlock: StateByScope.() -> T?, cache: Boolean = false, block: LayoutScope.(T) -> Unit): IfDsl {
89-
return ifNotNull(stateBy(stateBlock), cache, block)
90-
}
91-
9284
class IfDsl(internal val elseState: StateV2<Boolean>, internal var cache: Boolean)
9385

9486
infix fun IfDsl.`else`(block: LayoutScope.() -> Unit) {
@@ -105,11 +97,6 @@ class LayoutScope(
10597
forEach({ trackedListOf(state()) }, cache) { block(it) }
10698
}
10799

108-
/** Makes available to the inner scope the value derived from the given [stateBlock]. */
109-
fun <T> bind(stateBlock: StateByScope.() -> T, cache: Boolean = false, block: LayoutScope.(T) -> Unit) {
110-
bind(stateBy(stateBlock), cache, block)
111-
}
112-
113100
/**
114101
* Repeats the inner block for each element in the given list state.
115102
* If the list state changes, components from old scopes are removed and new scopes are created and initialized as
@@ -314,12 +301,13 @@ inline fun UIComponent.layout(modifier: Modifier = Modifier, block: LayoutScope.
314301
*
315302
* Note: This does **not** change the size constrains of `this`. These must be set up manually or via [modifier].
316303
*/
317-
fun UIComponent.layoutAsBox(modifier: Modifier = Modifier, block: LayoutScope.() -> Unit) {
304+
fun UIComponent.layoutAsBox(modifier: Modifier = Modifier, block: LayoutScope.() -> Unit): UIComponent {
318305
contract {
319306
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
320307
}
321308
addChildModifier(Modifier.alignBoth(Alignment.Center))
322309
layout(modifier, block)
310+
return this
323311
}
324312

325313
/**

elementa/statev2/src/main/kotlin/gg/essential/gui/elementa/state/v2/animate.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ private class AnimationDriver(
4848
override fun setup() {
4949
previousDriverStateValue = driver.getUntracked()
5050
durationFrames = (Window.of(boundComponent).animationFPS * duration).toInt().coerceAtLeast(1)
51-
driverEffect = effect(ReferenceHolder.Weak) {
52-
val input = driver()
51+
driverEffect = driver.onChange(ReferenceHolder.Weak) { input ->
5352
animationEventList.add(AnimationEvent(previousDriverStateValue, input, durationFrames))
5453
previousDriverStateValue = input
5554
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ org.gradle.configureondemand=true
77
org.gradle.parallel.threads=128
88
org.gradle.jvmargs=-Xmx16G
99
minecraftVersion=11202
10-
version=1.3.5.7
10+
version=1.3.5.8

gui/elementa/src/main/kotlin/gg/essential/gui/common/extensions.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import gg.essential.elementa.utils.ObservableClearEvent
2424
import gg.essential.elementa.utils.ObservableList
2525
import gg.essential.elementa.utils.ObservableRemoveEvent
2626
import gg.essential.gui.elementa.state.v2.toV1
27-
import gg.essential.gui.util.hasWindow
2827
import kotlin.reflect.KProperty
2928

3029
@Deprecated("Using StateV1 is discouraged, use StateV2 instead")
@@ -60,14 +59,6 @@ fun <T : UIComponent> T.bindParent(
6059
index: Int? = null
6160
) = bindParent(parent, state.toV1(parent), delayed, index)
6261

63-
fun <T : UIComponent> T.bindFloating(state: State<Boolean>) = apply {
64-
state.onSetValueAndNow {
65-
if (hasWindow) {
66-
this.setFloating(it)
67-
}
68-
}
69-
}
70-
7162
fun <T : UIComponent> T.bindEffect(effect: Effect, state: State<Boolean>, delayed: Boolean = true) = apply {
7263
state.onSetValueAndNow {
7364
val update = {

gui/essential/src/main/kotlin/gg/essential/config/EssentialConfig.kt

Lines changed: 68 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,9 @@ object EssentialConfig : Vigilant2(), GuiEssentialPlatform.Config {
237237
val showQuickActionBarState = property("General.Experience.Quick Action Bar", true)
238238
var showQuickActionBar by showQuickActionBarState
239239

240+
val replaceWindowTitleState = property("General.General.Replace Window Title", true)
241+
var replaceWindowTitle by replaceWindowTitleState
242+
240243
val screenshotBrowserItemsPerRowState = property("Hidden.Hidden.screenshotBrowserItemsPerRow", 3)
241244
var screenshotBrowserItemsPerRow by screenshotBrowserItemsPerRowState
242245

@@ -384,62 +387,70 @@ object EssentialConfig : Vigilant2(), GuiEssentialPlatform.Config {
384387
category("Emotes") {
385388
subcategory("General") {
386389
switch(!disableEmotesState) {
387-
name = "Show emotes"
388-
description = "Show emote animations on yourself and other players."
389-
}
390-
391-
selector(allowEmoteSounds) {
392-
name = "Allow emote sounds"
393-
description = "Select who you can hear emote sounds from."
394-
options = AllowEmoteSounds.entries.map { it.label }
395-
}
396-
397-
switch(thirdPersonEmotesState) {
398-
name = "Play emotes in third person view"
399-
description = "Emotes will be shown in third-person view. You can still toggle between front and back view."
400-
}
401-
402-
switch(emotePreviewState) {
403-
name = "Emote preview"
404-
description = "When playing emotes, show a model of your character performing the emote in the upper left corner of the screen."
390+
name = "Emotes"
391+
description = "Better express yourself with emotes."
392+
}
393+
dynamic {
394+
if (!disableEmotesState()) {
395+
selector(allowEmoteSounds) {
396+
name = "Allow emote sounds"
397+
description = "Select who you can hear emote sounds from."
398+
options = AllowEmoteSounds.entries.map { it.label }
399+
}
400+
401+
switch(thirdPersonEmotesState) {
402+
name = "Play emotes in third person view"
403+
description = "Emotes will be shown in third-person view. You can still toggle between front and back view."
404+
}
405+
406+
switch(emotePreviewState) {
407+
name = "Emote preview"
408+
description = "When playing emotes, show a model of your character performing the emote in the upper left corner of the screen."
409+
}
410+
}
405411
}
406412
}
407413
}
408414

409415
category("Cosmetics") {
410416
subcategory("General") {
411417
switch(!disableCosmeticsState) {
412-
name = "Show cosmetics"
413-
description = "Show cosmetics on yourself and other players."
414-
}
415-
switch(ownCosmeticsHiddenStateWithSource.bimap({ it.first }, { it to true })) {
416-
name = "Hide your cosmetics"
417-
description = "Hides your equipped cosmetics for all players."
418-
}
419-
420-
val swapFirstTwo: (Int) -> Int = { if (it in 0..1) (it + 1) % 2 else it }
421-
422-
selector(cosmeticArmorSettingSelfState.bimap(swapFirstTwo, swapFirstTwo)) {
423-
name = "Cosmetics & armor visibility on me"
424-
description = "Cosmetics and armor may conflict with each other on your player. This setting does not effect what other players see."
425-
options = listOf("Only cosmetics", "Only armor", "Cosmetics and armor")
426-
}
427-
428-
selector(cosmeticArmorSettingOtherState.bimap(swapFirstTwo, swapFirstTwo)) {
429-
name = "Cosmetics & armor visibility on others"
430-
description = "Cosmetics and armor may conflict with each other on other players. This setting does not effect what other players see."
431-
options = listOf("Only cosmetics", "Only armor", "Cosmetics and armor")
432-
}
433-
434-
switch(disableCosmeticsInInventoryState) {
435-
name = "Hide cosmetics in inventory"
436-
description = "Hides your equipped cosmetics on the player preview inside your inventory."
418+
name = "Cosmetics"
419+
description = "Enhance your Minecraft character with cosmetics."
420+
}
421+
dynamic {
422+
if (!disableCosmeticsState()) {
423+
switch(ownCosmeticsHiddenStateWithSource.bimap({ it.first }, { it to true })) {
424+
name = "Hide your cosmetics"
425+
description = "Hide your equipped cosmetics for everyone."
426+
}
427+
428+
val swapFirstTwo: (Int) -> Int = { if (it in 0..1) (it + 1) % 2 else it }
429+
430+
selector(cosmeticArmorSettingSelfState.bimap(swapFirstTwo, swapFirstTwo)) {
431+
name = "Cosmetics & armor visibility on me"
432+
description = "Cosmetics and armor may conflict with each other on your player. This setting does not effect what other players see."
433+
options = listOf("Only cosmetics", "Only armor", "Cosmetics and armor")
434+
}
435+
436+
selector(cosmeticArmorSettingOtherState.bimap(swapFirstTwo, swapFirstTwo)) {
437+
name = "Cosmetics & armor visibility on others"
438+
description = "Cosmetics and armor may conflict with each other on other players. This setting does not effect what other players see."
439+
options = listOf("Only cosmetics", "Only armor", "Cosmetics and armor")
440+
}
441+
442+
switch(disableCosmeticsInInventoryState) {
443+
name = "Hide cosmetics in inventory"
444+
description = "Hides your equipped cosmetics on the player preview inside your inventory."
445+
}
446+
447+
switch(hideCosmeticsWhenServerOverridesSkinState) {
448+
name = "Hide cosmetics on server skins"
449+
description = "Hides cosmetics on players when the joined server modifies the user’s skins."
450+
}
451+
}
437452
}
438453

439-
switch(hideCosmeticsWhenServerOverridesSkinState) {
440-
name = "Hide cosmetics on server skins"
441-
description = "Hides cosmetics on players when the joined server modifies the user’s skins."
442-
}
443454
}
444455
}
445456

@@ -512,14 +523,17 @@ object EssentialConfig : Vigilant2(), GuiEssentialPlatform.Config {
512523
}
513524
}
514525

515-
subcategory("Essential Indicator") {
516-
switch(showEssentialIndicatorOnTabState) {
517-
name = "Essential indicator in tab-list"
518-
description = "Shows the indicator on other Essential players in the tab-list."
519-
}
526+
subcategory("Nameplates") {
520527
switch(showEssentialIndicatorOnNametagState) {
521-
name = "Essential indicator on nameplates"
522-
description = "Shows the indicator on other Essential players’ nameplates."
528+
name = "Essential icon on nameplates"
529+
description = "Shows the Essential icon on Essential players’ nameplates."
530+
}
531+
}
532+
533+
subcategory("Tab-list") {
534+
switch(showEssentialIndicatorOnTabState) {
535+
name = "Essential icon in tab-list"
536+
description = "Shows the Essential icon on Essential players in the tab-list."
523537
}
524538
}
525539

0 commit comments

Comments
 (0)