Wiki Index

Wiki Index
Spout, formerly BukkitContrib, is a framework to bridge the gap between single-player mods, and multiplayer Bukkit plugins. It allows access to additional server side API, and client side API for Bukkit plugins.

History(top)

BukkitContrib was initially a one man project, started by Afforess. It was started out of frustration with the slow pace of Bukkit features and the Bukkit team's perceived perfectionism with code.

Humble Beginnings(top)

BukkitContrib advertised itself as an enhanced server side API for other plugins, and it's initial offering with version 0.0.1 provided access to Inventory events. Inventory events are events that occur when a player opens a closes any container (chest, furnace, etc) and moves items in between their inventory and the container's contents. The API allowed developers fine tuned controls over the inventory, with the ability to block or alter the results of different player actions inside of an inventory window. Inventory events had long been a feature generally considered lacking from the Bukkit project. Subsequent versions (0.0.2, 0.0.3) fixed bugs that were in the initial inventory events.

Client Side API(top)

The 0.0.4 release of BukkitContrib also came bundled with an optional client side mod that players could optionally install to get access to new features in the API. It fixed certain bugs in the vanilla game, and allowed plugins to alter the skin, cape, and user title of players. Also, it allowed for plugins to listen to key presses on the client and act based on what keys the players press. The next release of BukkitContrib, 0.0.5, fixed and perfected the changes that 0.0.4 offered.
The next major features for BukkitContrib came in the 0.0.6 and 0.0.7 releases. BukkitContrib added additional API to allow customization of achievement popups, and to display them in game. Also, playing vanilla or custom music became possible, as long as it was in the ogg, midi, or wave formats. The next releases, 0.0.8 and 0.0.9 further enhanced custom music playback, allowing plugins to play music centered at specific locations in game, and faded away as players left it. The ability to manipulate the sky, sun, moon and stars also was added to the API. Builds 0.1.0, 0.1.1, and 0.1.2 continued to fix bugs that were introduced with the new features.
Then, Minecraft updated. BukkitContrib remained broken for 10 days until it was updated to 1.7.3. After the 1.7.3, a slew of new bug fixes, performance fixes and minor features were added in 0.1.4. The bug fixes continued in 0.1.5 and 0.1.6. The 0.1.7 release added several more features, notably, the ability to change the tooltip hover over for items in game. During this time, Wulfspider, a web developer who worked on AuthDB offered to host a jenkins site for BukkitContrib. Jenkins is a automated compiler for Java, which seamlessly used the github repository to create test builds from every push to the repository.

BukkitContrib Launcher(top)

While Afforess was developing BukkitContrib, a separate user, alta189, created a Java-based launcher that installed BukkitContrib for users, expediting the process for less tech-savvy users. The launcher quickly gained popularity, with thousands of downloads in the few weeks it was active.

Long Live Spout!(top)

While BukkitContrib was enjoying relative success, it remained a niche project due to the limitations of client modding. Afforess decided that the project would have to evolve into a Bukkit-like system on the client, where addons could be used in singleplayer gameplay, while allowing servers to maintain control over what singleplayer addons would be used while online. Additionally, the prospect of gaining GlowStone support, a Minecraft server written in Java, but not based on decompiled code, would require that the BukkitContrib plugin be split from the BukkitContrib API. alta189's success with the installer also increased the desire to have a fully fledged Minecraft launcher that took all the trouble of mods away from users, and allowed for seamless autoupdating. A name change for this large shift in project focus was decided, and Wulfspider came up with the initial suggestion for Spout. So the project was split five ways. Spout was to become the Bukkit plugin, the code that implemented SpoutAPI. SpoutAPI was the API for other plugins to use. It remained separate so that custom servers could implement the framework without the plugin. Spoutcraft became the name of the client side modification. SpoutcraftAPI was the API for addons and what they could interact with on the server. And the Spoutcraft Launcher was the name for the lookalike Minecraft Launcher. Also at this time, Afforess created the Spout Development Team, and recruited alta189 and Wulfspider to the project.

Rise of Spout(top)

Development of Spout continued where BukkitContrib left off. alta189 designed and created a launcher that kept Spoutcraft installations separate from Minecraft, whilst not breaking any copyright laws. Afforess continued development, and many more features were added. On Spoutcraft, a variety of performance enhancements kept Spoutcraft running significantly smoother than the official release of Minecraft. On Spout, Afforess launched a customizable graphical interface API, allowing plugin developers for the first time to design and alter the appearance of the HUD, and create customized popups. At this time, Raphfrk, the developer of Server Port, also joined the development team, bringing a wealth of networking knowledge. Raphfrk improved much of the networking code, and implemented a variety of bandwidth improvements. Foremost of the improvements was a client side chunk cache that kept server maps in memory between games, and checked the map for only delta changes, which cut bandwidth by 70-80% for Spoutcraft players.
After the 1.0.1 release, The Spout Team grew by two more, adding narrowtux and Top_Cat to the team. Narrowtux brought a wide variety of graphical knowledge and begun improving the existing basic graphics interface. Top_Cat initially worked on improving the Spoutcraft Launcher, but quickly made improvements and handled tasks on all of the projects.

How It Works(top)

Spout relies heavily on reflection. Reflection in Java allows code to modify and access private or protected methods and fields. Spout uses reflection to replace a variety of the notchcode and Bukkit classes at run-time, giving it access to a broad amount of the code base.

What are the server-side features?(top)

  • Teleport smoothing - Loads the chunks before you get there in a smart way.
  • Control of visual cheats by the admin (coordinates, disabling weather, etc).
  • The ability to control if anyone can join, or if only people with the client can join (Defaults to anyone).
  • Chunk caching for those with the client, saving bandwidth for the server AND your users.
  • Automatic updating to new Recommended Builds of the server plugin.

What does the plugin API provide?(top)

(Players DO NOT need the Spoutcraft client mod installed.)
  • Inventory events
  • OnServerTick event
  • Safe async block set type id
  • Access to crafting matrix (workbench, inventory)

What does the plugin API + client mod provide?(top)

(Players DO need the Spoutcraft client mod installed.)
GUI
  • Custom GUI API to make your own screens and HUD elements
  • Custom achievement notifications
Visual
  • Custom skins, capes, and multi-line capable titles
  • Custom item textures
  • Custom item hover-over names
  • Control texture packs
  • Control star frequency
  • Control sky and cloud colors
  • Control cloud height/visibility
  • Control sun and moon texture and size
  • Control weather rendering for biomes
  • Maximum/minimum fog levels
Audio
  • Play Minecraft sound effects and music
  • Play custom sound effects and music
  • Stop music playback with fade out
Events
  • Key press and release
  • Background music change
  • Change fog and fog change
Movement
  • Control jump height
  • Control gravity
  • Control speed in air, on the ground, and while swimming
Misc
  • Pre-cache custom textures/sounds/other things your plugin uses on login.
  • Server reconnect API
  • Clipboard get/set

What are the client-side features?(top)

(Players must have the Spoutcraft client mod installed.)
  • Optional performance improvements inspired by OptiFine
  • Optional advanced video options
  • HD fonts and BetterGrass integrated
  • HD textures support integrated
  • Sign rendering performance improvements
  • Biome water colors (watercolor.png usage)
  • SetRemainingAir/SetMaximumAir render correctly
  • Configurable chunk caching
  • Enabling/disabling of visual cheats as set by Spout on a server.
  • Customizable shortcuts, key bindings, and advanced video settings.
  • In-game public server list and search and filter options.
  • In-game texture pack database and installation.
Dec 5, 2011
Cybermaxke, Cool, Zmod and 7 others like this.