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