shedaniel / cloth-config Goto Github PK
View Code? Open in Web Editor NEWClient-Sided API for Minecraft 1.14
License: Other
Client-Sided API for Minecraft 1.14
License: Other
Having an EnumMap<Enum, Boolean>
GUI provider would be helpful for dynamic enum-based feature lists.
I'm managing keybinds with ClothConfig for a couple of reasons (no clashes with vanilla keybinds and modifiers are required), and it seems that ModifierKeyCode::matchesCurrentMouse
will only return true if the mouse key pressed was left, right or middle click on the mouse. Because of this, I wouldn't have the option of assigning a keybind to my mouse's button 4 or button 5 if I tried. GLFW has mouse keys going from 1-8, and they work in vanilla Minecraft as normal keybinds so this should be possible.
This is where said code is defined :^)
Note: I'm obviously not setting buttons 4 and 5 as defaults for anything, but they should be options for players to set for themselves nonetheless.
Hello. As I undestand, game crashes when API try to show an error, if value, entered to a field, is wrong.
Minecraft: 20w17a
Cloth Config: 4.0.2-unstable
Crash report:
https://gist.github.com/Bulldog83/e27a6cb5c025e0467aa84867fce9d22f
This annotation correctly generates a multiline comment when used with Jankson, as you can see here:
The ingame tooltip however does not reflect this correctly:
Possible solutions to this problem would be to either add your own @Comment
annotation using Components that gets transformed to the Jankson one when serialising (with the component being transformed using getString
), or to respect "\n" and/or "\r\n" when transforming @Comment
annotations into tooltips and add new lines accordingly
On Generating a Cloth Config Screen, the following snippet is present:
@Environment(EnvType.CLIENT)
class ModMenuIntegration implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> AutoConfig.getConfigScreen(ModConfig.class, parent);
}
}
However, this produces the error Bad return type in lambda expression: Supplier<Screen> cannot be converted to Screen
. Adding a .get()
at the end fixes it. Here is the complete snippet with the added fix:
@Environment(EnvType.CLIENT)
class ModMenuIntegration implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
- return parent -> AutoConfig.getConfigScreen(ModConfig.class, parent);
+ return parent -> AutoConfig.getConfigScreen(ModConfig.class, parent).get();
}
}
PS: not sure if this is the correct place to open an issue; also would've liked to send a PR, but couldn't find the repo for the docs. sorry
What if you added a checkerboard background to all color elements and then changed the overlaying color box opacity by the value in the textbox? That would make it obvious that the color is using alpha values and easier to test various values too.
Originally suggested on Discord by max.
Quite a few mods use specialized strings (like identifiers) in some way in their configuration, but the current string text fields are a bit lacking for that use. A few improvements could be made to make that easier for both the developer and the user.
Helper methods could also be offered for the special case of Identifier configs. A method could take a Registry and configure all the above based on the registered values.
I have a 2560x1440 pixel display. When Minecraft is in fullscreen, every configuration menu button looks like 2 separate buttons. Shrinking to a width of c. 2500 pixels connects the "buttons".
A search box and the ability to hide some options if another option is disabled.
The language files are missing "Yes" and "No", so they can't be translated to other languages.
Only I think the Insert button, which by default adds a new value before the first element, is a strange decision? Usually people add their values after the last element.
Maybe it's better to make insertInFront is false by default, and even better to add a new parameter so that the value is added before/after the selected element.
My game crashed when I highlighted over an option in the settings page for this mod
crash-2020-07-15_14.33.30-client.txt
This seems to have been caused by your manual implementation of #72 in 8ba610c.
You probably want to use the platform call from me.shedaniel.autoconfig.util.Utils
(which should probably be moved to me.shedaniel.cloth.clothconfig(2).impl
then) and maybe even change this to a file that's present on both loaders (options.txt?)
Currently working on a config menu for a visual mod, and I want to have changes in the config live update the world to make finding good settings not a total PITA. Unfortunately, at the moment, to get that live update, I'm forced to update the settings in the textGetter function.
Could you please update mod menu? The version that comes bundled with Cloth is outdated. Prospector recently changed the group id of ModMenu and having the same mod (comes bundled with another mod I depend on) with different group ids has caused quite a few strange problems with my local dev environment. I managed to work around it by manually editing the gradle cache and removing one of them, but that's not really a permanent solution.
I was looking for a way to hook in my own nameProvider
function for an Enum
that I'm exposing to Cloth via the bundled autoconfig
functionality. It seems that I could do this by registering my own provider using one of the registry.register*Provider
methods, but I was hoping to use a GuiTransformer
method instead.
It seems that in general the *Entry
classes do not have setters and are expecting all the setting to happen in the corresponding *Builder
classes, but I did see that IntegerListListEntry
exposes setMinimum
and setMaximum
, presumably to let the GuiTransformer
that handles BoundedDiscrete
to work.
Would it be reasonable to submit a patch like the following? I believe this would let me easily write a GuiTransformer
that can set a nameProvider
. Alternatively, maybe @ConfigEntry.Gui.EnumHandler
could take a nameProvider
as an optional argument? That would allow users to wire in the name provider more directly without adding a GuiTransformer
, but there is less precedent that I can see for that since no annotations currently accept a function or functional interface argument.
If you'd like to discuss more, I'm happy to discuss here or hop on Discord if that works better.
diff --git a/common/src/main/java/me/shedaniel/clothconfig2/gui/entries/SelectionListEntry.java b/common/src/main/java/me/shedaniel/clothconfig2/gui/entries/SelectionListEntry.java
index fdec40f..78ad4bc 100644
--- a/common/src/main/java/me/shedaniel/clothconfig2/gui/entries/SelectionListEntry.java
+++ b/common/src/main/java/me/shedaniel/clothconfig2/gui/entries/SelectionListEntry.java
@@ -53,7 +53,7 @@ public class SelectionListEntry<T> extends TooltipListEntry<T> {
private final Consumer<T> saveConsumer;
private final Supplier<T> defaultValue;
private final List<GuiEventListener> widgets;
- private final Function<T, Component> nameProvider;
+ private Function<T, Component> nameProvider;
@ApiStatus.Internal
@Deprecated
@@ -96,6 +96,11 @@ public class SelectionListEntry<T> extends TooltipListEntry<T> {
this.widgets = Lists.newArrayList(buttonWidget, resetButton);
this.nameProvider = nameProvider == null ? (t -> new TranslatableComponent(t instanceof Translatable ? ((Translatable) t).getKey() : t.toString())) : nameProvider;
}
+
+ public SelectionListEntry setNameProvider(Function<T, Component> nameProvider) {
+ this.nameProvider = nameProvider;
+ return this;
+ }
@Override
public void save() {
Cloth Config has a configuration menu that shows various buttons available to use with it.
Would it be possible to add a tab that shows which mods are currently appling the API? That would make it easy to see what mods are bundling an old version of Cloth Config.
Game crash upon clicking "settings" button on mod manager, as well as trying to open REI's hud by ctrl+o.
---- Minecraft Crash Report ----
// Who set us up the TNT?
Time: 2020-11-05 18:53:43 YEKT
Description: Rendering screen
org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered
at Not Enough Crashes deobfuscated stack trace.(1.16.3+build.47)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:208)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:178)
at org.spongepowered.asm.mixin.transformer.FabricMixinTransformerProxy.transformClassBytes(FabricMixinTransformerProxy.java:23)
at net.fabricmc.loader.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:157)
at net.fabricmc.loader.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:150)
at java.lang.ClassLoader.loadClass(Unknown Source)
at me.shedaniel.clothconfig2.api.ScissorsHandler.(ScissorsHandler.java:12)
at me.shedaniel.clothconfig2.gui.widget.DynamicEntryListWidget.render(DynamicEntryListWidget.java:199)
at me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWidget.render(DynamicNewSmoothScrollingEntryListWidget.java:136)
at me.shedaniel.clothconfig2.gui.ClothConfigScreen.render(ClothConfigScreen.java:237)
at net.minecraft.client.render.GameRenderer.render(GameRenderer:616)
at net.minecraft.client.MinecraftClient.render(MinecraftClient:1023)
at net.minecraft.client.MinecraftClient.run(MinecraftClient:656)
at net.minecraft.client.main.Main.main(Main:215)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:224)
at net.fabricmc.loader.launch.knot.Knot.init(Knot.java:141)
at net.fabricmc.loader.launch.knot.KnotClient.main(KnotClient.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:196)
at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:231)
at org.multimc.EntryPoint.listen(EntryPoint.java:143)
at org.multimc.EntryPoint.main(EntryPoint.java:34)
Caused by: org.spongepowered.asm.mixin.injection.throwables.InjectionError: LVT in me/shedaniel/clothconfig2/impl/ScissorsHandlerImpl::applyScissors()V has incompatible changes at opcode 112 in callback me/shedaniel/clothconfig2/impl/ScissorsHandlerImpl::applyScissorsOffset.
Expected: [Lme/shedaniel/math/Rectangle;]
Found: []
at org.spongepowered.asm.mixin.injection.callback.CallbackInjector.inject(CallbackInjector.java:497)
at org.spongepowered.asm.mixin.injection.callback.CallbackInjector.inject(CallbackInjector.java:447)
at org.spongepowered.asm.mixin.injection.code.Injector.inject(Injector.java:264)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.inject(InjectionInfo.java:385)
at org.spongepowered.asm.mixin.transformer.MixinTargetContext.applyInjections(MixinTargetContext.java:1284)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyInjections(MixinApplicatorStandard.java:1042)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyMixin(MixinApplicatorStandard.java:395)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:320)
at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:345)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:569)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:351)
... 29 more
-- Screen render details --
Screen name: me.shedaniel.clothconfig2.gui.ClothConfigScreen
Mouse location: Scaled: (626, 57). Absolute: (1879.000000, 172.000000)
Screen size: Scaled: (640, 360). Absolute: (1920, 1080). Scale factor of 3.000000
-- System Details --
Minecraft Version: 1.16.3
Minecraft Version ID: 1.16.3
Operating System: Windows 10 (amd64) version 10.0
Java Version: 1.8.0_271, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 9169390840 bytes (8744 MB) / 9643753472 bytes (9197 MB) up to 13362528256 bytes (12743 MB)
CPUs: 16
JVM Flags: 3 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xms4096m -Xmx14336m
Suspected Mods: Fabric Loader (fabricloader), Cloth Config v4 (cloth-config2)
Fabric Mods: artifice: Artifice 0.13.1+1.16.2-rc1
autoconfig1u: Auto Config v1 Updated 3.3.1
better_mod_button: Better Mod Button 1.1.4
cloth-api: Cloth API 1.4.9
cloth-armor-api-v1: Cloth Armor API v1 1.4.9
cloth-basic-math: Cloth Basic Math 0.5.1
cloth-client-events-v0: Cloth Client Events v0 1.4.9
cloth-common-events-v1: Cloth Common Events v1 1.4.9
cloth-config2: Cloth Config v4 4.8.3
cloth-datagen-api-v1: Cloth Datagen v1 1.4.9
cloth-durability-bar-api-v1: Cloth Durability Bar API v1 1.4.9
cloth-dynamic-registry-api-v1: Cloth Dynamic Registry API v1 1.4.9
cloth-scissors-api-v1: Cloth Scissors API v1 1.4.9
cloth-utils-v1: Cloth Utils v1 1.4.9
colormatic: Colormatic 2.2.7+mc.1.16.3
durabilityviewer: Giselbaers Durability Viewer 1.16.2-fabric0.17.2-1.8.7
dynamicfps: Dynamic FPS 1.2.1
fabric: Fabric API 0.25.0+build.415-1.16
fabric-api-base: Fabric API Base 0.2.0+9f0fb4b895
fabric-biome-api-v1: Fabric Biome API (v1) 3.0.0+8367596d95
fabric-blockrenderlayer-v1: Fabric BlockRenderLayer Registration (v1) 1.1.4+c6a8ea8995
fabric-command-api-v1: Fabric Command API (v1) 1.0.9+a4467d2a95
fabric-commands-v0: Fabric Commands (v0) 0.2.0+52d3083695
fabric-containers-v0: Fabric Containers (v0) 0.1.8+045df74f95
fabric-content-registries-v0: Fabric Content Registries (v0) 0.1.9+059ea86695
fabric-crash-report-info-v1: Fabric Crash Report Info (v1) 0.1.2+b7f9825d95
fabric-events-interaction-v0: Fabric Events Interaction (v0) 0.4.1+f8ac1db295
fabric-events-lifecycle-v0: Fabric Events Lifecycle (v0) 0.2.0+16acbe5b95
fabric-game-rule-api-v1: Fabric Game Rule API (v1) 1.0.3+a4467d2a95
fabric-item-api-v1: Fabric Item API (v1) 1.2.0+f8ac1db295
fabric-item-groups-v0: Fabric Item Groups (v0) 0.2.1+a4467d2a95
fabric-key-binding-api-v1: Fabric Key Binding API (v1) 1.0.1+730711c695
fabric-keybindings-v0: Fabric Key Bindings (v0) 0.2.0+3fa9f7c595
fabric-language-kotlin: Fabric Language Kotlin 1.4.0+build.1
fabric-lifecycle-events-v1: Fabric Lifecycle Events (v1) 1.2.0+74cc3b2095
fabric-loot-tables-v1: Fabric Loot Tables (v1) 1.0.1+432ea18895
fabric-mining-levels-v0: Fabric Mining Levels (v0) 0.1.2+b764ce9995
fabric-models-v0: Fabric Models (v0) 0.1.1+f8ac1db295
fabric-networking-blockentity-v0: Fabric Networking Block Entity (v0) 0.2.5+b50ffc7b95
fabric-networking-v0: Fabric Networking (v0) 0.1.10+e00ecb5f95
fabric-object-builder-api-v1: Fabric Object Builder API (v1) 1.9.2+a89534ab95
fabric-object-builders-v0: Fabric Object Builders (v0) 0.7.1+a4467d2a95
fabric-particles-v1: fabric-particles-v1 0.2.2+fb0d9b0e95
fabric-registry-sync-v0: Fabric Registry Sync (v0) 0.6.1+a4467d2a95
fabric-renderer-api-v1: Fabric Renderer API (v1) 0.3.3+a4467d2a95
fabric-renderer-indigo: Fabric Renderer - Indigo 0.4.3+a4467d2a95
fabric-renderer-registries-v1: Fabric Renderer Registries (v1) 2.2.0+f8ac1db295
fabric-rendering-data-attachment-v1: Fabric Rendering Data Attachment (v1) 0.1.4+f8ac1db295
fabric-rendering-fluids-v1: Fabric Rendering Fluids (v1) 0.1.12+f8ac1db295
fabric-rendering-v0: Fabric Rendering (v0) 1.1.1+f8ac1db295
fabric-rendering-v1: Fabric Rendering (v1) 1.3.1+f8ac1db295
fabric-resource-loader-v0: Fabric Resource Loader (v0) 0.3.1+facf3bbf95
fabric-screen-handler-api-v1: Fabric Screen Handler API (v1) 1.1.0+8724984195
fabric-structure-api-v1: Fabric Structure API (v1) 1.1.0+f8ac1db295
fabric-tag-extensions-v0: Fabric Tag Extensions (v0) 1.0.3+ac8e8c5995
fabric-textures-v0: Fabric Textures (v0) 1.0.5+a4467d2a95
fabric-tool-attribute-api-v1: Fabric Tool Attribute API (v1) 1.2.4+2b46237995
fabricloader: Fabric Loader 0.10.6+build.214
fabrishot: Fabrishot 1.2.1
fiber: fiber 0.23.0-2
gbfabrictools: GBfabrictools 1.2.3+1.16.2
harvest: Harvest 1.2.12
lambdynlights: LambDynamicLights 1.3.1+1.16.3
lithium: Lithium 0.5.6
loadcatcher: Entrypoint Catcher 2.0.0
minecraft: Minecraft 1.16.3
mm: Manningham Mills 2.1
modmenu: Mod Menu 1.14.6+build.31
notenoughcrashes: Not Enough Crashes 2.1.4+1.16.1
okzoomer: Ok Zoomer 4.0.1+1.16.2
org_codehaus_groovy_groovy: groovy 3.0.3
org_codehaus_groovy_groovy-jsr223: groovy-jsr223 3.0.3
org_jetbrains_annotations: annotations 20.0.0
org_jetbrains_kotlin_kotlin-reflect: kotlin-reflect 1.4.0
org_jetbrains_kotlin_kotlin-stdlib: kotlin-stdlib 1.4.0
org_jetbrains_kotlin_kotlin-stdlib-jdk7: kotlin-stdlib-jdk7 1.4.0
org_jetbrains_kotlin_kotlin-stdlib-jdk8: kotlin-stdlib-jdk8 1.4.0
org_jetbrains_kotlinx_kotlinx-coroutines-jdk8: kotlinx-coroutines-jdk8 1.3.9
phosphor: Phosphor 0.6.0+build.7
raisedclouds: Raised Clouds 1.0.0
roughlyenoughitems: Roughly Enough Items 5.8.1
roughlyenoughitems-api: REI (API) 5.8.1
roughlyenoughitems-default-plugin: REI (Default Plugin) 5.8.1
roughlyenoughitems-runtime: REI (Runtime) 5.8.1
roughlyenoughresources: Roughly Enough Resources 2.1.2
slight-gui-modifications: 'Slight' GUI Modifications 1.5.0
smoothscrollingeverywhere: Smooth Scrolling Everywhere 3.0.3-unstable
sodium: Sodium 0.1.0
spruceui: SpruceUI 1.6.4
torohealth: ToroHealth Damage Indicators 1.16.3-fabric-1
xaeroworldmap: Xaero's World Map 1.11.0
Launched Version: MultiMC5
Backend library: LWJGL version 3.2.2 build 10
Backend API: GeForce GTX 950/PCIe/SSE2 GL version 4.6.0 NVIDIA 457.09, NVIDIA Corporation
GL Caps: Using framebuffer using OpenGL 3.0
Using VBOs: Yes
Is Modded: Definitely; Client brand changed to 'fabric'
Type: Client (map_client.txt)
Graphics mode: fancy
Resource Packs: vanilla, slightguimodifications:cts_textures, fabric/fabric-renderer-api-v1, fabric/fabric-keybindings-v0, fabric/notenoughcrashes, fabric/fabricloader, fabric/artifice, fabric/lithium, fabric/fabric-containers-v0, fabric/fabric-object-builder-api-v1, fabric/fabric-game-rule-api-v1, fabric/fabric-api-base, fabric/mm, fabric/fabric-rendering-data-attachment-v1, fabric/lambdynlights, fabric/fabric-textures-v0, fabric/fabric-rendering-fluids-v1, fabric/raisedclouds, fabric/fabric-blockrenderlayer-v1, fabric/fabric-lifecycle-events-v1, fabric/sodium, fabric/fabric-renderer-registries-v1, fabric/fabric-loot-tables-v1, fabric/fabric, fabric/dynamicfps, fabric/fabric-networking-v0, fabric/okzoomer, fabric/fabric-networking-blockentity-v0, fabric/fabric-screen-handler-api-v1, fabric/modmenu, fabric/fabrishot, fabric/phosphor, fabric/fabric-tool-attribute-api-v1, fabric/fabric-renderer-indigo, fabric/fabric-crash-report-info-v1, fabric/fabric-events-interaction-v0, fabric/fabric-item-api-v1, fabric/fabric-language-kotlin, fabric/slight-gui-modifications, fabric/fabric-rendering-v0, fabric/fabric-key-binding-api-v1, fabric/fabric-rendering-v1, fabric/cloth-config2, fabric/better_mod_button, fabric/spruceui, fabric/smoothscrollingeverywhere, fabric/autoconfig1u, fabric/fabric-resource-loader-v0, fabric/fabric-content-registries-v0, fabric/fabric-tag-extensions-v0, fabric/fabric-biome-api-v1, fabric/colormatic, fabric/fabric-registry-sync-v0, fabric/fabric-mining-levels-v0, fabric/fabric-events-lifecycle-v0, fabric/fabric-item-groups-v0, fabric/fabric-models-v0, fabric/fabric-object-builders-v0, fabric/harvest, fabric/torohealth, fabric/roughlyenoughitems, fabric/roughlyenoughitems-runtime, fabric/xaeroworldmap, file/Soartex_Fanver_(8.0.2).zip, fabric/durabilityviewer, fabric/fabric-command-api-v1, fabric/gbfabrictools, fabric/roughlyenoughresources, file/Leviosa.zip (incompatible)
Current Language: Русский (Россия)
CPU: 16x Intel(R) Core(TM) i9-9900 CPU @ 3.10GHz
Client Crashes Since Restart: 1
Integrated Server Crashes Since Restart: 0
Extended from Loading Timer #7
i was following by the wiki and i end up getting crashing. After seeing the crash log, i noticed that this line of code is what i think is trying to call a class that doesn't exist. Also this didn't occur when i was trying to run the command "gradlew runClient."
ill probably keep you updated on this.
Calling DropdownMenuBuilder#setErrorSupplier
will cause the resulting DropdownMenu
to StackOverflow :
java.lang.StackOverflowError: Rendering screen
at me.shedaniel.clothconfig2.impl.builders.DropdownMenuBuilder.lambda$build$6(DropdownMenuBuilder.java:97)
at me.shedaniel.clothconfig2.api.AbstractConfigEntry.getConfigError(AbstractConfigEntry.java:25)
at me.shedaniel.clothconfig2.gui.entries.DropdownBoxEntry$SelectionTopCellElement.getConfigError(DropdownBoxEntry.java:632)
at me.shedaniel.clothconfig2.gui.entries.DropdownBoxEntry$SelectionTopCellElement.hasConfigError(DropdownBoxEntry.java:640)
at me.shedaniel.clothconfig2.gui.entries.DropdownBoxEntry$DefaultSelectionTopCellElement.getValue(DropdownBoxEntry.java:708)
at me.shedaniel.clothconfig2.gui.entries.DropdownBoxEntry$SelectionElement.getValue(DropdownBoxEntry.java:192)
at me.shedaniel.clothconfig2.gui.entries.DropdownBoxEntry.getValue(DropdownBoxEntry.java:96)
at me.shedaniel.clothconfig2.impl.builders.DropdownMenuBuilder.lambda$build$6(DropdownMenuBuilder.java:97)
at me.shedaniel.clothconfig2.api.AbstractConfigEntry.getConfigError(AbstractConfigEntry.java:25)
---- Minecraft Crash Report ----
// I feel sad now :(
Time: 2020-11-22 20:09:19 PST
Description: Rendering screen
org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered
at Not Enough Crashes deobfuscated stack trace.(1.15.1+build.36)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:208)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:178)
at org.spongepowered.asm.mixin.transformer.FabricMixinTransformerProxy.transformClassBytes(FabricMixinTransformerProxy.java:23)
at net.fabricmc.loader.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:157)
at net.fabricmc.loader.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:150)
at java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at me.shedaniel.clothconfig2.api.ScissorsHandler.(ScissorsHandler.java:12)
at me.shedaniel.clothconfig2.gui.widget.DynamicEntryListWidget.method_25394(DynamicEntryListWidget.java:199)
at me.shedaniel.clothconfig2.gui.widget.DynamicNewSmoothScrollingEntryListWidget.method_25394(DynamicNewSmoothScrollingEntryListWidget.java:136)
at me.shedaniel.clothconfig2.gui.ClothConfigScreen.method_25394(ClothConfigScreen.java:237)
at net.minecraft.client.render.GameRenderer.render(GameRenderer:616)
at net.minecraft.client.MinecraftClient.render(MinecraftClient:1048)
at net.minecraft.client.MinecraftClient.run(MinecraftClient:681)
at net.minecraft.client.main.Main.main(Main:215)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:567)
at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:224)
at net.fabricmc.loader.launch.knot.Knot.init(Knot.java:141)
at net.fabricmc.loader.launch.knot.KnotClient.main(KnotClient.java:27)
Caused by: org.spongepowered.asm.mixin.injection.throwables.InjectionError: LVT in me/shedaniel/clothconfig2/impl/ScissorsHandlerImpl::applyScissors()V has incompatible changes at opcode 112 in callback me/shedaniel/clothconfig2/impl/ScissorsHandlerImpl::applyScissorsOffset.
Expected: [Lme/shedaniel/math/Rectangle;]
Found: []
at org.spongepowered.asm.mixin.injection.callback.CallbackInjector.inject(CallbackInjector.java:497)
at org.spongepowered.asm.mixin.injection.callback.CallbackInjector.inject(CallbackInjector.java:447)
at org.spongepowered.asm.mixin.injection.code.Injector.inject(Injector.java:264)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.inject(InjectionInfo.java:385)
at org.spongepowered.asm.mixin.transformer.MixinTargetContext.applyInjections(MixinTargetContext.java:1284)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyInjections(MixinApplicatorStandard.java:1042)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyMixin(MixinApplicatorStandard.java:395)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:320)
at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:345)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:569)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:351)
... 21 more
-- Screen render details --
Screen name: me.shedaniel.clothconfig2.gui.ClothConfigScreen
Mouse location: Scaled: (944, 57). Absolute: (1888.000000, 114.000000)
Screen size: Scaled: (960, 500). Absolute: (1920, 1000). Scale factor of 2.000000
-- System Details --
Minecraft Version: 1.16.4
Minecraft Version ID: 1.16.4
Operating System: Linux (amd64) version 5.9.0-050900-generic
Java Version: 13.0.2, AdoptOpenJDK
Java VM Version: OpenJDK 64-Bit Server VM (mixed mode, sharing), AdoptOpenJDK
Memory: 948588368 bytes (904 MB) / 2717908992 bytes (2592 MB) up to 4294967296 bytes (4096 MB)
CPUs: 4
JVM Flags: 8 total; -Xss1M -Xmx4G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M
Suspected Mods: Cloth Config v4 (cloth-config2), Fabric Loader (fabricloader)
Fabric Mods: anycapes: AnyCapes 1.0.0
artifice: Artifice 0.13.1+1.16.2-rc1
authme: Auth Me 1.4.0
autoconfig1u: Auto Config v1 Updated 3.2.2
bedrockify: BedrockIfy 0.2.0
better_mod_button: Better Mod Button 1.1.4
carpet: Carpet Mod in Fabric 1.4.12
chat_heads: Chat Heads 0.1.2+1.16.2
clientcommands: Client Commands 2.4.7
cloth-basic-math: Cloth Basic Math 0.5.1
cloth-client-events-v0: Cloth Client Events v0 1.4.5
cloth-config2: Cloth Config v4 4.8.3
colormatic: Colormatic 2.2.7+mc.1.16.3
colorunchained: Color Unchained 1.1.1-1.16.4
cotton-config: Cotton Config 1.0.0-rc.7
cotton-logging: Cotton Logging 1.0.0-rc.4
crawl: Crawl 0.8.0
cullparticles: Cull Particles 1.0
dynamicfps: Dynamic FPS 1.2.1
eggtab: Egg Tab 1.1.2+1.15-1.16
everythingisahat: Everything is a Hat 1.0.3
fabric: Fabric API 0.26.0+1.16
fabric-api-base: Fabric API Base 0.2.0+ba858fb83a
fabric-biome-api-v1: Fabric Biome API (v1) 3.1.0+2e23b97c3a
fabric-blockrenderlayer-v1: Fabric BlockRenderLayer Registration (v1) 1.1.4+c6a8ea8995
fabric-command-api-v1: Fabric Command API (v1) 1.0.9+6a2618f53a
fabric-commands-v0: Fabric Commands (v0) 0.2.0+6a2618f53a
fabric-containers-v0: Fabric Containers (v0) 0.1.8+045df74f95
fabric-content-registries-v0: Fabric Content Registries (v0) 0.1.9+6a2618f53a
fabric-crash-report-info-v1: Fabric Crash Report Info (v1) 0.1.2+b7f9825d3a
fabric-events-interaction-v0: Fabric Events Interaction (v0) 0.4.1+6a2618f53a
fabric-events-lifecycle-v0: Fabric Events Lifecycle (v0) 0.2.0+16acbe5b95
fabric-game-rule-api-v1: Fabric Game Rule API (v1) 1.0.3+a4467d2a3a
fabric-item-api-v1: Fabric Item API (v1) 1.2.0+6a2618f53a
fabric-item-groups-v0: Fabric Item Groups (v0) 0.2.1+6a2618f53a
fabric-key-binding-api-v1: Fabric Key Binding API (v1) 1.0.1+730711c63a
fabric-keybindings-v0: Fabric Key Bindings (v0) 0.2.0+3fa9f7c595
fabric-language-kotlin: Fabric Language Kotlin 1.4.0+build.1
fabric-lifecycle-events-v1: Fabric Lifecycle Events (v1) 1.2.0+6a2618f53a
fabric-loot-tables-v1: Fabric Loot Tables (v1) 1.0.1+6a2618f53a
fabric-mining-levels-v0: Fabric Mining Levels (v0) 0.1.2+b764ce9995
fabric-models-v0: Fabric Models (v0) 0.1.1+6a2618f53a
fabric-networking-blockentity-v0: Fabric Networking Block Entity (v0) 0.2.5+b50ffc7b95
fabric-networking-v0: Fabric Networking (v0) 0.1.10+6a2618f53a
fabric-object-builder-api-v1: Fabric Object Builder API (v1) 1.9.2+6a2618f53a
fabric-object-builders-v0: Fabric Object Builders (v0) 0.7.1+6a2618f53a
fabric-particles-v1: fabric-particles-v1 0.2.2+fb0d9b0e95
fabric-registry-sync-v0: Fabric Registry Sync (v0) 0.6.1+6a2618f53a
fabric-renderer-api-v1: Fabric Renderer API (v1) 0.3.3+6a2618f53a
fabric-renderer-indigo: Fabric Renderer - Indigo 0.4.3+6a2618f53a
fabric-renderer-registries-v1: Fabric Renderer Registries (v1) 2.2.0+6a2618f53a
fabric-rendering-data-attachment-v1: Fabric Rendering Data Attachment (v1) 0.1.4+6a2618f53a
fabric-rendering-fluids-v1: Fabric Rendering Fluids (v1) 0.1.12+6a2618f53a
fabric-rendering-v0: Fabric Rendering (v0) 1.1.1+6a2618f53a
fabric-rendering-v1: Fabric Rendering (v1) 1.4.0+6a2618f53a
fabric-resource-loader-v0: Fabric Resource Loader (v0) 0.3.2+1944f3e03a
fabric-screen-handler-api-v1: Fabric Screen Handler API (v1) 1.1.0+6a2618f53a
fabric-structure-api-v1: Fabric Structure API (v1) 1.1.0+f8ac1db23a
fabric-tag-extensions-v0: Fabric Tag Extensions (v0) 1.0.3+6a2618f53a
fabric-textures-v0: Fabric Textures (v0) 1.0.5+6a2618f53a
fabric-tool-attribute-api-v1: Fabric Tool Attribute API (v1) 1.2.5+6a2618f53a
fabricloader: Fabric Loader 0.10.8
fabrishot: Fabrishot 1.1.0
fastbench: FastBench 2.3
fastfurnace: FastFurnace 2.3
fiber: fiber 0.23.0-2
jankson: Jankson 3.0.1+j1.2.0
jumpoverfences: JumpOverFences 1.16-0.0.3
kirin: Kirin UI 1.7-1.16.2
lambdacontrols: LambdaControls 1.5.0+1.16.2
lambdynlights: LambDynamicLights 1.3.2+1.16.4
libgui: LibGui 3.0.0+1.16.3
litematica: Litematica 0.0.0-dev.20200913.215807
lithium: Lithium 0.6.0
lithium-api: Lithium API 0.6.0
loadcatcher: Entrypoint Catcher 2.0.0
malilib: MaLiLib 0.10.0-dev.21+arne.1
me_shedaniel_cloth_basic-math: basic-math 0.3.0
minecraft: Minecraft 1.16.4
minecraftcapes: MinecraftCapes Mod 10
mm: Manningham Mills 2.1
modid: Damage Tilt 1.16-fabric-0.1.0
modmenu: Mod Menu 1.14.6+build.31
multiconnect: MultiConnect 1.3.34
multiconnect-api: MultiConnect API 1.3.34
nbtviewer: NBT Viewer 1.0.0
notenoughcrashes: Not Enough Crashes 2.1.4+1.16.1
okzoomer: Ok Zoomer 4.0.1+1.16.2
org_codehaus_groovy_groovy: groovy 3.0.3
org_codehaus_groovy_groovy-jsr223: groovy-jsr223 3.0.3
org_jetbrains_annotations: annotations 20.0.0
org_jetbrains_kotlin_kotlin-reflect: kotlin-reflect 1.4.0
org_jetbrains_kotlin_kotlin-stdlib: kotlin-stdlib 1.4.0
org_jetbrains_kotlin_kotlin-stdlib-jdk7: kotlin-stdlib-jdk7 1.4.0
org_jetbrains_kotlin_kotlin-stdlib-jdk8: kotlin-stdlib-jdk8 1.4.0
org_jetbrains_kotlinx_kotlinx-coroutines-jdk8: kotlinx-coroutines-jdk8 1.3.9
phosphor: Phosphor 0.6.0+build.7
raisedclouds: Raised Clouds 1.0.0
slight-gui-modifications: 'Slight' GUI Modifications 1.4.0
smoothscrollingeverywhere: Smooth Scrolling Everywhere 3.0.3-unstable
sodium: Sodium 0.1.0
spruceui: SpruceUI 1.6.4
textbook: Textbook 1.0.0
voidfog: Void Fog 2.4+1.16.2
window_title_changer: Window Title Changer 2.1.0-1.16.2
worldedit: WorldEdit 7.2.0-SNAPSHOT+5436-2226980
xlpackets: XLPackets 1.1
Launched Version: fabric-loader-0.10.8-1.16.4
Backend library: LWJGL version 3.2.2 build 10
Backend API: Radeon RX 580 Series (POLARIS10, DRM 3.39.0, 5.9.0-050900-generic, LLVM 11.0.0) GL version 4.6 (Compatibility Profile) Mesa 20.3.0-rc2, AMD
GL Caps: Using framebuffer using OpenGL 3.0
Using VBOs: Yes
Is Modded: Definitely; Client brand changed to 'fabric'
Type: Client (map_client.txt)
Graphics mode: fancy
Resource Packs: slightguimodifications:cts_textures, vanilla, file/§l2D Blocks GUI§r (incompatible), file/VanillaTweaks_r722471.zip, fabric/autoconfig1u, fabric/carpet, fabric/chat_heads, fabric/clientcommands (incompatible), fabric/cloth-config2, fabric/cullparticles, fabric/eggtab, fabric/everythingisahat, fabric/fabric, fabric/fabric-api-base, fabric/fabric-biome-api-v1, fabric/fabric-blockrenderlayer-v1, fabric/fabric-containers-v0, fabric/fabric-content-registries-v0, fabric/fabric-crash-report-info-v1, fabric/fabric-events-interaction-v0, fabric/fabric-events-lifecycle-v0, fabric/fabric-game-rule-api-v1, fabric/fabric-item-api-v1, fabric/fabric-item-groups-v0, fabric/fabric-key-binding-api-v1, fabric/fabric-keybindings-v0, fabric/fabric-language-kotlin, fabric/fabric-lifecycle-events-v1, fabric/fabric-loot-tables-v1, fabric/fabric-mining-levels-v0, fabric/fabric-models-v0, fabric/fabric-networking-blockentity-v0, fabric/fabric-networking-v0, fabric/fabric-object-builder-api-v1, fabric/fabric-object-builders-v0, fabric/fabric-registry-sync-v0, fabric/fabric-renderer-api-v1, fabric/fabric-renderer-indigo, fabric/fabric-renderer-registries-v1, fabric/fabric-rendering-data-attachment-v1, fabric/fabric-rendering-fluids-v1, fabric/fabric-rendering-v0, fabric/fabric-rendering-v1, fabric/fabric-resource-loader-v0, fabric/fabric-screen-handler-api-v1, fabric/fabric-tag-extensions-v0, fabric/fabric-textures-v0, fabric/fabric-tool-attribute-api-v1, fabric/fabricloader, fabric/fastfurnace, fabric/jankson, fabric/lambdacontrols, fabric/litematica (incompatible), fabric/lithium, fabric/malilib (incompatible), fabric/modid, fabric/modmenu, fabric/multiconnect-api, fabric/okzoomer, fabric/spruceui, fabric/voidfog (incompatible), fabric/worldedit (incompatible), file/VanillaTweaks-itemstitching.zip, fabric/artifice, fabric/colormatic, fabric/dynamicfps, fabric/fabrishot, fabric/lambdynlights, fabric/libgui, fabric/minecraftcapes, fabric/mm, fabric/nbtviewer, fabric/notenoughcrashes, fabric/phosphor, fabric/raisedclouds, fabric/slight-gui-modifications, fabric/smoothscrollingeverywhere, fabric/sodium, fabric/textbook, fabric/window_title_changer, fabric/anycapes, fabric/authme, fabric/multiconnect
Current Language: English (US)
CPU: 4x AMD Athlon(tm) X4 880K Quad Core Processor
Client Crashes Since Restart: 1
Integrated Server Crashes Since Restart: 0
Certain builders return raw types instead of their true parameterized types, causing chained methods to lose info about the typing.
Hi.
I understand that you are using the configuration menu visible from Mod Menu as a demo for how things should look like. Yet, it's not really elegant for end users to see this stuff just because the mods they're using utilize a library mod; none of the other library mods my mods use do this and it clutters the menu with something that is not really useful. I suggest instead that you instead post screenshots on CurseForge for people to see what they're getting.
Cheers,
Bogdan
As of 4.9, many packages were renamed and moved around
One of those changes was shadowing some code in me.shedaniel.cloth.cloth-config.shadowed
The hyphen '-' character is considered an illegal character for packages, and will break several packages under this domain, like @\Comment
(Image from Intellij IDEA)
Some IDEs will complain further about this:
(image from VScode)
Please follow naming conventions, so this doesn't break:
https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
Hello!
Just to clarify: did you have intentions to update the mod for snapshots as well?
I read some modders in Fabricord which uses cloth as dependency willing to update their mods but cant since it doesn't have a snapshot build. So i went ahead and requested in the requests channel for someone to fork/PR this repo to update for snapshots, but after i felt bad because i didnt ask here before.
Thanks in advance for any answer!
Hello.
I've tried to make DropDown menu. But it shows "No suggestions" instead of list with variants.
My code:
mapAppearance.addEntry(entryBuilder.startDropdownMenu(lang("current_skin"), MapSkin.getCurrentSkin(), MapSkin::getSkinByName, MapSkin::getName)
.setDefaultValue(MapSkin.getSkin((int) JustMap.CONFIG.getDefault("current_skin")))
.setSelections(MapSkin.getSkins())
.build());
MapSkin.getSkins() returns not empty List, I've checked.
And menu in your config shows only one element, but in the Enum in ClothConfig are several of them.
If reasonable, it would be handy (depending on the mod) to not render the background at all. In my current case it would help players see changes to nameplates without backing out of the menu to evaluate, then navigating back in to tweak further.
This idea came from a glitch while playing with Cloth Config's demo configs. All the UI and shading rendered properly but the background was missing, so I could see the paused world behind. I didn't know it was an glitch at the time and haven't been able to reproduce it since.
Edit: I forgot to add, I've tried using 8-bit and 24-bit transparent textures as the background to achieve this effect but they result in opaque backgrounds. I only tried in 1.15.2.
While using EnumSelectorBuilder I have found that I cannot use a very sensible function like
public static Text nameProvider(MyEnum value) ...
via method reference as an argument for the method setEnumNameProvider
in EnumSelectorBuilder
.
Argument of setEnumNameProvider
(here) and field enumNameProvider
(here) in EnumSelectorBuilder
as well as parameters enumNameProvider
of constructors of EnumListEntry
(here, here and here) have the type Function<Enum, Text>
but it seems that they all should have the type Function<T, Text>
(T
in both classes is defined as T extends Enum<?>
).
This appears to require the fabric api, but I don't see it in fabric.mods.json.
On the ModMenu integration page ModMenu is referred to as Cloth Config.
Replace ABC with the version of Cloth Config desired, the versions of Cloth Config can be found at CurseForge or Maven.
The links are correct though.
"modmenu:api": true
Githubs search is really useful if you use topics. To find new libraries, I use topic:minecraft-fabric topic:library
.
Using them makes a repository easy to discover and more visible.
You should add the following topics to your repository (these are the most common in fabric projects and fitting for this):
This is small change that can be done in less than a minute and it would help future users a lot.
Thank you.
P.S. Also do this for AutoConfig propably.
Once added on the development environment, the game crashes on Mixin-ing.
[14:44:53] [main/FATAL] (mixin) Mixin apply failed fabric-biomes-v1.mixins.json:MixinBiomeSource [...]
Excluding the Fabric API transitive dependency did the trick, so I wanted to give a heads up.
Can you add the ability to set the step of changing the value for the Sliders?
Hello. I want to add a config entry depends of the value of another entry. It would be great if it were possible to disable the config entry based of the value of another entry.
This builder would require an additional function parameter to compute the widgets, as they won't be known at runtime like the other lists.
If it's not too difficult to implement, a Map entry builder would be nice to have. One of my config options is a Map<String, Integer>, and I have a feeling I'll end up with more Map options in the future. Because there are so many key-value type combinations, I wouldn't expect a bunch of functions with different types, like ConfigEntryBuilder#startStrIntMap
. Instead, I feel like ConfigEntryBuilder#startMap
that uses generics to determine the type would be the way to go, and just throw an exception if someone tries to use a type that isn't supported anywhere else in the config.
Alternatively, if you have a better idea for how to represent something like this in the config GUI, I'm open to suggestions.
EDIT: I realized a decent workaround for my particular scenario would be to turn it into a string list that uses a separator character to separate the key and value within each string. It's not the best solution, but it would be fairly easy to do and would work better than not showing the option.
Currently, "dropdown menus" behave as text fields with suggestions. This is suboptimal for short sets of possible values like common enums, as users have to erase the existing value to see the possibilities instead of seeing them from a single click.
An alternative to current dropdown menus with no text input and where every possibility is always shown would probably be better than both cycling buttons and text input with suggestions.
A secondary suggestion helping with the above problem is to allow right clicking a text field to erase its current content.
When loading the mod, a RuntimeException is thrown:
Caused by: java.lang.RuntimeException: Namespace (intermediary) does not match current runtime namespace (named)
I used
modApi "me.shedaniel.cloth:config-2:2.9.3"
in build.gradle.
When I clicked the mods button, it crashed
java.lang.NoSuchMethodError: net.minecraft.client.texture.TextureManager.method_4616(Lnet/minecraft/util/Identifier;Lnet/minecraft/client/texture/AbstractTexture;)Z at io.github.prospector.modmenu.gui.ModListEntry.bindIconTexture(ModListEntry.java:119) at io.github.prospector.modmenu.gui.ModListEntry.render(ModListEntry.java:49) at io.github.prospector.modmenu.gui.ModListWidget.renderList(ModListWidget.java:227)
This may be caused by yarn names mismatch.
I am using yarn mapping 1.15.2+build.14
Forge now throws a fatal error if a mod is missing the license
field in the mods.toml
. Currently my workaround is to add a placeholder string manually into the jar but that's super annoying. See the other issue for more info (basically the same issue) shedaniel/LightOverlay#53
ClothConfigScreen
has a setFallbackCategory
method, supposedly to change the default category displayed when opening the screen. However, the code for that feature is in the constructor, not in the setter. Am I missing something ?
While there is a colour option type available, it just renders the current value of a hex colour code. That's not super friendly for users just trying to pick something they like. I'd like to be able to provide a proper colour picker, something like:
I'm open to PRing this in myself (eventually) if that's not something you have time to do.
1.14.3 version.
https://pastebin.com/fwicxMSx
Crash happened after I messed around with the configs that Cloth Config had and clicked saved.
The crash happened when I entered Roughly Enough Items (REI) settings
and then going to the credits
. The crash happened mid-way through the slide animation.
Here's the pastebin: https://pastebin.com/bPvG5Nja
I also posted the issue on the REI repo.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.