ifera-mc / mysterycrate Goto Github PK
View Code? Open in Web Editor NEWPLUGIN ARCHIVED. USE https://github.com/DaPigGuy/PiggyCrates instead!
License: GNU General Public License v3.0
PLUGIN ARCHIVED. USE https://github.com/DaPigGuy/PiggyCrates instead!
License: GNU General Public License v3.0
When the UpdaterEvent is triggered the chest opens, items are swapped and at the same time ClickSound is heard. It should only be heard by the player using the crate but instead its heard by all the players near the chest.
Referring to #3 a crate key is needed to open the crate to access its inventory. Now if a player taps the chest with the key while another player was currently using the crate (i.e. task is running) leads to task being called twice and the loop is repeated. It is again due to little to no checks of whether the task is running and/or should a player be able to access the crate while task is running.
MysteryCrate_dev-72.phar
PocketMine-MP version 1.7dev-1079 "[REDACTED]" (API 3.0.0-ALPHA12)
2018-06-02 [17:17:58] [Server thread/CRITICAL]: Could not pass event 'pocketmine\event\entity\EntityLevelChangeEvent' to 'MysteryCrate v6.0.0': Cannot send empty batch on JackMD\MysteryCrate\EventListener
2018-06-02 [17:17:58] [Server thread/CRITICAL]: InvalidArgumentException: "Cannot send empty batch" (EXCEPTION) in "src/pocketmine/Server" at line 1884
2018-06-02 [17:17:58] [Server thread/DEBUG]: #0 src/pocketmine/level/Level(467): pocketmine\Server->batchPackets(array Array(), array Array(), boolean )
2018-06-02 [17:17:58] [Server thread/DEBUG]: #1 MysteryCrate_dev-72.phar/src/JackMD/MysteryCrate/EventListener(309): pocketmine\level\Level->addParticle(pocketmine\level\particle\FloatingTextParticle object, array Array())
2018-06-02 [17:17:58] [Server thread/DEBUG]: #2 src/pocketmine/plugin/MethodEventExecutor(38): JackMD\MysteryCrate\EventListener->onLevelChange(pocketmine\event\entity\EntityLevelChangeEvent object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #3 src/pocketmine/plugin/RegisteredListener(98): pocketmine\plugin\MethodEventExecutor->execute(JackMD\MysteryCrate\EventListener object, pocketmine\event\entity\EntityLevelChangeEvent object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #4 src/pocketmine/plugin/PluginManager(701): pocketmine\plugin\RegisteredListener->callEvent(pocketmine\event\entity\EntityLevelChangeEvent object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #5 src/pocketmine/entity/Entity(1878): pocketmine\plugin\PluginManager->callEvent(pocketmine\event\entity\EntityLevelChangeEvent object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #6 src/pocketmine/Player(925): pocketmine\entity\Entity->switchLevel(pocketmine\level\Level object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #7 src/pocketmine/entity/Entity(1742): pocketmine\Player->switchLevel(pocketmine\level\Level object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #8 src/pocketmine/entity/Entity(1767): pocketmine\entity\Entity->setPosition(pocketmine\level\Position object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #9 src/pocketmine/entity/Entity(1860): pocketmine\entity\Entity->setPositionAndRotation(pocketmine\level\Position object, double 51.251312255859, double 25.345901489258)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #10 src/pocketmine/Player(3746): pocketmine\entity\Entity->teleport(pocketmine\level\Position object, NULL , NULL )
2018-06-02 [17:17:58] [Server thread/DEBUG]: #11 essentialsTP_dev-30.phar/src/essentialsTP/essentialsTP(563): pocketmine\Player->teleport(pocketmine\level\Position object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #12 src/pocketmine/command/PluginCommand(58): essentialsTP\essentialsTP->onCommand(pocketmine\Player object, pocketmine\command\PluginCommand object, string home, array Array())
2018-06-02 [17:17:58] [Server thread/DEBUG]: #13 src/pocketmine/command/SimpleCommandMap(258): pocketmine\command\PluginCommand->execute(pocketmine\Player object, string home, array Array())
2018-06-02 [17:17:58] [Server thread/DEBUG]: #14 src/pocketmine/Server(1978): pocketmine\command\SimpleCommandMap->dispatch(pocketmine\Player object, string home base)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #15 src/pocketmine/Player(2191): pocketmine\Server->dispatchCommand(pocketmine\Player object, string home base)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #16 src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter(222): pocketmine\Player->chat(string /home base)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #17 src/pocketmine/network/mcpe/protocol/CommandRequestPacket(54): pocketmine\network\mcpe\PlayerNetworkSessionAdapter->handleCommandRequest(pocketmine\network\mcpe\protocol\CommandRequestPacket object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #18 src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter(92): pocketmine\network\mcpe\protocol\CommandRequestPacket->handle(pocketmine\network\mcpe\PlayerNetworkSessionAdapter object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #19 src/pocketmine/network/mcpe/protocol/BatchPacket(114): pocketmine\network\mcpe\PlayerNetworkSessionAdapter->handleDataPacket(pocketmine\network\mcpe\protocol\CommandRequestPacket object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #20 src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter(92): pocketmine\network\mcpe\protocol\BatchPacket->handle(pocketmine\network\mcpe\PlayerNetworkSessionAdapter object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #21 src/pocketmine/Player(3033): pocketmine\network\mcpe\PlayerNetworkSessionAdapter->handleDataPacket(pocketmine\network\mcpe\protocol\BatchPacket object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #22 src/pocketmine/network/mcpe/RakLibInterface(158): pocketmine\Player->handleDataPacket(pocketmine\network\mcpe\protocol\BatchPacket object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #23 vendor/pocketmine/raklib/server/ServerHandler(98): pocketmine\network\mcpe\RakLibInterface->handleEncapsulated(string 88.163.159.23 55555, raklib\protocol\EncapsulatedPacket object, integer 0)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #24 src/pocketmine/network/mcpe/RakLibInterface(103): raklib\server\ServerHandler->handlePacket()
2018-06-02 [17:17:58] [Server thread/DEBUG]: #25 src/pocketmine/network/Network(94): pocketmine\network\mcpe\RakLibInterface->process()
2018-06-02 [17:17:58] [Server thread/DEBUG]: #26 src/pocketmine/network/mcpe/RakLibInterface(80): pocketmine\network\Network->processInterface(pocketmine\network\mcpe\RakLibInterface object)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #27 vendor/pocketmine/snooze/src/SleeperHandler(113): pocketmine\network\mcpe\RakLibInterface->pocketmine\network\mcpe\{closure}()
2018-06-02 [17:17:58] [Server thread/DEBUG]: #28 vendor/pocketmine/snooze/src/SleeperHandler(82): pocketmine\snooze\SleeperHandler->processNotifications()
2018-06-02 [17:17:58] [Server thread/DEBUG]: #29 src/pocketmine/Server(2279): pocketmine\snooze\SleeperHandler->sleepUntil(double 1527952678.6945)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #30 src/pocketmine/Server(2150): pocketmine\Server->tickProcessor()
2018-06-02 [17:17:58] [Server thread/DEBUG]: #31 src/pocketmine/Server(1733): pocketmine\Server->start()
2018-06-02 [17:17:58] [Server thread/DEBUG]: #32 src/pocketmine/PocketMine(290): pocketmine\Server->__construct(BaseClassLoader object, pocketmine\utils\MainLogger object, string /home/g3.hmserv.eu-19144/, string /home/g3.hmserv.eu-19144/plugins/)
2018-06-02 [17:17:58] [Server thread/DEBUG]: #33 /home/g3.hmserv.eu-19144/PocketMine-MP.phar(1): require(string phar:///home/g3.hmserv.eu-19144/PocketMine-MP.phar/src/pocketmine/PocketMine.php)
Mention the stuff you would like to be added to this plugin and I will try my best to make it happen.
config.yml
,tick-delay
in config.yml
to increase or decrease the timer. (Requested by @Haxley)crates.yml
. (Requested by @Adam1609)Due to the way how the InventoryCloseEvent is currently set up in the plugin itself upon closing a chest other than the crate while the task is running the task gets cancelled. leading to no reward and player stuck with the crate opened and not working.
Just as the title tells, other chests on the same level don't let people interact with them. Mainly due to inventory transaction event cancelling all the inventory transactions for the chest at the "level".
It doesn't work when you do /xyz to get the cords locator anymore.
Hey JackMD,
I would love to help you solve issues on this repo. I love to help people and I know a lot about your crate plugin. Is there a way you can give me access to closing issues and tagging them? I would love to take stress off your shoulders and help you with the issues so you don't have to reply to them
Best Regards,
Gage
Add commands
Is there a way to speed up of slow down the scroll speed. It would be a new addtion to the config.
In glad you added commands to the creats.
As there are no checks on whether a player is currently using the crate or not leads to any number of players accessing the crate whilst the task is in progress. Further the players can take the item out of the chest inventory when the task completes and so the player who started the crate task for the first time is left with no prize.
Every slot of the chest items are random. This makes the whole point of having them in a line obsolete. The whole idea is that you will see what you could've got but missed. I suggest only making Slot #16 random (https://github.com/JackMD/MysteryCrate/blob/master/src/JackMD/MysteryCrate/UpdaterEvent.php#L95)
(Make them all random the first time the code is executed.)
and then the next time the code is executed again make slot #16 item equal slot #15 item.
Then make slot #16 a random item again.
$this->setItem(14, $this->chest->getInventory()->getSlot(15)->getItem()->getId(), 1);
$this->setItem(15, $this->chest->getInventory()->getSlot(16)->getItem()->getId(), 1);
$this->setItem(16, $this->ids[(int)rand(0, 18)], 1);
This is just an example. ^ I am not sure if such a function exist.
JackMD,
I just have to say you made this plugin a beast. This plugin is the best crates plugins anyone has made in the whole pocketmine field. You sir should be the best developer out there. Thank you for making this amazing plugin!
Best regards,
Gage
When I use (right or left click while holding) a key, regardless of whether I "use" it on a chest or not, it says the generic "Unknown command. Try /help for a list of commands" error.
So, now that spaces are allowed in names, players can abuse this. If a user has a name like "a 99999999" and they open a crate with say $1000 as a reward, it will instead give them $99999999 because the player's username is not "in quotation marks" so it thinks that 99999999 is the amount of money it should be giving. This is the same with many other plugins as well.
Hello I am back from requesting commands from crates. The default command you added to the crate does not work. It just says [19:48:12] [Server thread/INFO]: Usage: /givemoney player amount there are > and < before and after player and amount
FloatingText upon level change disappears. Where this is good it also has unwanted behavior. Consider two players on crates
world. Now when player2
moves to another world
then the FloatingText
disappears for player1
.
When a player spam clicks a crate when they don't have a key to open it, it causes the server to lag really bad. Please add some sort of cooldown to prevent this.
If a player is using the crate then due to the bad implementation of InventoryTransactionEvent at this line every player on the server is affected. The affected players cannot move items to or from their inventory when the task is running and this can be real painful especially for production servers. They can however do so when the task ends.
Hi! So i am just here to give a couple of suggestions to the crates plugin :)
I apologize for being annoying but I have searched everywhere and asked multiple people this question. Some didn’t respond and some didn’t know. So how do you get a world’s folder name (on mobile) or do I have to use a PC? Once again I apologize for being annoying.
Vanilla enchantments don't appear to be working. No errors are thrown. Crate displays and gives items without enchantments.
Example crates.yml:
rare:
- name: "§d§lEpsilon Sword"
id: 276
meta: 0
amount: 1
enchantments:
sharpness:
level: 1
- name: "§d§lEpsilon Chest"
id: 311
meta: 0
amount: 1
enchantments:
protection:
level: 1
amount: 1
block: "42:0"
hi
what is the use of block.yml and how to setup this ?
thanks
If a player use a vote crate, nobody else can use it....I need to restart the server to make it to work again.
"The Crate is in use. Please wait...."
"You require a Vote key to open this crate."
steps
drop the MysteryCrate plugin in plugins file
start the server
place a voting crate chest
restart the server
use on key and wait until you get your reward
try again (it will not work)
hi
sometimes the box remains blocked when a player tries to open it.
it happens when another player tried before him to open it
Pmmp dev 743
MysteryCrate dev 23
thanks
Could you possibly make this plugin work with teaspoon instead of vanilla enchant?
I tested the plugin it's very good no bugs for me 👌
Hey, how do i create a crate as there is no command
Hey Dude this Plugin have no Permissions.... my Members can /key vote canu fix this tahnks
After first use of a crate it reloads facing West.
Implement Particles around/above the chest.
Crates aren't fool proof. I can grab items from crates while opening one and keep the item.
How i Set the crate
Hello Jack,
Could you please start working on particles on the crates? I think this will be even more improved when particles are a thing. Maybe particles circling the crate? Or something like that
Best regards,
Gage
Sometime could you add support for using commands to the crates? Like if someone wins money, you can do /givemoney {player} 1000 or so? Please and thank you. I personally think that would be amazing.
The crates aren't working. Like it says the crate was made and it says to restart the server so I do, but after that the floating text doesn't work, and the crate doesn't respond to my left clicking. Please help.
During the slot-machine-like shuffle, you can select the items inside the crate and move them into your inventory.
When I place a chest under the floating texts. The crates work fine, but then other chests do not allow you to place items in them.🤔
I tried again but it still doesn't work.
It goes the first time and the second time says crate in use.
This time I only tried with ANDROID; It doesn't work either on the Pocketmine.
Permissions are not set correctly which leads to all the players being able to use /xyz
and /key
command.
In the “How to Set Up” tab, it says to change the block of the crate in crates.yml. But I can’t find where to change it/don’t understand. Thanks!
I put the coordinates for the crates to spawn but sadly it shows the particles,floating text and everything but not crate? Weird glitch😬😂
Claiming a crate doesn't open the chest inventory UI to show the slot machine animation as pictured in the video. There is a delay when opening the crate before receiving your reward and when the crate is destroyed, items and vines drop. This is to say the slot-machine mechanic still seems to be taking place, but something is preventing the chest from opening so the player can see it.
Heres what shows up after i switch to the crate world....
PocketMine-MP/PocketMine-MP.phar(1): require(string phar://C:/Users/fabyan/Documents/mcpe server/PocketMine-MP/PocketMine-MP.phar/src/pocketmine/PocketMine.php)
[21:28:01] [Server thread/CRITICAL]: Could not pass event 'pocketmine\event\entity\EntityLevelChangeEvent' to 'MysteryCrate v6.0.0': Cannot send empty batch on JackMD\MysteryCrate\EventListener
[21:28:01] [Server thread/CRITICAL]: InvalidArgumentException: "Cannot send empty batch" (EXCEPTION) in "src/pocketmine/Server" at line 1884
[21:28:01] [Server thread/DEBUG]: #0 src/pocketmine/level/Level(467): pocketmine\Server->batchPackets(array Array(), array Array(), boolean )
[21:28:01] [Server thread/DEBUG]: #1 MysteryCrate_dev-72.phar/src/JackMD/MysteryCrate/EventListener(309): pocketmine\level\Level->addParticle(pocketmine\level\particle\FloatingTextParticle object, array Array())
[21:28:01] [Server thread/DEBUG]: #2 src/pocketmine/plugin/MethodEventExecutor(38): JackMD\MysteryCrate\EventListener->onLevelChange(pocketmine\event\entity\EntityLevelChangeEvent object)
[21:28:01] [Server thread/DEBUG]: #3 src/pocketmine/plugin/RegisteredListener(98): pocketmine\plugin\MethodEventExecutor->execute(JackMD\MysteryCrate\EventListener object, pocketmine\event\entity\EntityLevelChangeEvent object)
[21:28:01] [Server thread/DEBUG]: #4 src/pocketmine/plugin/PluginManager(701): pocketmine\plugin\RegisteredListener->callEvent(pocketmine\event\entity\EntityLevelChangeEvent object)
[21:28:01] [Server thread/DEBUG]: #5 src/pocketmine/entity/Entity(1878): pocketmine\plugin\PluginManager->callEvent(pocketmine\event\entity\EntityLevelChangeEvent object)
[21:28:01] [Server thread/DEBUG]: #6 src/pocketmine/Player(925): pocketmine\entity\Entity->switchLevel(pocketmine\level\Level object)
[21:28:01] [Server thread/DEBUG]: #7 src/pocketmine/entity/Entity(1742): pocketmine\Player->switchLevel(pocketmine\level\Level object)
[21:28:01] [Server thread/DEBUG]: #8 src/pocketmine/entity/Entity(1767): pocketmine\entity\Entity->setPosition(pocketmine\level\Position object)
[21:28:01] [Server thread/DEBUG]: #9 src/pocketmine/entity/Entity(1860): pocketmine\entity\Entity->setPositionAndRotation(pocketmine\level\Position object, double 76.039245605469, double 51.136871337891)
[21:28:01] [Server thread/DEBUG]: #10 src/pocketmine/Player(3746): pocketmine\entity\Entity->teleport(pocketmine\level\Position object, NULL , NULL )
[21:28:01] [Server thread/DEBUG]: #11 Worlds.phar/src/surva/worlds/commands/TeleportCommand(27): pocketmine\Player->teleport(pocketmine\level\Position object)
[21:28:01] [Server thread/DEBUG]: #12 Worlds.phar/src/surva/worlds/commands/CustomCommand(50): surva\worlds\commands\TeleportCommand->do(pocketmine\Player object, array Array())
[21:28:01] [Server thread/DEBUG]: #13 Worlds.phar/src/surva/worlds/Worlds(58): surva\worlds\commands\CustomCommand->execute(pocketmine\Player object, string worlds, array Array())
[21:28:01] [Server thread/DEBUG]: #14 src/pocketmine/command/PluginCommand(58): surva\worlds\Worlds->onCommand(pocketmine\Player object, pocketmine\command\PluginCommand object, string ws, array Array())
[21:28:01] [Server thread/DEBUG]: #15 src/pocketmine/command/SimpleCommandMap(258): pocketmine\command\PluginCommand->execute(pocketmine\Player object, string ws, array Array())
[21:28:01] [Server thread/DEBUG]: #16 src/pocketmine/Server(1978): pocketmine\command\SimpleCommandMap->dispatch(pocketmine\Player object, string ws teleport hub)
[21:28:01] [Server thread/DEBUG]: #17 src/pocketmine/Player(2191): pocketmine\Server->dispatchCommand(pocketmine\Player object, string ws teleport hub)
[21:28:01] [Server thread/DEBUG]: #18 src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter(222): pocketmine\Player->chat(string /ws teleport hub)
[21:28:01] [Server thread/DEBUG]: #19 src/pocketmine/network/mcpe/protocol/CommandRequestPacket(54): pocketmine\network\mcpe\PlayerNetworkSessionAdapter->handleCommandRequest(pocketmine\network\mcpe\protocol\CommandRequestPacket object)
[21:28:01] [Server thread/DEBUG]: #20 src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter(92): pocketmine\network\mcpe\protocol\CommandRequestPacket->handle(pocketmine\network\mcpe\PlayerNetworkSessionAdapter object)
[21:28:01] [Server thread/DEBUG]: #21 src/pocketmine/network/mcpe/protocol/BatchPacket(114): pocketmine\network\mcpe\PlayerNetworkSessionAdapter->handleDataPacket(pocketmine\network\mcpe\protocol\CommandRequestPacket object)
[21:28:01] [Server thread/DEBUG]: #22 src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter(92): pocketmine\network\mcpe\protocol\BatchPacket->handle(pocketmine\network\mcpe\PlayerNetworkSessionAdapter object)
[21:28:01] [Server thread/DEBUG]: #23 src/pocketmine/Player(3033): pocketmine\network\mcpe\PlayerNetworkSessionAdapter->handleDataPacket(pocketmine\network\mcpe\protocol\BatchPacket object)
[21:28:01] [Server thread/DEBUG]: #24 src/pocketmine/network/mcpe/RakLibInterface(158): pocketmine\Player->handleDataPacket(pocketmine\network\mcpe\protocol\BatchPacket object)
[21:28:01] [Server thread/DEBUG]: #25 vendor/pocketmine/raklib/server/ServerHandler(98): pocketmine\network\mcpe\RakLibInterface->handleEncapsulated(string 192.168.2.19 55054, raklib\protocol\EncapsulatedPacket object, integer 0)
[21:28:01] [Server thread/DEBUG]: #26 src/pocketmine/network/mcpe/RakLibInterface(103): raklib\server\ServerHandler->handlePacket()
[21:28:01] [Server thread/DEBUG]: #27 src/pocketmine/network/Network(94): pocketmine\network\mcpe\RakLibInterface->process()
[21:28:01] [Server thread/DEBUG]: #28 src/pocketmine/network/mcpe/RakLibInterface(80): pocketmine\network\Network->processInterface(pocketmine\network\mcpe\RakLibInterface object)
[21:28:01] [Server thread/DEBUG]: #29 vendor/pocketmine/snooze/src/SleeperHandler(113): pocketmine\network\mcpe\RakLibInterface->pocketmine\network\mcpe{closure}()
[21:28:01] [Server thread/DEBUG]: #30 vendor/pocketmine/snooze/src/SleeperHandler(82): pocketmine\snooze\SleeperHandler->processNotifications()
[21:28:01] [Server thread/DEBUG]: #31 src/pocketmine/Server(2279): pocketmine\snooze\SleeperHandler->sleepUntil(double 1527992881.5842)
[21:28:01] [Server thread/DEBUG]: #32 src/pocketmine/Server(2150): pocketmine\Server->tickProcessor()
[21:28:01] [Server thread/DEBUG]: #33 src/pocketmine/Server(1733): pocketmine\Server->start()
[21:28:01] [Server thread/DEBUG]: #34 src/pocketmine/PocketMine(290): pocketmine\Server->__construct(BaseClassLoader object, pocketmine\utils\MainLogger object, string C:\Users\fabyan\Documents\mcpe server\PocketMine-MP, string C:\Users\fabyan\Documents\mcpe server\PocketMine-MP\plugins)
[21:28:01] [Server thread/DEBUG]: #35 C:/Users/fabyan/Documents/mcpe server/PocketMine-MP/PocketMine-MP.phar(1): require(string phar://C:/Users/fabyan/Documents/mcpe server/PocketMine-MP/PocketMine-MP.phar/src/pocketmine/PocketMine.php)
This plugin has the same issue as PiggyCrate
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.