Fix: All known issues with CHANGE_MODEL packet and player skins fixed.
Fix: Client crashed on startup if 4 or 5 command-line arguments were given. Arguments 5 (skinServer) and 6 (fullscreen) were supposed to be optional, but weren't.
Fix: Sheep models were being rendered without fur.
New: Client can now understand direct-connect URLs in command line. There are now three ways to launch the client:
Multiplayer B:java -jar client.jar serverIP port username mppass [skinServerUrl [fullscreen?]]
Other changes:
Player and NetworkPlayer classes now both derive from HumanoidMob, which hosts shared rendering code and skin/model changing API.
Removed most serialVersionUID variables. Since we no longer use raw Java serialization for save games (and never will), those are unneeded. They should be kept for exceptions though -- those should always be serializable.
Fixed SkinDownloadThread not logging errors properly.
When SET_BLOCK_PERMISSIONS packet is received, block names are now logged instead of IDs.
Added constants for all mob texture names to Textures.
Cleanup and optimization in Level.java. Switched from using an ArrayList to ArrayDeque for tickList.
Got rid of ability to render humanoid mobs with armor, which was apparently possible in survivaltest.
New skin API:
HumanoidMob.setSkin(String) Sets player's skin. Can accept usernames (skin will be downloaded from location of Minecraft.skinServer). Can also accept absolute URLs, as long as they begin with "http://" or "https://" and end with ".png" (case-insensitive). Can also accept null or empty strings (which act exactly like resetSkin()).
NOTE: If modelName is an integer (i.e. is a block model), given skin will be ignored.
NOTE: If modelName is not "humanoid", only absolute URLs will be accepted.
NOTE: Does not block -- skins are downloaded asynchronously by SkinDownloadThread.
HumanoidMob.resetSkin() Replaces current skin with the default texture for current model. Same as calling setSkin(null).
HumanoidMob.getSkinName() Gets the name of the current skin. Can be 'null' (meaning 'use default').
HumanoidMob.reloadSkin() Causes current skin to be re-downloaded (if any is set). Does not block.
HumanoidMob.setSkinImage(String,BufferedImage) Called by SkinDownloadThread to pass the downloaded image. Only uses the image if skinName has not changed since download started. You should probably just use setSkin(String) and not touch this one.
New model API:
HumanoidMob.setModel(String) Sets model name. newName must not be null. Removes any non-standard skin. For humanoid skins, setSkin() should be called with the player's name afterwards, otherwise default humanoid skin (char.png) will be used.
Mob.getModelName() Returns current model name. Will not be null.
User-visible changes:
java -jar client.jar
java -jar client.jar directConnectLink [skinServerUrl [fullscreen?]]
java -jar client.jar serverIP port username mppass [skinServerUrl [fullscreen?]]
Other changes:
Textures
.New skin API:
Minecraft.skinServer
). Can also accept absolute URLs, as long as they begin with "http://" or "https://" and end with ".png" (case-insensitive). Can also accept null or empty strings (which act exactly likeresetSkin()
).modelName
is an integer (i.e. is a block model), given skin will be ignored.modelName
is not "humanoid", only absolute URLs will be accepted.SkinDownloadThread
.setSkin(null)
.SkinDownloadThread
to pass the downloaded image. Only uses the image ifskinName
has not changed since download started. You should probably just usesetSkin(String)
and not touch this one.New model API:
char.png
) will be used.