Git Product home page Git Product logo

lift's Introduction

Lift - Simple Elevator lifts for Bukkit Minecraft servers and Spout Servers

For download see Lift on spigotmc.org or Lift on bukkit.org.

This plugin is no longer maintained

You can instead take a look at LiftReloaded

Changes

  • v72 (1.17.2) - Removed Nocheatplus support. Increased limits for 1.18. Min java version is Java 16
  • v71 (1.16.4) - A Lift does timeout when it's active longer than expected (passengers stuck).
    Passengers will then be teleported to the destination. See config "secondsUntilTimeout" (default 2s)
  • v70 (1.16.3) - Bugfix (#191)
  • v69 (1.16.3) - Config now reloads correctly with /lift reload. Check your messages configuration after updating.
  • v68 (1.16.3) - Added config option for mouse scroll, more bug fixes
  • v67 (1.16.1) - Bugfixes
  • v66 (1.16.1) - Improvements for scrollable floor selection
  • v65 (1.16.1) - When hand is empty, signs can be selected with mousewheel!
  • v63 (1.15.1) - Recompiled for that version
  • v62 (1.14.4) - Recompiled for that version
  • v61 (1.14.3) - Don't remember
  • v60 (1.14.3) - Updated to BlockData. Riding support and ride exit prevention. Added config variable for exit prevention. Support for new button and sign types.
  • v59 (1.13.x) - Forgot
  • v58 (1.13) - Config: Wildcards can now be used in floorBlocks to set all of the glass and wood blocks.

lift's People

Contributors

afforess avatar croxis avatar david50407 avatar glguy avatar kikelkik avatar morthis avatar n4th4 avatar wmgamelive avatar yurannnzzz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lift's Issues

Multiple use of lift

Hi. I don't know exactly how it happens but everytime multiple poeple use the lift, they get stuck in some way and then the glass doesnt respawn:

2011-12-26 20:23:00 [SEVERE] Could not pass event PLAYER_INTERACT to Lift
java.lang.NullPointerException
at net.croxis.plugins.lift.LiftPlayerListener.onPlayerInteract(LiftPlayerListener.java:35)
at org.bukkit.plugin.java.JavaPluginLoader$11.execute(JavaPluginLoader.java:335)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:58)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:339)
at org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:178)
at net.minecraft.server.ItemInWorldManager.interact(ItemInWorldManager.java:266)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:593)
at net.minecraft.server.Packet15Place.a(SourceFile:39)
at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:93)
at org.getspout.spout.SpoutNetServerHandler.a(SpoutNetServerHandler.java:550)
at net.minecraft.server.NetworkListenThread.a(SourceFile:108)
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:527)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:425)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:457)

Error when lift is operated

17:46:48 [SEVERE] Could not pass event org.bukkit.event.block.BlockRedstoneEvent
to Lift
org.bukkit.event.EventException
at org.bukkit.plugin.java.JavaPluginLoader$103.execute(JavaPluginLoader.
java:1026)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:57)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:453)
at net.minecraft.server.BlockButton.interact(BlockButton.java:142)
at net.minecraft.server.BlockButton.attack(BlockButton.java:125)
at net.minecraft.server.ItemInWorldManager.dig(ItemInWorldManager.java:1
23)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:507)
at net.minecraft.server.Packet14BlockDig.handle(SourceFile:43)
at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:100)
at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:7
8)
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:537)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:435)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:465)
Caused by: java.lang.reflect.InvocationTargetException
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.bukkit.plugin.java.JavaPluginLoader$103.execute(JavaPluginLoader.
java:1024)
... 13 more
Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.entity.CraftItem
cannot be cast to org.bukkit.entity.LivingEntity
at net.croxis.plugins.lift.LiftRedstoneListener.onBlockRedstoneChange(Li
ftRedstoneListener.java:81)
... 18 more

Centre player on base block

If the player is standing on the base block but near the edge, there's a chance to get stuck on nearby blocks, ceilings, or floors. This may result in player damage if you get badly stuck.

bLift assisted players by positioning them to the centre of the base block before lifting. It would then be the player's fault if they jammed themselves up after starting the lift. It would be great if Lift did this too.

For a single player it's simple - centre them on the base block they're standing on. Then lift.

For multiple lift, if you have more players than base blocks, they will have to push closer together to remain within the lift. The easy method here is to only centre the player that pushed the button. I'm sure there are many creative ways to deal with multiplayer.

Thanks.

Getting stuck when using lift

So I started using your plugin and its better then bLift but I have one problem.

When i place a blocks just above my head and try to ride up the elevator it tries to push me up but I am stuck under the block.

And I can't really do nothing then. So maybe you can implement the feature that bLift has to suck a player into the lift area so they wont get suck under a block or something.

Thanks

Elevator Deaths

when going down on the elevator if the distance is too great you begin gaining speed and die upon reaching the bottom

Glass blocks

Hello this is {UcL}Zeya from uclgamers.com.

First I would like to thank you for another amazing plug-in! The only issue that I have with the lift plug-in is that there is a line of glass blocks that is created when you use it. This is on each floor. Is there a fix for this for I use it in a Jail and well glass floors don't say your in jail lol. Ty for your time...

Could not pass event BlockRedstoneEvent to Lift

Just saw an error in the console:

2012-03-05 10:49:49 [SEVERE] Could not pass event BlockRedstoneEvent to Lift

org.bukkit.event.EventException

    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:303)

    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)

    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:441)

    at net.minecraft.server.BlockButton.interact(BlockButton.java:142)

    at net.minecraft.server.ItemInWorldManager.interact(ItemInWorldManager.java:294)

    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:634)

    at net.minecraft.server.Packet15Place.handle(SourceFile:39)

    at net.minecraft.server.NetworkManager.b(NetworkManager.java:229)

    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:112)

    at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)

    at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:554)

    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:452)

    at net.minecraft.server.ThreadServerApplication.run(SourceFile:490)

Caused by: java.lang.ArrayIndexOutOfBoundsException: 0

    at net.croxis.plugins.lift.LiftRedstoneListener.onBlockRedstoneChange(LiftRedstoneListener.java:41)

    at sun.reflect.GeneratedMethodAccessor115.invoke(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

    at java.lang.reflect.Method.invoke(Unknown Source)

    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:301)

    ... 12 more

I am not sure what causes it, but there are around 5 errors just like this one in a row.

When "pushing" the upper sign with a block in your hand

It places the block, there should be a cancel event when choosing the floor from upper sign.

Lift 11

version
18:21:35 [INFO] This server is running CraftBukkit version git-Bukkit-1.2.3-R0.2-38-gf6e6922-b2083jnks (MC: 1.2.3) (Implementing API version 1.2.3-R0.3-SNAPSHOT)

Pressing non lift button results in error

01:15:24 [SEVERE] Could not pass event REDSTONE_CHANGE to Lift
java.util.NoSuchElementException
at java.util.TreeMap.key(TreeMap.java:1221)
at java.util.TreeMap.lastKey(TreeMap.java:292)
at net.croxis.plugins.lift.Elevator.getTotalFloors(Elevator.java:189)
at net.croxis.plugins.lift.LiftRedstoneListener.onBlockRedstoneChange(LiftRedstoneListener.java:27)
at org.bukkit.plugin.java.JavaPluginLoader$38.execute(JavaPluginLoader.java:520)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:58)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:339)
at net.minecraft.server.BlockButton.interact(BlockButton.java:142)
at net.minecraft.server.BlockButton.b(BlockButton.java:125)
at net.minecraft.server.ItemInWorldManager.dig(ItemInWorldManager.java:119)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:497)
at net.minecraft.server.Packet14BlockDig.a(SourceFile:43)
at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:92)
at net.minecraft.server.NetworkListenThread.a(SourceFile:108)
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:516)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:414)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:457)

Going up in 1 floor

I want to fix? or request this feature, that you can only go up, but you can't go down..

I tried making lift only 1 floor but it says "it's only 1 floor" and I can't get up, old bLift can do this, I hope you can fix/add this..

[Question] flying?

If people make a lift which goes far, they always get disconnected, probably for flying. I also use NoCheat but it's not displaying it as hack. is there any way i can still disallow flying, but use your plugin without those ppl getting disconnected?

Tried to add lapis_lazuli_block to the conf

17:58:08 [SEVERE] Error occurred while enabling Lift v11 (Is it up to date?)
java.lang.IllegalArgumentException: No enum constant org.bukkit.Material.LAPIS_LAZULI_BLOCK
at java.lang.Enum.valueOf(Unknown Source)
at org.bukkit.Material.valueOf(Material.java:20)
at net.croxis.plugins.lift.Lift.onEnable(Lift.java:47)
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:215)
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:336)
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:363)
at org.bukkit.craftbukkit.CraftServer.loadPlugin(CraftServer.java:250)
at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:232)
at org.bukkit.craftbukkit.CraftServer.reload(CraftServer.java:539)
at org.bukkit.Bukkit.reload(Bukkit.java:182)
at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:22)
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:166)
at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:469)
at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:907)
at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:867)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:850)
at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:33)
at net.minecraft.server.NetworkManager.b(NetworkManager.java:229)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:116)
at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:554)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:452)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:490)

Lift 11

version
18:21:35 [INFO] This server is running CraftBukkit version git-Bukkit-1.2.3-R0.2-38-gf6e6922-b2083jnks (MC: 1.2.3) (Implementing API version 1.2.3-R0.3-SNAPSHOT)

Lift kicks players from server

You might toggling setAllowedFlight(True) when people using the lift, in order to prevent the server from kicking them out for no real reason.

Version: Lift-11.jar
Bukkit: git-Bukkit-1.2.3-R0.2-b2060jnks

Other Plugins of interest:

NoLagg <- might have an influence

NPE with lift

I don't know why it happen and what does change ingame, lift seems working but NPE's are throwed from console like this:

02:38:27 [SEVERE] Could not pass event REDSTONE_CHANGE to Lift
java.lang.NullPointerException
at net.croxis.plugins.lift.Elevator.isInShaftAtFloor(Elevator.java:169)
at net.croxis.plugins.lift.LiftRedstoneListener.onBlockRedstoneChange(LiftRedstoneListener.java:76)
at org.bukkit.plugin.java.JavaPluginLoader$38.execute(JavaPluginLoader.java:525)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:58)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:339)
at net.minecraft.server.BlockButton.interact(BlockButton.java:142)
at org.getspout.spout.block.mcblock.CustomBlock.interact(CustomBlock.java:323)
at net.minecraft.server.ItemInWorldManager.interact(ItemInWorldManager.java:275)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:593)
at net.minecraft.server.Packet15Place.a(SourceFile:39)
at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:93)
at org.getspout.spout.SpoutNetServerHandler.a(SpoutNetServerHandler.java:550)
at net.minecraft.server.NetworkListenThread.a(SourceFile:108)
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:527)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:425)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:457)

Config for floor type

Could you please add a configuration for the floor type?
It would be useful for us to change what the lift uses for the floor as some buildings use iron blocks for flooring.

Thanks

There is only one floor silly.

This is the only thing i see each time i right click a sign to enable the lift and the floor.

using 1.2.3-R0.3, essentials, spout, factions.
removed sign protection also, still not working.

will this deffinatly work reverting to 1.2.3-R0.2 dev release?
im happy to revert versions if you can advise me if it works or not.

Fall damage

Normal non op players take fall damage when they go down the shaft from say floor 3 to floor 1 any way to stop this?

ppl can troll other ppl and die in the lift

Ppl can die in it =)

when 2 ppl are in the same elevator at the same time.. or a player trolls another player and pushes the button when the friend is on the pad.

It creates a problem cos now the plugin wants to move both players down or up. and the one who is not in the pad just stays and the other gets stuck when he arrives and can't go anywhere before the other guy has arrived.

Error in Lift11 - LiftSpeed

In the new config file generated at Lift11 doesnt appears nothing about the lift speed and doesnt run the config file from other versions. Fix this please, the lagged servers needs this option...

Removes blocks and replaces them with glass

I first did a lift with arround 28 glass blocks when i realised it wasnt meant like 16x16. I then removed that and did a new lift
at the same position. I removed all signs and buttons when I created the new lift. Now, it replaces some blocks with glass in every floor, the lift doesnt work correclty and it says this in console:

2011-12-26 19:56:16 [SEVERE] Could not pass event REDSTONE_CHANGE to Lift
java.lang.NullPointerException
at net.croxis.plugins.lift.Elevator.isInShaftAtFloor(Elevator.java:169)
at net.croxis.plugins.lift.LiftRedstoneListener.onBlockRedstoneChange(LiftRedstoneListener.java:76)
at org.bukkit.plugin.java.JavaPluginLoader$38.execute(JavaPluginLoader.java:525)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:58)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:339)
at net.minecraft.server.BlockButton.interact(BlockButton.java:142)
at org.getspout.spout.block.mcblock.CustomBlock.interact(CustomBlock.java:323)
at net.minecraft.server.ItemInWorldManager.interact(ItemInWorldManager.java:275)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:593)
at net.minecraft.server.Packet15Place.a(SourceFile:39)
at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:93)
at org.getspout.spout.SpoutNetServerHandler.a(SpoutNetServerHandler.java:550)
at net.minecraft.server.NetworkListenThread.a(SourceFile:108)
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:527)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:425)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:457)

Height Limit???

Is There a Height Limit. Im have a 1.2.3 server and it dose not working going down after around 120 blocks up. Help???

lift does not start anymore

from 1 to another restart the plugin is not working anymore.
and i do not know where it comes from.
heres the log
2012-02-03 16:17:30 [SEVERE] Error occurred while enabling Lift v7 (Is it up to date?): org.bukkit.plugin.PluginManager.registerEvents(Lorg/bukkit/event/Listener;Lorg/bukkit/plugin/Plugin;)V
java.lang.NoSuchMethodError: org.bukkit.plugin.PluginManager.registerEvents(Lorg/bukkit/event/Listener;Lorg/bukkit/plugin/Plugin;)V
at net.croxis.plugins.lift.LiftRedstoneListener.(LiftRedstoneListener.java:22)
at net.croxis.plugins.lift.Lift.onEnable(Lift.java:24)
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:230)
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:970)
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:280)
at org.bukkit.craftbukkit.CraftServer.loadPlugin(CraftServer.java:187)
at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:170)
at net.minecraft.server.MinecraftServer.t(MinecraftServer.java:355)
at net.minecraft.server.MinecraftServer.a(MinecraftServer.java:342)
at net.minecraft.server.MinecraftServer.init(MinecraftServer.java:174)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:406)
at net.minecraft.server.ThreadServerApplication.run(SourceFile:465)

Lift carried on lifting where there was no lift :/

epic plugin :P
Had a little glitch, half way down it started bouncing up and down and next minute i was dead on the floor, lol
Only problem was spawned miles away from the lift but was stilll going up and down, had to log out and back in to stop lol
Was very enjoyable and funny glitch :D
sorry cant help more :/
No errors what so ever in console

Moving lift floor

So I also tested out V10Lift which was like a real lift but has a but too much setting up but I really loved the way the floor moved and I could call the lift when it was in another floor.

So maybe you can that the floor moves under the players feet?

And can you add the option to use another type of glass as a floor besides glass. Maybe make a command /lift floor select
and then right click the blocks you want for the lift.

Thanks

Urgent! Annoying sign problem (Popping off)

After insalling the Lift 13 plugin we started having a problem.

It seems its also permission based command which is strange since this plugin doesnt have any.

Problem is I am using pex and I have ' * ' permissions which is full permissions but builders who have limited permissions can't place empty signs anywhere, they just pop off.

Me in the other hand can make them normally.

Please fix this ASAP its making fake LWC protection.

Thank you

Multiverse Compatibility?

I'm having an issue with Multiverse, apparently. Not sure if it is a Multiverse or a Lift issue, but I'll bug people on both sides.

So, I created a world called world_new in order to transition to the 1.2 map. I have copied over the spawn which previously used bLift and changed the elevators to the layout this plugin requires, and here's where I bump into a problem.

If I am on the first floor, nothing happens after I push the button. At all. If I am on the second floor, the glass floor disappears for a split second, I start falling down, but as the glass re-appears, I come back to the second floor.

The plugin works perfectly in the Nether and in the End, though.

Bukkit build #2036
Multiverse build #513
Lift 9

Movement is laggy since version 2.0

I don't know why, but the lift movement is laggy since version 2.0 of the plugin

Tested on a 1x1 lift, on CB 1597.
Seems to be only when the lift go up
In comparaison with version 1.4 of the plugin (on the same lift)

Error: Doesn't work

Hello, I saw your mod showcased and loved it and wanted to use. However, Lift 12 (I am 1.2.3) is giving me an error telling me to check the log. I didn't see anything to try and edit it and I didn't feel smart enough to check for an error in the code. The Error it gives me is "There was an error in the code, please report bug, conditions, and debug log if possible please." The bug is it simply doesn't work. Conditions: Built a small platform to test it out. Two floors in total, the second floor containing glass for the bottom of it. Each floor had the required Sign, Button, and Optional sign(I was testing the labeling) on each. When right-clicking on either sign, it gives the above message saying that something is wrong with the code.

i'm getting this error

[SERVERE] Error occured while enabling Lift v7 (is it up to date?): org.bukkit.plugin.pluginManager.registerEvents(Lotg/bukkit/event/listener;Lorg/bukkit/plugin/Plugin:)V

any ideas?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.