fairyproject / fairy Goto Github PK
View Code? Open in Web Editor NEWFairy is a compat & open-sourced Framework made with love <3
License: MIT License
Fairy is a compat & open-sourced Framework made with love <3
License: MIT License
Add custom attributes / listening capacity to items without causing a TPS leak:
This error has occurred in other Services such as SerializerFactory
[15:54:18 INFO]: [Fairy] Enabling Fairy v0.5b59
[15:54:18 INFO]: ModuleService onPreInitialize
[15:54:18 INFO]: Registering module bukkit-xseries...
[15:54:20 INFO]: Registering module core-command...
[15:54:20 WARN]: java.lang.IllegalStateException: An exception has been thrown while scanning ContainerObject for dev.duaservices.bravo.fairy.command.CommandService
[15:54:20 WARN]: at io.fairyproject.container.ContainerContext$ClassPathScanner.scan(ContainerContext.java:515)
[15:54:20 WARN]: at io.fairyproject.module.ModuleService.registerByPath(ModuleService.java:265)
[15:54:20 WARN]: at io.fairyproject.module.ModuleService.registerByName(ModuleService.java:154)
[15:54:20 WARN]: at io.fairyproject.module.ModuleService.registerByPath(ModuleService.java:199)
[15:54:20 WARN]: at io.fairyproject.module.ModuleService.registerByPath(ModuleService.java:166)
[15:54:20 WARN]: at io.fairyproject.module.ModuleService$1.lambda$null$1(ModuleService.java:78)
[15:54:20 WARN]: at java.util.ArrayList.forEach(ArrayList.java:1259)
[15:54:20 WARN]: at io.fairyproject.module.ModuleService$1.lambda$onPluginInitial$2(ModuleService.java:75)
[15:54:20 WARN]: at io.fairyproject.util.PreProcessBatch.flushQueue(PreProcessBatch.java:43)
[15:54:20 WARN]: at io.fairyproject.module.ModuleService.onPostInitialize(ModuleService.java:136)
[15:54:20 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[15:54:20 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[15:54:20 WARN]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[15:54:20 WARN]: at java.lang.reflect.Method.invoke(Method.java:498)
[15:54:20 WARN]: at io.fairyproject.container.object.BaseContainerObject.call(BaseContainerObject.java:225)
[15:54:20 WARN]: at io.fairyproject.container.object.BaseContainerObject.lifeCycle(BaseContainerObject.java:204)
[15:54:20 WARN]: at io.fairyproject.container.ContainerContext.lifeCycle(ContainerContext.java:379)
[15:54:20 WARN]: at io.fairyproject.container.ContainerContext$ClassPathScanner.scan(ContainerContext.java:635)
[15:54:20 WARN]: at io.fairyproject.container.ContainerContext.init(ContainerContext.java:116)
[15:54:20 WARN]: at io.fairyproject.FairyPlatform.enable(FairyPlatform.java:77)
[15:54:20 WARN]: at io.fairyproject.bukkit.FairyBukkitPlatform.enable(FairyBukkitPlatform.java:96)
[15:54:20 WARN]: at io.fairyproject.bukkit.plugin.FairyInternalPlugin.onEnable(FairyInternalPlugin.java:17)
[15:54:20 WARN]: at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321)
[15:54:20 WARN]: at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:332)
[15:54:20 WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404)
[15:54:20 WARN]: at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:359)
[15:54:20 WARN]: at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:318)
[15:54:20 WARN]: at net.minecraft.server.v1_8_R3.MinecraftServer.s(MinecraftServer.java:408)
[15:54:20 WARN]: at net.minecraft.server.v1_8_R3.MinecraftServer.k(MinecraftServer.java:372)
[15:54:20 WARN]: at net.minecraft.server.v1_8_R3.MinecraftServer.a(MinecraftServer.java:327)
[15:54:20 WARN]: at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:267)
[15:54:20 WARN]: at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:563)
[15:54:20 WARN]: at java.lang.Thread.run(Thread.java:748)
[15:54:20 WARN]: Caused by: java.lang.NullPointerException: The type dev.duaservices.bravo.fairy.command.CommandService doesn't have @Service annotation! []
[15:54:20 WARN]: at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:229)
[15:54:20 WARN]: at io.fairyproject.container.ContainerContext$ClassPathScanner.scan(ContainerContext.java:500)
[15:54:20 WARN]: ... 32 more
[15:54:20 ERROR]: Unable to find dependency module core-command for bukkit-command
In the Maven Repository, there are some modules that don't have a version (unspecified) and the Framework wants to download them first. core-config
Allows minigame makers, plugin devs etc to create mod mode, editor modes, etc... with a handful lines of code.
Pretty simple request, would like to be able to run a consumer after running the mod page event.
"Container Thread - 0@20350" daemon prio=5 tid=0x48 nid=NA waiting for monitor entry
java.lang.Thread.State: BLOCKED
waiting for Server thread@12064 to release lock on <0x5516> (a org.bukkit.plugin.SimplePluginManager)
at org.bukkit.plugin.SimplePluginManager.getPlugin(SimplePluginManager.java:451)
at co.aikar.timings.TimingsManager.getCommandTiming(TimingsManager.java:156)
at org.bukkit.command.SimpleCommandMap.register(SimpleCommandMap.java:73)
at org.bukkit.command.SimpleCommandMap.register(SimpleCommandMap.java:65)
at dev.ghast.nftx.apeinvaders.arena.fairy.bukkit.command.BukkitCommandListener.onCommandInitial(BukkitCommandListener.java:39)
"Server thread@12064" prio=7 tid=0x1c nid=NA runnable
java.lang.Thread.State: RUNNABLE
blocks Container Thread - 0@20350
at io.fairyproject.util.thread.BlockingThreadAwaitQueue.await(BlockingThreadAwaitQueue.java:57)
at io.fairyproject.container.scanner.ThreadedClassPathScanner.scanBlocking(ThreadedClassPathScanner.java:53)
at io.fairyproject.container.ContainerContext$1.onPluginEnable(ContainerContext.java:203)
at io.fairyproject.plugin.PluginManager.lambda$onPluginEnable$2(PluginManager.java:85)
at io.fairyproject.plugin.PluginManager$$Lambda$5367/0x0000000801e8f538.accept(Unknown Source:-1)
at java.lang.Iterable.forEach(Iterable.java:75)
at io.fairyproject.plugin.PluginManager.onPluginEnable(PluginManager.java:85)
- locked <0x5515> (a java.util.TreeSet)
Currently fairy uses hot loading to load libraries and modules
And fairy core is an independent core that doesn't rely on any other plugins
Although it sounds fantastic, but in the end it is very promblematic.
URLClassLoader#addURL()
. This is the most critical issue.Currently the method returns a normal ItemSetBuilder, which lost function to set() by ArmorPart.
There are a lot of places where @Service
and @Obj
were used internally in fairy framework.
But IMO now it's a bad practice which container life cycle should only be used by plugins.
Using it in framework it self kinda make everything more complex and harder to develop.
Support type with generics
ItemBuilder is an important feature in bukkit item module.
But it currently lack some really quality of life features.
Such as the support of adventure Component to be used in display name and lores.
And an ItemMeta transformation lambda method.
This error occurs when there are multiple @Subscribe
for the same event.
Like if you use the Sidebar
, Tablist
module.
[19:00:20 ERROR]: [io.fairyproject.event.EventBus] An error occurs while subscribing event
java.lang.IllegalArgumentException: The subscriber has already been registered. (class io.fairyproject.mc.event.MCPlayerJoinEvent)
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145) ~[guava-31.0.1-jre.jar:?]
at io.fairyproject.event.Subscribers.register(Subscribers.java:59) ~[bukkit-platform.jar:?]
at io.fairyproject.event.EventBus.subscribe(EventBus.java:74) ~[bukkit-platform.jar:?]
at io.fairyproject.event.EventBus.subscribeAll(EventBus.java:62) ~[bukkit-platform.jar:?]
at io.fairyproject.container.controller.SubscribeEventContainerController.applyContainerObject(SubscribeEventContainerController.java:11) ~[bukkit-platform.jar:?]
at io.fairyproject.container.ContainerContext$ClassPathScanner.scan(ContainerContext.java:627) ~[bukkit-platform.jar:?]
at io.fairyproject.module.ModuleService.registerByPath(ModuleService.java:249) ~[bukkit-platform.jar:?]
at io.fairyproject.module.ModuleService$1.lambda$onPluginInitial$1(ModuleService.java:99) ~[bukkit-platform.jar:?]
at java.util.ArrayList.forEach(ArrayList.java:1511) ~[?:?]
at io.fairyproject.module.ModuleService$1.lambda$onPluginInitial$2(ModuleService.java:97) ~[bukkit-platform.jar:?]
at io.fairyproject.util.PreProcessBatch.flushQueue(PreProcessBatch.java:43) ~[bukkit-platform.jar:?]
at io.fairyproject.module.ModuleService.onPostInitialize(ModuleService.java:193) ~[bukkit-platform.jar:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
at io.fairyproject.container.object.BaseContainerObject.call(BaseContainerObject.java:225) ~[bukkit-platform.jar:?]
at io.fairyproject.container.object.BaseContainerObject.lifeCycle(BaseContainerObject.java:204) ~[bukkit-platform.jar:?]
at io.fairyproject.container.ContainerContext.lifeCycle(ContainerContext.java:397) ~[bukkit-platform.jar:?]
at io.fairyproject.container.ContainerContext$ClassPathScanner.scan(ContainerContext.java:653) ~[bukkit-platform.jar:?]
at io.fairyproject.container.ContainerContext.init(ContainerContext.java:120) ~[bukkit-platform.jar:?]
at io.fairyproject.FairyPlatform.enable(FairyPlatform.java:77) ~[bukkit-platform.jar:?]
at io.fairyproject.bukkit.FairyBukkitPlatform.enable(FairyBukkitPlatform.java:99) ~[bukkit-platform.jar:?]
at io.fairyproject.bukkit.plugin.FairyInternalPlugin.onEnable(FairyInternalPlugin.java:18) ~[bukkit-platform.jar:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_18_R1.CraftServer.enablePlugin(CraftServer.java:563) ~[paper-1.18.1.jar:git-Paper-68]
at org.bukkit.craftbukkit.v1_18_R1.CraftServer.enablePlugins(CraftServer.java:477) ~[paper-1.18.1.jar:git-Paper-68]
at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:727) ~[paper-1.18.1.jar:git-Paper-68]
at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:503) ~[paper-1.18.1.jar:git-Paper-68]
at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:313) ~[paper-1.18.1.jar:git-Paper-68]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1202) ~[paper-1.18.1.jar:git-Paper-68]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:317) ~[paper-1.18.1.jar:git-Paper-68]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
[19:00:20 ERROR]: [io.fairyproject.event.EventBus] An error occurs while subscribing event
java.lang.IllegalArgumentException: The subscriber has already been registered. (class io.fairyproject.mc.event.MCPlayerQuitEvent)
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145) ~[guava-31.0.1-jre.jar:?]
at io.fairyproject.event.Subscribers.register(Subscribers.java:59) ~[bukkit-platform.jar:?]
at io.fairyproject.event.EventBus.subscribe(EventBus.java:74) ~[bukkit-platform.jar:?]
at io.fairyproject.event.EventBus.subscribeAll(EventBus.java:62) ~[bukkit-platform.jar:?]
at io.fairyproject.container.controller.SubscribeEventContainerController.applyContainerObject(SubscribeEventContainerController.java:11) ~[bukkit-platform.jar:?]
at io.fairyproject.container.ContainerContext$ClassPathScanner.scan(ContainerContext.java:627) ~[bukkit-platform.jar:?]
at io.fairyproject.module.ModuleService.registerByPath(ModuleService.java:249) ~[bukkit-platform.jar:?]
at io.fairyproject.module.ModuleService$1.lambda$onPluginInitial$1(ModuleService.java:99) ~[bukkit-platform.jar:?]
at java.util.ArrayList.forEach(ArrayList.java:1511) ~[?:?]
at io.fairyproject.module.ModuleService$1.lambda$onPluginInitial$2(ModuleService.java:97) ~[bukkit-platform.jar:?]
at io.fairyproject.util.PreProcessBatch.flushQueue(PreProcessBatch.java:43) ~[bukkit-platform.jar:?]
at io.fairyproject.module.ModuleService.onPostInitialize(ModuleService.java:193) ~[bukkit-platform.jar:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
at io.fairyproject.container.object.BaseContainerObject.call(BaseContainerObject.java:225) ~[bukkit-platform.jar:?]
at io.fairyproject.container.object.BaseContainerObject.lifeCycle(BaseContainerObject.java:204) ~[bukkit-platform.jar:?]
at io.fairyproject.container.ContainerContext.lifeCycle(ContainerContext.java:397) ~[bukkit-platform.jar:?]
at io.fairyproject.container.ContainerContext$ClassPathScanner.scan(ContainerContext.java:653) ~[bukkit-platform.jar:?]
at io.fairyproject.container.ContainerContext.init(ContainerContext.java:120) ~[bukkit-platform.jar:?]
at io.fairyproject.FairyPlatform.enable(FairyPlatform.java:77) ~[bukkit-platform.jar:?]
at io.fairyproject.bukkit.FairyBukkitPlatform.enable(FairyBukkitPlatform.java:99) ~[bukkit-platform.jar:?]
at io.fairyproject.bukkit.plugin.FairyInternalPlugin.onEnable(FairyInternalPlugin.java:18) ~[bukkit-platform.jar:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[paper-api-1.18.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_18_R1.CraftServer.enablePlugin(CraftServer.java:563) ~[paper-1.18.1.jar:git-Paper-68]
at org.bukkit.craftbukkit.v1_18_R1.CraftServer.enablePlugins(CraftServer.java:477) ~[paper-1.18.1.jar:git-Paper-68]
at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:727) ~[paper-1.18.1.jar:git-Paper-68]
at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:503) ~[paper-1.18.1.jar:git-Paper-68]
at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:313) ~[paper-1.18.1.jar:git-Paper-68]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1202) ~[paper-1.18.1.jar:git-Paper-68]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:317) ~[paper-1.18.1.jar:git-Paper-68]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Desired traits:
Fairy 0.8? ๐
Currently, fairy-lib-plugin tries to fetch protocolVersions at every time when startup even there's protocolVersion file already. I just wonder that make this as an configuration or check whether there's a file already to prevent server stuck on booting.
Caused by: java.nio.file.NoSuchFileException: /mnt/disk/ideaProjects/_imanity/untitled/build/classes/java/test/MODULE.class
at io.fairyproject.gradle.FairyTestTask.afterTestClasses(FairyTestTask.java:39)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
... 118 more
platform: APP
modules: discord, command
This error doesn't affect the actual file compiled but unit test is not working
Enable CacheableAspect in core platform
Compile project that uses fairy with CacheableAspect enabled
The error appears and compile failed
The error only happens after shadowJar, which means the default build jar will not cause the error for some reason??
Removed @Cacheable
---- AspectJ Properties ---
AspectJ Compiler 1.9.7 built on Thursday Jun 24, 2021 at 16:14:45 PDT
---- Dump Properties ---
Dump file: ajcore.20220223.153957.254.txt
Dump reason: org.aspectj.weaver.BCException
Dump on exception: true
Dump at exit condition: abort
---- Exception Information ---
---- System Properties ---
java.runtime.name=OpenJDK Runtime Environment
sun.boot.library.path=/usr/lib/jvm/java-8-openjdk/jre/lib/amd64
java.vm.version=25.292-b10
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=:
java.vm.name=OpenJDK 64-Bit Server VM
file.encoding.pkg=sun.io
sun.java.launcher=SUN_STANDARD
user.country=TW
sun.os.patch.level=unknown
java.vm.specification.name=Java Virtual Machine Specification
user.dir=/mnt/disk/ideaProjects/_fairy/main/test-plugin
java.runtime.version=1.8.0_292-b10
java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment
java.endorsed.dirs=/usr/lib/jvm/java-8-openjdk/jre/lib/endorsed
os.arch=amd64
java.io.tmpdir=/tmp
line.separator=
java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Linux
sun.jnu.encoding=UTF-8
java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=5.10.84-1-MANJARO
user.home=/home/lee
user.timezone=Asia/Ho_Chi_Minh
java.awt.printerjob=sun.print.PSPrinterJob
file.encoding=UTF-8
java.specification.version=1.8
java.class.path=/home/lee/.gradle/caches/modules-2/files-2.1/org.aspectj/aspectjtools/1.9.7/1eb5dbd0fe0fcf7b93b149127b0604c482f46aec/aspectjtools-1.9.7.jar
user.name=lee
java.vm.specification.version=1.8
sun.java.command=org.aspectj.tools.ajc.Main -argfile /mnt/disk/ideaProjects/_fairy/main/test-plugin/build/tmp/compileJava/ajc.options
java.home=/usr/lib/jvm/java-8-openjdk/jre
sun.arch.data.model=64
user.language=zh
java.specification.vendor=Oracle Corporation
awt.toolkit=sun.awt.X11.XToolkit
java.vm.info=mixed mode
java.version=1.8.0_292
java.ext.dirs=/usr/lib/jvm/java-8-openjdk/jre/lib/ext:/usr/java/packages/lib/ext
sun.boot.class.path=/usr/lib/jvm/java-8-openjdk/jre/lib/resources.jar:/usr/lib/jvm/java-8-openjdk/jre/lib/rt.jar:/usr/lib/jvm/java-8-openjdk/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-8-openjdk/jre/lib/jsse.jar:/usr/lib/jvm/java-8-openjdk/jre/lib/jce.jar:/usr/lib/jvm/java-8-openjdk/jre/lib/charsets.jar:/usr/lib/jvm/java-8-openjdk/jre/lib/jfr.jar:/usr/lib/jvm/java-8-openjdk/jre/classes
java.vendor=Oracle Corporation
file.separator=/
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding=UnicodeLittle
sun.cpu.endian=little
sun.cpu.isalist=
---- Command Line ---
-argfile
/mnt/disk/ideaProjects/_fairy/main/test-plugin/build/tmp/compileJava/ajc.options
---- Full Classpath ---
Empty
---- Compiler Messages ---
abort ABORT -- (BCException) malformed org.aspectj.weaver.EffectiveSignature attribute (length:27)org.aspectj.weaver.BCException: Bad type signature (Lio/fairyproject/cache/CacheableAspect;)Ljava/lang/Runnable;
when batch building BuildConfig[null] #Files=0 AopXmls=#0
when batch building BuildConfig[null] #Files=0 AopXmls=#0
malformed org.aspectj.weaver.EffectiveSignature attribute (length:27)org.aspectj.weaver.BCException: Bad type signature (Lio/fairyproject/cache/CacheableAspect;)Ljava/lang/Runnable;
when batch building BuildConfig[null] #Files=0 AopXmls=#0
when batch building BuildConfig[null] #Files=0 AopXmls=#0
org.aspectj.weaver.BCException: malformed org.aspectj.weaver.EffectiveSignature attribute (length:27)org.aspectj.weaver.BCException: Bad type signature (Lio/fairyproject/cache/CacheableAspect;)Ljava/lang/Runnable;
when batch building BuildConfig[null] #Files=0 AopXmls=#0
when batch building BuildConfig[null] #Files=0 AopXmls=#0
at org.aspectj.weaver.AjAttribute.read(AjAttribute.java:137)
at org.aspectj.weaver.bcel.Utility.readAjAttributes(Utility.java:102)
at org.aspectj.weaver.bcel.BcelMethod.unpackAjAttributes(BcelMethod.java:197)
at org.aspectj.weaver.bcel.BcelMethod.<init>(BcelMethod.java:91)
at org.aspectj.weaver.bcel.BcelObjectType.getDeclaredMethods(BcelObjectType.java:290)
at org.aspectj.weaver.ReferenceType.getDeclaredMethods(ReferenceType.java:870)
at org.aspectj.weaver.ResolvedType.getDeclaredAdvice(ResolvedType.java:1028)
at org.aspectj.weaver.ResolvedType.getDeclaredShadowMungers(ResolvedType.java:1068)
at org.aspectj.weaver.ResolvedType.collectShadowMungers(ResolvedType.java:868)
at org.aspectj.weaver.ResolvedType.collectCrosscuttingMembers(ResolvedType.java:794)
at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:112)
at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:67)
at org.aspectj.weaver.bcel.BcelWeaver.addLibraryJarFile(BcelWeaver.java:241)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.initBcelWorld(AjBuildManager.java:868)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:252)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:188)
at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:103)
at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:47)
at org.aspectj.tools.ajc.Main.run(Main.java:372)
at org.aspectj.tools.ajc.Main.runMain(Main.java:250)
at org.aspectj.tools.ajc.Main.main(Main.java:84)
There are places where instances / classes were initialized staticly
Which is a extremely bad practice for a framework that should be reloadable.
We could have a global class that stores all instances and have load() and unload() in it.
At the moment each component are only being applied with 1 ComponentRegistry
It will restricted because ComponentRegistry handles constructor
But it is so unnecessary and useless, so rather remove it for much better flexibility for current component usage
getGatewayIntents()
is a method from JDA interface and overwrite in ProxyJDA
but setupBuilder is trying to use this method to setup gateway intents
which can cause NPE if the method is not overwrited and cause confusion for developers
suggested way is to add a abstract method createGatewayIntents()
Adding back the module for creating NPCs.
Just like guice do: https://stackoverflow.com/questions/28551289/injector-getinstance-of-a-generic-type
When we need to inject instances that have generic, it's good to have support that find instance by class and it's generic type
In-game testing in Fairy has been a bit of a hassle on the Bukkit platform. The best you could do previously was using a Gradle plugin like RunDev to automate the process of compiling and dragging the JAR around. There are some design flaws and lacks of tools that result in this:
The end goal should be easy accessibility to hotswap, multiple kinds of reloading, and fewer plugins to simply test your plugin. Obviously, this proposal is for in-game tests, unit tests will be another topic.
To achieve this goal, I propose a few framework changes and introduce developer tools (highly inspired by Spring Boot).
Restarter.restart(plugin)
which restarts the plugin's lifecycle. (CORE)These changes should dramatically improve the flow of in-game testing with Fairy.
When I turn on Redis I get the following error:
[21:15:20 WARN]: java.lang.reflect.InvocationTargetException
[21:15:20 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[21:15:20 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[21:15:20 WARN]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[21:15:20 WARN]: at java.lang.reflect.Method.invoke(Method.java:498)
[21:15:20 WARN]: at org.fairy.bean.details.GenericBeanDetails.call(GenericBeanDetails.java:210)
[21:15:20 WARN]: at org.fairy.bean.BeanContext.call(BeanContext.java:551)
[21:15:20 WARN]: at org.fairy.bean.BeanContext.scanClasses(BeanContext.java:507)
[21:15:20 WARN]: at org.fairy.bean.BeanContext.init(BeanContext.java:97)
[21:15:20 WARN]: at org.fairy.FairyBootstrap.enable(FairyBootstrap.java:81)
[21:15:20 WARN]: at org.fairy.bukkit.FairyBukkitPlatform.onEnable(FairyBukkitPlatform.java:80)
[21:15:20 WARN]: at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321)
[21:15:20 WARN]: at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:332)
[21:15:20 WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404)
[21:15:20 WARN]: at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:359)
[21:15:20 WARN]: at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:318)
[21:15:20 WARN]: at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:203)
[21:15:20 WARN]: at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:563)
[21:15:20 WARN]: at java.lang.Thread.run(Thread.java:748)
[21:15:20 WARN]: Caused by: java.lang.NoSuchMethodError: org.redisson.codec.JsonJacksonCodec.<init>(Lcom/fasterxml/jackson/databind/ObjectMapper;)V
[21:15:20 WARN]: at org.fairy.redis.RedisService.preInit(RedisService.java:64)
[21:15:20 WARN]: ... 18 more
[21:15:21 WARN]: java.lang.NullPointerException
[21:15:21 WARN]: at org.fairy.redis.RedisService.getKeys(RedisService.java:85)
[21:15:21 WARN]: at org.fairy.redis.server.thread.FetchThread.fetch(FetchThread.java:64)
[21:15:21 WARN]: at org.fairy.redis.server.thread.FetchThread.run(FetchThread.java:50)
[21:15:21 WARN]: java.lang.reflect.InvocationTargetException
[21:15:21 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[21:15:21 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[21:15:21 WARN]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[21:15:21 WARN]: at java.lang.reflect.Method.invoke(Method.java:498)
[21:15:21 WARN]: at org.fairy.bean.details.GenericBeanDetails.call(GenericBeanDetails.java:210)
[21:15:21 WARN]: at org.fairy.bean.BeanContext.call(BeanContext.java:551)
[21:15:21 WARN]: at org.fairy.bean.BeanContext.scanClasses(BeanContext.java:543)
[21:15:21 WARN]: at org.fairy.bean.BeanContext.init(BeanContext.java:97)
[21:15:21 WARN]: at org.fairy.FairyBootstrap.enable(FairyBootstrap.java:81)
[21:15:21 WARN]: at org.fairy.bukkit.FairyBukkitPlatform.onEnable(FairyBukkitPlatform.java:80)
[21:15:21 WARN]: at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321)
[21:15:21 WARN]: at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:332)
[21:15:21 WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404)
[21:15:21 WARN]: at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:359)
[21:15:21 WARN]: at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:318)
[21:15:21 WARN]: at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:203)
[21:15:21 WARN]: at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:563)
[21:15:21 WARN]: at java.lang.Thread.run(Thread.java:748)
[21:15:21 WARN]: Caused by: java.lang.NullPointerException
[21:15:21 WARN]: at org.fairy.redis.subscription.RedisPubSub.<init>(RedisPubSub.java:42)
[21:15:21 WARN]: at org.fairy.redis.message.MessageService.init(MessageService.java:77)
[21:15:21 WARN]: ... 18 more
[21:15:21 WARN]: java.lang.NullPointerException
[21:15:21 WARN]: at org.fairy.redis.RedisService.getMap(RedisService.java:81)
[21:15:21 WARN]: at org.fairy.redis.server.thread.PushThread.push(PushThread.java:75)
[21:15:21 WARN]: at org.fairy.redis.server.thread.PushThread.run(PushThread.java:49)
@Command("launch-failed-timer")
fun launchFailedTimer(ctx: BukkitCommandContext) {
FailedTimer().start()
}
class FailedTimer : ServerTimer(1000) {
override fun onStart() {
Bukkit.broadcastMessage("Starting failed timer")
}
override fun onElapsed() {
Bukkit.broadcastMessage("Elapsed failed timer")
throw RuntimeException("Failed timer")
}
}
This is the sample code of how to make server timer broken, and it also not throw any exception so server owner will not notice at all
[10:43:24 INFO]: Starting failed timer
<no any error message being printed>
[10:43:25 INFO]: Elapsed failed timer
Hello,
Is it possible to add in the future the ability to user Maven ?
Thanks for reading me
Watch out for retrooper/packetevents#732
[19:47:48] [Server thread/ERROR]: Error occurred while enabling fairy-lib-plugin v0.7.4b1-SNAPSHOT (Is it up to date?)
java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Could not initialize class io.fairyproject.reflect.Reflect
at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396) ~[?:?]
at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2073) ~[?:?]
at io.fairyproject.util.exceptionally.ThrowingRunnable.lambda$sneaky$1(ThrowingRunnable.java:39) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.node.loader.ContainerNodeLoader.load(ContainerNodeLoader.java:85) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.ContainerContext.loadContainerNode(ContainerContext.java:140) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.RootNodeLoader.loadNode(RootNodeLoader.java:55) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.RootNodeLoader.load(RootNodeLoader.java:49) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.ContainerContext.init(ContainerContext.java:98) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.FairyPlatform.enable(FairyPlatform.java:85) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.bukkit.FairyBukkitPlatform.enable(FairyBukkitPlatform.java:98) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.library.bootstrap.platform.AbstractPlatformBootstrap.enable(AbstractPlatformBootstrap.java:74) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.library.bootstrap.bukkit.BukkitPlugin.onEnable(BukkitPlugin.java:89) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:281) ~[paper-api-1.20.4-R0.1-SNAPSHOT.jar:?]
at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:190) ~[paper-1.20.4.jar:git-Paper-399]
at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:104) ~[paper-1.20.4.jar:git-Paper-399]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:507) ~[paper-api-1.20.4-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_20_R3.CraftServer.enablePlugin(CraftServer.java:637) ~[paper-1.20.4.jar:git-Paper-399]
at org.bukkit.craftbukkit.v1_20_R3.CraftServer.enablePlugins(CraftServer.java:548) ~[paper-1.20.4.jar:git-Paper-399]
at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:671) ~[paper-1.20.4.jar:git-Paper-399]
at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:431) ~[paper-1.20.4.jar:git-Paper-399]
at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:308) ~[paper-1.20.4.jar:git-Paper-399]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1130) ~[paper-1.20.4.jar:git-Paper-399]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:319) ~[paper-1.20.4.jar:git-Paper-399]
at java.lang.Thread.run(Thread.java:1570) ~[?:?]
Caused by: java.lang.NoClassDefFoundError: Could not initialize class io.fairyproject.reflect.Reflect
at io.fairyproject.container.processor.injection.AutowiredAnnotationProcessor.lambda$injectAutowiredField$2(AutowiredAnnotationProcessor.java:114) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at java.util.concurrent.CompletableFuture.uniAcceptNow(CompletableFuture.java:757) ~[?:?]
at java.util.concurrent.CompletableFuture.uniAcceptStage(CompletableFuture.java:735) ~[?:?]
at java.util.concurrent.CompletableFuture.thenAccept(CompletableFuture.java:2214) ~[?:?]
at io.fairyproject.container.processor.injection.AutowiredAnnotationProcessor.injectAutowiredField(AutowiredAnnotationProcessor.java:111) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.processor.injection.AutowiredAnnotationProcessor.processPreInitialization(AutowiredAnnotationProcessor.java:79) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.node.loader.ContainerNodeLoader.lambda$callPreInitProcessors$0(ContainerNodeLoader.java:134) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.node.loader.ContainerNodeLoader.callPreInitProcessors(ContainerNodeLoader.java:136) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.node.loader.ContainerNodeLoader.lambda$directlyCompose$10(ContainerNodeLoader.java:275) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150) ~[?:?]
at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:[482](https://mclo.gs/chL4jyS#L482)) ~[?:?]
at io.fairyproject.util.thread.BlockingThreadAwaitQueue.await(BlockingThreadAwaitQueue.java:46) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.node.loader.ContainerNodeLoader.load(ContainerNodeLoader.java:84) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
... 20 more
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.IllegalStateException: Unsafe not found [in thread "Server thread"]
at io.fairyproject.reflect.Reflect.<clinit>(Reflect.java:58) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.processor.injection.AutowiredAnnotationProcessor.lambda$injectAutowiredField$2(AutowiredAnnotationProcessor.java:114) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at java.util.concurrent.CompletableFuture.uniAcceptNow(CompletableFuture.java:757) ~[?:?]
at java.util.concurrent.CompletableFuture.uniAcceptStage(CompletableFuture.java:735) ~[?:?]
at java.util.concurrent.CompletableFuture.thenAccept(CompletableFuture.java:2214) ~[?:?]
at io.fairyproject.container.processor.injection.AutowiredAnnotationProcessor.injectAutowiredField(AutowiredAnnotationProcessor.java:111) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.processor.injection.AutowiredAnnotationProcessor$NodeContext.injectStaticFields(AutowiredAnnotationProcessor.java:131) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.processor.injection.AutowiredAnnotationProcessor.processNodePreInitialization(AutowiredAnnotationProcessor.java:103) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at io.fairyproject.container.node.loader.ContainerNodeLoader.callNodePreInitProcessors(ContainerNodeLoader.java:91) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
at java.util.concurrent.CompletableFuture.uniRunNow(CompletableFuture.java:819) ~[?:?]
at java.util.concurrent.CompletableFuture.uniRunStage(CompletableFuture.java:803) ~[?:?]
at java.util.concurrent.CompletableFuture.thenRun(CompletableFuture.java:2227) ~[?:?]
at io.fairyproject.container.node.loader.ContainerNodeLoader.load(ContainerNodeLoader.java:78) ~[fairy-lib-plugin-0.7.4b1-SNAPSHOT-all.jar:?]
... 20 more
There is a bug in command system where help display the same arg on help when you have 2 alias in the same sub-command
@Command({"list", "all"})
public void list(BukkitCommandContext context) {
new ArenaListMenu().open(context.getPlayer());
}
@Command({"create", "setup"})
public void create(BukkitCommandContext context, @Arg("name") String name) {
}
PacketEvents: retrooper/packetevents#658
Java 21 Support Test
relate to CryptoMorin/XSeries#242
any feature related to packets were originally moved into an independent module called MC-Protocol because it shades packetevents
And I wanted to try reduce the overall size of the core platforms.
But then I realized how commonly it is used and it doesn't make sense to separate the logic of sending and handling packets.
It would make more sense to have them directly in core platforms.
gonna support the future
Currently when using ItemBuilder with the foundation of an ItemStack, the ItemStack wasn't cloned, Result in confusion where original ItemStack being modified unintentionally.
Stack trace;
[04:57:53 INFO]: [Fairy] Enabling Fairy v0.5.1b12
[04:57:54 INFO]: Loaded Library mariadb-java-client v2.7.0
[04:57:54 INFO]: Loaded Library h2 v1.4.199
[04:57:54 INFO]: Loaded Library HikariCP v3.4.5
[04:57:54 INFO]: Loaded Library postgresql v9.4.1212
[04:57:54 INFO]: Loaded Library mysql-connector-java v8.0.22
[04:57:54 INFO]: Loaded Library byte-buddy v1.10.9
[04:57:54 INFO]: Loaded Library mysql-connector-java v8.0.22
[04:57:54 INFO]: Loaded Library mariadb-java-client v2.7.0
[04:57:54 INFO]: Loaded Library HikariCP v3.4.5
[04:57:54 INFO]: Loaded Library postgresql v9.4.1212
[04:57:54 INFO]: Loaded Library h2 v1.4.199
[04:57:54 INFO]: Loaded Library byte-buddy v1.10.9
[04:57:54 ERROR]: Something wrong will scanning component for dev.ghast.nftx.apeinvaders.arena.fairy.mysql.pojo.impl.UUIDObjectSerializer
java.lang.IllegalArgumentException: The Serializer for java.util.UUID already exists!
at io.fairyproject.container.SerializerFactory$1.newInstance(SerializerFactory.java:72) ~[?:?]
at io.fairyproject.container.ComponentRegistry.scanComponents(ComponentRegistry.java:87) ~[?:?]
at io.fairyproject.container.scanner.ThreadedClassPathScanner.scanComponentAndInjection(ThreadedClassPathScanner.java:63) ~[?:?]
at io.fairyproject.container.scanner.ThreadedClassPathScanner.lambda$directlyCompose$9(ThreadedClassPathScanner.java:126) ~[?:?]
at java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:966) [?:1.8.0_282]
at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:940) [?:1.8.0_282]
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) [?:1.8.0_282]
at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1646) [?:1.8.0_282]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_282]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_282]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_282]
Should be pretty self-explanatory
I'll try helping out as much as possible,
Much love,
Is it possible to add maven to the project?
[11:23:57 WARN]: Plugin 'plugin' is creating timing 'dev.ghast.bossraid.fairy.bukkit.listener.events.EventSubscribeBuilder$$Lambda$5601/0x0000000802134bc0' - this is deprecated behavior, please report it to the authors:
[11:23:57 WARN]: Plugin 'plugin' is creating timing 'Task: java.util.concurrent.CompletableFuture.AsyncSupply (Single)' - this is deprecated behavior, please report it to the authors:
[11:23:57 WARN]: Plugin 'plugin' is creating timing 'dev.ghast.bossraid.fairy.bukkit.listener.events.EventSubscribeBuilder$$Lambda$5601/0x0000000802134bc0' - this is deprecated behavior, please report it to the authors:
[11:23:57 WARN]: Plugin 'plugin' is creating timing 'Task: java.util.concurrent.CompletableFuture.AsyncSupply (Single)' - this is deprecated behavior, please report it to the authors:
Could not download fawe-api-latest.jar (com.boydti:fawe-api:latest)
Could not get resource 'https://ci.athion.net/job/FastAsyncWorldEdit/ws/mvn/com/boydti/fawe-api/latest/fawe-api-latest.jar'.
Could not HEAD 'https://ci.athion.net/job/FastAsyncWorldEdit/ws/mvn/com/boydti/fawe-api/latest/fawe-api-latest.jar'. Received status code 403 from server: Forbidden
Possible solution:
- Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
Yay...
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.