neznamy / tab-bridge Goto Github PK
View Code? Open in Web Editor NEWBackend plugin to extend features on the proxy
Backend plugin to extend features on the proxy
Every time my server reboots, this error gets printed in console right before it completes the shut down sequence.
[14:48:01 ERROR]: Nag author: 'NEZNAMY' of 'TAB-Bridge' about the following: This plugin is not properly shutting down its async tasks when it is being shut down. This task may throw errors during the final shutdown logs and might not complete before process dies.
[14:48:01 ERROR]: Craft Scheduler Thread - 1279 - TAB-Bridge Stacktrace
[14:48:01 ERROR]: [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
[14:48:01 ERROR]: [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:211)
[14:48:01 ERROR]: [email protected]/java.util.concurrent.CompletableFuture$Signaller.block(CompletableFuture.java:1864)
[14:48:01 ERROR]: [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3463)
[14:48:01 ERROR]: [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3434)
[14:48:01 ERROR]: [email protected]/java.util.concurrent.CompletableFuture.waitingGet(CompletableFuture.java:1898)
[14:48:01 ERROR]: [email protected]/java.util.concurrent.CompletableFuture.join(CompletableFuture.java:2117)
[14:48:01 ERROR]: net.minecraft.server.level.ChunkProviderServer.a(ChunkProviderServer.java:426)
[14:48:01 ERROR]: net.minecraft.world.level.World.a(World.java:651)
[14:48:01 ERROR]: net.minecraft.world.level.IWorldReader.getNoiseBiome(IWorldReader.java:62)
[14:48:01 ERROR]: org.bukkit.craftbukkit.v1_19_R2.CraftRegionAccessor.getBiome(CraftRegionAccessor.java:214)
[14:48:01 ERROR]: org.bukkit.craftbukkit.v1_19_R2.block.CraftBlock.getBiome(CraftBlock.java:343)
[14:48:01 ERROR]: com.extendedclip.papi.expansion.player.PlayerUtil.getBiome(PlayerUtil.java:228)
[14:48:01 ERROR]: com.extendedclip.papi.expansion.player.PlayerUtil.getCapitalizedBiome(PlayerUtil.java:232)
[14:48:01 ERROR]: com.extendedclip.papi.expansion.player.PlayerExpansion.onRequest(PlayerExpansion.java:299)
[14:48:01 ERROR]: PlaceholderAPI-2.11.2.jar//me.clip.placeholderapi.replacer.CharsReplacer.apply(CharsReplacer.java:119)
[14:48:01 ERROR]: PlaceholderAPI-2.11.2.jar//me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(PlaceholderAPI.java:71)
[14:48:01 ERROR]: PlaceholderAPI-2.11.2.jar//me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(PlaceholderAPI.java:99)
[14:48:01 ERROR]: TABBridge-2.0.10.jar//me.neznamy.tab.bridge.bukkit.BukkitPlatform.lambda$createPlaceholder$2(BukkitPlatform.java:196)
[14:48:01 ERROR]: TABBridge-2.0.10.jar//me.neznamy.tab.bridge.bukkit.BukkitPlatform$$Lambda$10574/0x0000000802f5f8b0.apply(Unknown Source)
[14:48:01 ERROR]: TABBridge-2.0.10.jar//me.neznamy.tab.bridge.shared.placeholder.PlayerPlaceholder.request(PlayerPlaceholder.java:30)
[14:48:01 ERROR]: TABBridge-2.0.10.jar//me.neznamy.tab.bridge.shared.placeholder.PlayerPlaceholder.update(PlayerPlaceholder.java:20)
[14:48:01 ERROR]: TABBridge-2.0.10.jar//me.neznamy.tab.bridge.shared.DataBridge.updatePlaceholders(DataBridge.java:237)
[14:48:01 ERROR]: TABBridge-2.0.10.jar//me.neznamy.tab.bridge.shared.DataBridge.lambda$startTasks$1(DataBridge.java:25)
[14:48:01 ERROR]: TABBridge-2.0.10.jar//me.neznamy.tab.bridge.shared.DataBridge$$Lambda$7798/0x000000080245b6b0.run(Unknown Source)
[14:48:01 ERROR]: org.bukkit.craftbukkit.v1_19_R2.scheduler.CraftTask.run(CraftTask.java:101)
[14:48:01 ERROR]: org.bukkit.craftbukkit.v1_19_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57)
[14:48:01 ERROR]: com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[14:48:01 ERROR]: [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[14:48:01 ERROR]: [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[14:48:01 ERROR]: [email protected]/java.lang.Thread.run(Thread.java:833)
That's all, thought you might be interested to know about this error. It doesn't break anything.
java.lang.Throwable: null
at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:15) ~[paper-1.20.1.jar:git-Paper-131]
at net.minecraft.server.level.ServerLevel.getEntities(ServerLevel.java:2563) ~[?:?]```
https://pastebin.com/FDCfuAid
On Paper 1.20.1.
i'm using velocity, when i connect to the server i get kicked, when i remove the TAB-Bridge, the kick doesn't happen
TAB-Bridge.v5.0.6
server version: version git-Pufferfish-49 (MC: 1.20.4)
velocity: 3.3.0-SNAPSHOT (git-399bc232-b386)
plugins: https://prnt.sc/ZNmSLIRky8_9
error: network protocol error
Hello, some time ago I wanted to set bold names above the player's head - I succeeded and now I have a problem with the PVPManager plugin, it does not add the tab prefix and nickname above the player's head because of this
[TAB-Bridge] Blocked attempt to add player x_Kefir into team PVP-eb9c1bf666b3
How can i disable this?
Hello, we met some difficulties in making integration with TAB-Bridge.
We want to hide the player's nametag for a certain time, but we can't find an API to do it.
Is there any API we can use? Or can we have one?
Hello.
I currently run a velocity proxy with backend servers running on fabric.
I was wanting to see if you are willing to make a fabric port of TAB-Bridge. That's all I want to know.
Hello i want to change my tab nickname in 1.19.4+ can this project help me for that if so what are the classes i need for that i can code but not have understanding of reflection
Yes, I know that the TAB itself already has the ViaVersion handle, but my problem, in this case, is:
I need ViaVersion and the other Via plugins on my backend servers because my server is 1.19.4 but most players play on 1.8 so I need the plugins on the backend to improve gameplay on 1.8
With that, the TAB, which is in the bungee (since I run in multiple instances, so I need the global tablist) cannot get the player's version with ViaVersion. I saw that this can be a problem if I want to have a specific tag in Legacy versions and a nice tag in more updated versions.
I believe this feature can be enabled, for people who need it like me, and shared just like placeholders are.
Thank you for your attention.
Platform: https://paste.gg/p/var1nthon/45eb5eab03cf42a083ed732852ca98aa
JVM Flags: https://paste.gg/p/var1nthon/53063a48f43e486892bbce761dacd9d9
World:
Plugin: PlaceholderAPI-2.11.5.jar(spigot), TAB-Bridge v3.1.8.jar(spigot), TAB v4.0.9.jar(bungeecord)
TAB-Bridge v3.1.8 (placeholder-errors)
https://paste.gg/p/var1nthon/7f6db2d4dd0f4821a005aa9710b4b9d7
error occur
tab bridge 3.11
folia-bundler-1.20.1-R0.1-SNAPSHOT-reobf
[11:28:36 ERROR]: Thread TAB-Bridge Thread failed main thread check: Accessing entity state off owning region's thread
java.lang.Throwable: null
at io.papermc.paper.util.TickThread.ensureTickThread(TickThread.java:78) ~[folia-1.20.1.jar:git-Folia-21]
at org.bukkit.craftbukkit.v1_20_R1.entity.CraftAreaEffectCloud.getHandle(CraftAreaEffectCloud.java:36) ~[folia-1.20.1.jar:git-Folia-21]
at org.bukkit.craftbukkit.v1_20_R1.entity.CraftAreaEffectCloud.getHandle(CraftAreaEffectCloud.java:21) ~[folia-1.20.1.jar:git-Folia-21]
at org.bukkit.craftbukkit.v1_20_R1.entity.CraftEntity.getPassengers(CraftEntity.java:769) ~[folia-1.20.1.jar:git-Folia-21]
at me.neznamy.tab.bridge.bukkit.features.unlimitedtags.VehicleRefresher.getPassengers(VehicleRefresher.java:110) ~[TAB-Bridge v3.1.1.jar:?]
at me.neznamy.tab.bridge.bukkit.features.unlimitedtags.VehicleRefresher.refresh(VehicleRefresher.java:83) ~[TAB-Bridge v3.1.1.jar:?]
at me.neznamy.tab.bridge.bukkit.features.unlimitedtags.VehicleRefresher.lambda$new$0(VehicleRefresher.java:44) ~[TAB-Bridge v3.1.1.jar:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) ~[?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
All is in the title
How do I use it ? For example how to forward LuckPerms prefixes or PlaceholderAPI's placeholders ?
Hello the Bridge Plugin is spamming this error when installing the "Server" Extension.
https://hastebin.com/share/alehiwijiw.ruby
Server Version: 1.20.2
Plugin Version: v3.1.7
Paper Build: 245
What?
Add the function so player's can toggle their scoreboard with a bukkit command.
Why?
If the server wants to provide a GUI (inventory) for those actions it's currently a lot of work around.
Most custom inventory plugins use the org.bukkit.Player#performCommand() method to add this.
btab won't be accessable for those plugins when running 1.19 or higher.
Might also want to safe player's choice about scoreboards. Because it keeps resetting when people reconnect.
please add to this plugin support nametags for bungee/velocity mode
The code we used to hide/show the name tag: TabAdapter.java#L39
The tag hides as expected when TAB is only installed on the server:
But it sometimes doesn't when TAB is installed on both sides (proxy and the server), and the bridge on the server:
From what I can see in-game nothing is broken, Tab is displaying correctly and no glitches from what I can see, just this error is being thrown in the console.
Configuration:
The following errors are being thrown occasionally but multiple times if this error is present
java.lang.NullPointerException: Cannot invoke "me.neznamy.tab.bridge.bukkit.features.unlimitedtags.ArmorStandManager.respawn()" because the return value of "me.neznamy.tab.bridge.bukkit.features.unlimitedtags.BridgeNameTagX.getArmorStandManager(me.neznamy.tab.bridge.shared.BridgePlayer)" is null
at me.neznamy.tab.bridge.bukkit.features.unlimitedtags.VehicleRefresher.refresh(VehicleRefresher.java:83) ~[TAB-Bridge v2.0.4.jar:?]
at me.neznamy.tab.bridge.bukkit.features.unlimitedtags.VehicleRefresher.lambda$new$0(VehicleRefresher.java:43) ~[TAB-Bridge v2.0.4.jar:?]
at org.bukkit.craftbukkit.v1_19_R1.scheduler.CraftTask.run(CraftTask.java:101) ~[purpur-1.19.1.jar:git-Purpur-1747]
at org.bukkit.craftbukkit.v1_19_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[purpur-1.19.1.jar:git-Purpur-1747]
at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[purpur-1.19.1.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.lang.Thread.run(Thread.java:889) ~[?:?]```
java.util.ConcurrentModificationException
[23:27:29 WARN]: at java.base/java.util.HashMap$KeySet.forEach(HashMap.java:1011)
[23:27:29 WARN]: at TAB-Bridge v2.1.0.jar//me.neznamy.tab.bridge.bukkit.BukkitScoreboard.unregisterTeam(BukkitScoreboard.java:149)
[23:27:29 WARN]: at TAB-Bridge v2.1.0.jar//me.neznamy.tab.bridge.shared.DataBridge.processPluginMessage(DataBridge.java:175)
[23:27:29 WARN]: at TAB-Bridge v2.1.0.jar//me.neznamy.tab.bridge.bukkit.BukkitBridge.lambda$onPluginMessageReceived$1(BukkitBridge.java:82)
[23:27:29 WARN]: at TAB-Bridge v2.1.0.jar//me.neznamy.tab.bridge.shared.TABBridge.lambda$submitTask$0(TABBridge.java:49)
[23:27:29 WARN]: at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
[23:27:29 WARN]: at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[23:27:29 WARN]: at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[23:27:29 WARN]: at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[23:27:29 WARN]: at java.base/java.lang.Thread.run(Thread.java:833)
I got Tab-Bridge to clear the bungeecord. After connecting to the server I get spam of this type:
Purpur 1.20.1
[11:16:07] [TAB-Bridge Thread/WARN]: java.lang.NullPointerException: Cannot invoke "me.neznamy.tab.bridge.shared.features.TabExpansion.setValue(Object, String, String)" because the return value of "me.neznamy.tab.bridge.shared.TABBridge.getExpansion()" is null [11:16:07] [TAB-Bridge Thread/WARN]: at TAB-Bridge v3.1.4.jar//me.neznamy.tab.bridge.shared.DataBridge.processPluginMessage(DataBridge.java:130) [11:16:07] [TAB-Bridge Thread/WARN]: at TAB-Bridge v3.1.4.jar//me.neznamy.tab.bridge.bukkit.BukkitBridge.lambda$onPluginMessageReceived$1(BukkitBridge.java:90) [11:16:07] [TAB-Bridge Thread/WARN]: at TAB-Bridge v3.1.4.jar//me.neznamy.tab.bridge.shared.TABBridge.lambda$submitTask$0(TABBridge.java:51) [11:16:07] [TAB-Bridge Thread/WARN]: at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [11:16:07] [TAB-Bridge Thread/WARN]: at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) [11:16:07] [TAB-Bridge Thread/WARN]: at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [11:16:07] [TAB-Bridge Thread/WARN]: at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [11:16:07] [TAB-Bridge Thread/WARN]: at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [11:16:07] [TAB-Bridge Thread/WARN]: at java.base/java.lang.Thread.run(Thread.java:833)
Can you add folia support?
Currently every time a placeholder refresh is over a certain threshold in time, it sends a warn message to the console, this can fill up log files very quickly, and in my case i'm not worried about the time it takes as it does work regardless.
I'm not 100% certain where this is in code, but it should be easy enough to only display if it's enabled in a config file (which would also have to be created.)
After the last update it doesn't work on version 1.8.8 maybe not anywhere. Can you take a look at it?
[WARNING] Error loading plugin TAB-Bridge
java.lang.NoClassDefFoundError: org/bukkit/plugin/messaging/PluginMessageListener
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
at net.md_5.bungee.api.plugin.PluginClassloader.findClass(PluginClassloader.java:152)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
at net.md_5.bungee.api.plugin.PluginClassloader.loadClass0(PluginClassloader.java:66)
at net.md_5.bungee.api.plugin.PluginClassloader.loadClass(PluginClassloader.java:59)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at net.md_5.bungee.api.plugin.PluginManager.enablePlugin(PluginManager.java:340)
at net.md_5.bungee.api.plugin.PluginManager.loadPlugins(PluginManager.java:250)
at net.md_5.bungee.BungeeCord.start(BungeeCord.java:304)
at net.md_5.bungee.BungeeCordLauncher.main(BungeeCordLauncher.java:49)
at net.md_5.bungee.Bootstrap.main(Bootstrap.java:15)
Caused by: java.lang.ClassNotFoundException: org.bukkit.plugin.messaging.PluginMessageListener
at net.md_5.bungee.api.plugin.PluginClassloader.loadClass0(PluginClassloader.java:103)
at net.md_5.bungee.api.plugin.PluginClassloader.loadClass(PluginClassloader.java:59)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 13 more
[02:11:53 INFO]: UUID of player *flamSword569 is 00000000-0000-0000-0009-01fed67666e2
[02:11:53 INFO]: [floodgate] Floodgate player logged in as *flamSword569 joined (UUID: 00000000-0000-0000-0009-01fed67666e2)
[02:11:53 WARN]: [TAB-Bridge] Plugin TAB-Bridge v2.0.0 generated an exception while executing task 21328
java.lang.NullPointerException: Cannot invoke "me.neznamy.tab.bridge.bukkit.features.unlimitedtags.ArmorStandManager.getArmorStand(String)" because the return value of "me.neznamy.tab.bridge.bukkit.features.unlimitedtags.BridgeNameTagX.getArmorStandManager(me.neznamy.tab.bridge.bukkit.BridgePlayer)" is null
at me.neznamy.tab.bridge.bukkit.features.unlimitedtags.BridgeNameTagX.readMessage(BridgeNameTagX.java:218) ~[TAB-Bridge-2.0.0.jar:?]
at me.neznamy.tab.bridge.bukkit.DataBridge.processPluginMessage(DataBridge.java:126) ~[TAB-Bridge-2.0.0.jar:?]
at me.neznamy.tab.bridge.bukkit.DataBridge.lambda$processPluginMessage$4(DataBridge.java:69) ~[TAB-Bridge-2.0.0.jar:?]
at org.bukkit.craftbukkit.v1_18_R2.scheduler.CraftTask.run(CraftTask.java:101) ~[purpur-1.18.2.jar:git-Purpur-1598]
at org.bukkit.craftbukkit.v1_18_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[purpur-1.18.2.jar:git-Purpur-1598]
at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[purpur-1.18.2.jar:git-Purpur-1598]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
[02:11:53 INFO]: [Trusted] *flamSword569 joined the game
Is Velocity support available now? I don't like bungeecord, so it's important to me
On a bedrock player's first join after server restart (we are using geyser/floodgate), the following is logged on our backend servers when using unlimited nameplates:
[12:13:17 WARN]: [TAB-Bridge] Plugin TAB-Bridge v2.0.1 generated an exception while executing task 7779
java.lang.NullPointerException: Cannot invoke "me.neznamy.tab.bridge.bukkit.features.unlimitedtags.ArmorStandManager.getArmorStand(String)" because the return value of "me.neznamy.tab.bridge.bukkit.features.unlimitedtags.BridgeNameTagX.getArmorStandManager(me.neznamy.tab.bridge.bukkit.BridgePlayer)" is null
at me.neznamy.tab.bridge.bukkit.features.unlimitedtags.BridgeNameTagX.readMessage(BridgeNameTagX.java:218) ~[TAB-Bridge-2.0.1(1).jar:?]
at me.neznamy.tab.bridge.bukkit.DataBridge.processPluginMessage(DataBridge.java:136) ~[TAB-Bridge-2.0.1(1).jar:?]
at me.neznamy.tab.bridge.bukkit.DataBridge.lambda$processPluginMessage$4(DataBridge.java:69) ~[TAB-Bridge-2.0.1(1).jar:?]
at org.bukkit.craftbukkit.v1_18_R2.scheduler.CraftTask.run(CraftTask.java:101) ~[purpur-1.18.2.jar:git-Purpur-1612]
at org.bukkit.craftbukkit.v1_18_R2.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[purpur-1.18.2.jar:git-Purpur-1612]
at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[purpur-1.18.2.jar:git-Purpur-1612]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Subsequently, placeholders in the nametags are not populated. We have to execute /btab reload
for them to display correctly. The tablist is seemingly not affected by this issue. Java players are not affected.
If you require any further info please let me know!
Thanks
When the player continues to right-click with an item in the off-hand, there is a good chance that the mob will not take damage.
After repeated tests, it was confirmed that it was the TAB-Bridge plug-in problem
Plugins (47): BBeeChecker, BetterRTP, BlockLocker, ChestSort, Chunky, ChunkyBorder, CoCoBeenBossBarHealth, CoCoBeenGriefPreventionTeleport, CoCoBeenPlaceholderPlugin, CoCoBeenPlayerSignItem, CoCoBeenServerTweaks, ColoredAnvils, CoreProtect, CoreProtectTNT, DeluxeMenus, DiscordSRV, Elevator, EntityMoneyDrop, Essentials, EssentialsSpawn, FarmControl, GriefPrevention, GriefPreventionTweaks, GSit, HolographicDisplays, InteractiveChat, InteractiveChatDiscordSrvAddon, LuckPerms, MarketPlace, MaSuiteCore, MaSuiteTeleports, Minepacks, MysqlPlayerDataBridge, OreReplacer, PlaceholderAPI, PlayerWarps, PlugManX (PlugMan), ProtocolLib, PvPManager, SafariNet, spark, Spartan, TAB-Bridge, UltimateTimber, Vault, VentureChat, WorldEdit
Server Version:
[16:04:06 INFO]: This server is running Paper version git-Paper-283 (MC: 1.18.2) (Implementing API version 1.18.2-R0.1-SNAPSHOT) (Git: f8e8d6c)
Bungeecord Version:
[16:05:33 INFO]: This server is running Waterfall version git:Waterfall-Bootstrap:1.18-R0.1-SNAPSHOT:739eda6:482 by md_5
TAB Version: TAB version 3.1.1 (Bungeecord)
TAB-Bridge Version: TAB-Bridge version 2.0.1
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.