Changes in Q2Java 0.9.4

There were 3 main changes made in this version: the "DOM"-estication of the map entities, revamping of the printing system to use the event-delegation model, and renaming of the server frame listener and support classes. Also, the included copy of OpenXML has been updated to version 1.0.6, and javax.vecmath to 1.1-1.0.

The "DOM"-estication of the map entities means that all the constructors for map entity classes (such as weapons, ammoboxes, doors, etc), now take DOM Element objects as an argument (instead of an array of Strings, which was the old way of doing things). There were -so- many classes involved in this change that I won't bother trying to list them all. For the most part, the only change was in the declaration of the constructor - since the utility methods for reading spawn args hide most of the differences between the arg styles.

The printing system was quite a mess before, with printing being handled in several places such as the Player class, the CTF team class, and the Game class. Now, everything is unified with a single set of PrintEvent, PrintListener, and PrintSupport classes. Player chats, team chats, debugging output, and localized announcements all now come through a single mechanism, that can easily be listened to, filtered, and even modified (for spam supression, bad word filtering, logging, telnet servers, etc).

The changing of the server frame listener classes, and alteration of the method names in the Game class for adding and removing listeners also caused many many classes to be slightly changed. But that was pretty much simple search/replace name change type stuff, and did't actually change the way things work. So for most of those changes I won't bother actually listing them here either.

Changes to DLL
Fix Barry | javalink_generic.c now #includes stdlib.h to fix compile warning about getenv()
Changes in Java Classes
q2java.Engine
Added Barry | Private constructor added to prevent people from trying to create instances of this class.
q2java.Q2Recycler
Added Barry | getHashtable() and put(Hashtable h) for handling Hashtables.
q2java.baseq2.GameObject
Change Barry | Constructor now takes a DOM Element object as an argument, and saves it in a fSpawnArgs field. Since this is the granddaddy of just about all game object classes, every subclass now has to do likewise.
q2java.baseq2.GenericBlaster
Fix Barry | fire() method was calling getPlayerViewAngles() on the weapon NativeEntity instead of the Player NativeEntity.
q2java.baseq2.Player
Change Barry | Class now implements PrintListener instead of LocaleListener
Added Barry | New (transient) "team" property added, with getTeam() and setTeam() methods. The type of the team property is just a java.lang.Object, so anything could be used, from a simple String all they way up to a special "Team" class as CTF uses.
Change Barry | cmd_say() and cmd_say_team() now send print messages through the event model rather than directly broadcasting themselves.
Change Barry | isTeammate() updated to check new "team" property.
Removed Barry | localecast() no longer needed, now handled through the new printing system.
Change Barry | playerCommand() sends unrecognized commands as chats through the new printing system.
Added Barry | print() method is the single point now for all print messages being sent to a player. This includes general chats, team chats, and localized game announcements.
q2java.baseq2.event.PlayerEvent
Added Leigh | toString() method to help with debugging.
q2java.baseq2.event.RuleEvent
Added Leigh | toString() method to help with debugging.
q2java.baseq2.gui.PlayerMenu
Fix Brian H | Problem with player overflowing because of scrolling through menu too fast fixed by limiting menu motion to one move per server-frame.
q2java.core.DefaultLevelDocumentFactory
Added Barry | parseAngle3f() and parsePoint3f() moved here from q2java.core.GameUtil
q2java.core.FrameList
Removed Barry | Moved to the q2java.core.event package and renamed as ServerFrameSupport
q2java.core.FrameListener
Change Barry | Deprecated in favor of the new, otherwise indentical q2java.core.event.ServerFrameListener interface.
q2java.core.Game
Change Barry | addFrameListener() deprecated in favor of the new, otherwise indentical addServerFrameListener() method.
Removed Barry | addLocaleListener() and addPrintListener() no longer needed under the new printing system.
Added Barry | addServerFrameListener() does what addFrameListener() used to do.
Added Barry | Private constructor added to prevent people from trying to create instances of this class.
Added Barry | getPrintSupport() to get a reference to the object managing printing in the game.
Added Barry | New variant of getResourceGroup() that takes a string as an argument.
Change Barry | removeFrameListener() deprecated in favor of the new, otherwise indentical removeServerFrameListener() method.
Removed Barry | removeLocaleListener() and removePrintListener() no longer needed under the new printing system.
Added Barry | removeServerFrameListener() does what removeFrameListener() used to do.
Fix Barry | serverCommand() now handles commands in the form [gamelet].[cmd] better.
q2java.core.GameletManager
Change Leigh | addGamelet() and removeGamelet() now provide more feedback to the admin.
Fix Barry | Gamelets loaded at startup from the command line or in the q2java.properties file that required a level change (such as CTF) weren't being initialized until the first level change.
q2java.core.GameUtil
Change Barry | Utility methods for dealing with spawnargs updated to work with DOM Element objects instead of arrays of strings.
Removed Barry | parseAngle3f() and parsePoint3f() moved to q2java.core.DefaultLevelDocumentFactory() since they were mainly used in parsing the default info embedded in Q2 maps.
q2java.core.LocaleListener
Removed Barry | This interface is no longer needed due to the new printing system.
q2java.core.OpenXMLFactory
Change Barry | readXMLDocument() and writeXMLDocument() now take Reader and Writer arguments instead of InputStream and OutputStream.
q2java.core.PrintListener
Removed Barry | This interface is no longer needed due to the new printing system.
q2java.core.ResourceGroup
Removed Barry | addLocaleListener(), removeLocaleListener() and localecast() taken out since the new printing system takes care of that. The ResourceGroup class has been cut back so that now it is simply a cache for ResourceBundle objects.
q2java.core.XMLFactory
Change Barry | readXMLDocument() and writeXMLDocument() now take Reader and Writer arguments instead of InputStream and OutputStream.
q2java.core.XMLTools
Change Barry | readXMLDocument() and writeXMLDocument() now take Reader and Writer arguments instead of InputStream and OutputStream.
q2java.core.event.EventPack
Added Leigh | A trace of events can be written to the debug log, either by setting the system property "q2java.debug.event=1" or through the new setDebugEvents() method.
q2java.core.event.GenericEvent
Change Leigh | toString() cleaned up.
q2java.core.event.PrintEvent
Added Barry | New class to represent a message being sent to various PrintListeners.
q2java.core.event.PrintListener
Added Barry | New interface for classes interesting in receiving PrintEvent objects. There used to be a q2java.core.PrintListener interface, but this is quite a bit different.
q2java.core.event.PrintSupport
Added Barry | New class for keeping track of PrintListeners, and firing PrintEvents off to them. There are two event-firing methods, one that fires off a simple message, and another that localizes the message for each active locale (English, Dutch, German, etc) and fires each variation to the listeners that have specified that particular locale when they registered themselves.
q2java.core.event.ServerFrameListener
Added Barry | New interface that's identical to and replaces the old q2java.core.FrameListener interface (which has been deprecated).
q2java.core.event.ServerFrameSupport
Added Barry | The old q2java.core.FrameList class, just renamed and moved to the q2java.core.event package.
q2java.ctf.CTFPlayer
Removed Barry | getTeam(), and isTeammate() now handled by similarly named methods in the q2java.baseq2.Player class.
Change Barry | setTeam() changed to use the superclass setTeam() but ensures that a CTF Team object is being used.
q2java.ctf.GenericTech
Fix Brian H | Bad resource bundle name caused exception to be thrown if a player carrying a tech touched another tech.
q2java.ctf.Team
Change Barry | Team class no longer handles team chats, since the new printing system takes care of that.

Q2Java homepage