diff --git a/.gitignore b/.gitignore
index 8c48780..792cb1d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
gradle/
.gradle/
-desktopRuntime/
+desktopRuntime/filesystem
build/
\ No newline at end of file
diff --git a/desktopRuntime/eclipseProject/.classpath b/desktopRuntime/eclipseProject/.classpath
index 160ff44..3dcae69 100644
--- a/desktopRuntime/eclipseProject/.classpath
+++ b/desktopRuntime/eclipseProject/.classpath
@@ -15,5 +15,8 @@
+
+
+
diff --git a/desktopRuntime/eclipseProject/.gitignore b/desktopRuntime/eclipseProject/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/desktopRuntime/eclipseProject/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/desktopRuntime/eclipseProject/jars/Java-WebSocket-1.5.1-with-dependencies.jar b/desktopRuntime/eclipseProject/jars/Java-WebSocket-1.5.1-with-dependencies.jar
new file mode 100644
index 0000000..8fb33ad
Binary files /dev/null and b/desktopRuntime/eclipseProject/jars/Java-WebSocket-1.5.1-with-dependencies.jar differ
diff --git a/desktopRuntime/eclipseProject/jars/codecjorbis-20101023.jar b/desktopRuntime/eclipseProject/jars/codecjorbis-20101023.jar
new file mode 100644
index 0000000..e7e1f4a
Binary files /dev/null and b/desktopRuntime/eclipseProject/jars/codecjorbis-20101023.jar differ
diff --git a/desktopRuntime/eclipseProject/jars/codecwav-20101023.jar b/desktopRuntime/eclipseProject/jars/codecwav-20101023.jar
new file mode 100644
index 0000000..7b6b1bd
Binary files /dev/null and b/desktopRuntime/eclipseProject/jars/codecwav-20101023.jar differ
diff --git a/desktopRuntime/eclipseProject/jars/soundsystem-20120107.jar b/desktopRuntime/eclipseProject/jars/soundsystem-20120107.jar
new file mode 100644
index 0000000..52b6468
Binary files /dev/null and b/desktopRuntime/eclipseProject/jars/soundsystem-20120107.jar differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave1.mp3 b/desktopRuntime/resources/sounds/ambient/cave/cave1.mp3
deleted file mode 100644
index b9d43cd..0000000
Binary files a/desktopRuntime/resources/sounds/ambient/cave/cave1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave1.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave1.ogg
new file mode 100644
index 0000000..4f41bb7
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave1.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave10.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave10.ogg
new file mode 100644
index 0000000..3e68563
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave10.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave11.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave11.ogg
new file mode 100644
index 0000000..7e60f4e
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave11.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave12.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave12.ogg
new file mode 100644
index 0000000..4fe0b33
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave12.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave13.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave13.ogg
new file mode 100644
index 0000000..1490515
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave13.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave2.mp3 b/desktopRuntime/resources/sounds/ambient/cave/cave2.mp3
deleted file mode 100644
index 47e22ee..0000000
Binary files a/desktopRuntime/resources/sounds/ambient/cave/cave2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave2.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave2.ogg
new file mode 100644
index 0000000..3c5619f
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave2.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave3.mp3 b/desktopRuntime/resources/sounds/ambient/cave/cave3.mp3
deleted file mode 100644
index a2bc1e0..0000000
Binary files a/desktopRuntime/resources/sounds/ambient/cave/cave3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave3.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave3.ogg
new file mode 100644
index 0000000..2030ccb
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave3.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave4.mp3 b/desktopRuntime/resources/sounds/ambient/cave/cave4.mp3
deleted file mode 100644
index 3220da5..0000000
Binary files a/desktopRuntime/resources/sounds/ambient/cave/cave4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave4.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave4.ogg
new file mode 100644
index 0000000..8d4ecdd
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave4.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave5.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave5.ogg
new file mode 100644
index 0000000..19cc275
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave5.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave6.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave6.ogg
new file mode 100644
index 0000000..dd118c8
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave6.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave7.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave7.ogg
new file mode 100644
index 0000000..2657084
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave7.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave8.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave8.ogg
new file mode 100644
index 0000000..55b3dde
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave8.ogg differ
diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave9.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave9.ogg
new file mode 100644
index 0000000..8238e75
Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave9.ogg differ
diff --git a/desktopRuntime/resources/sounds/damage/fallbig1.mp3 b/desktopRuntime/resources/sounds/damage/fallbig1.mp3
deleted file mode 100644
index 305f6cc..0000000
Binary files a/desktopRuntime/resources/sounds/damage/fallbig1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/damage/fallbig1.ogg b/desktopRuntime/resources/sounds/damage/fallbig1.ogg
new file mode 100644
index 0000000..ae71b94
Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/fallbig1.ogg differ
diff --git a/desktopRuntime/resources/sounds/damage/fallbig2.mp3 b/desktopRuntime/resources/sounds/damage/fallbig2.mp3
deleted file mode 100644
index e9c17ac..0000000
Binary files a/desktopRuntime/resources/sounds/damage/fallbig2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/damage/fallbig2.ogg b/desktopRuntime/resources/sounds/damage/fallbig2.ogg
new file mode 100644
index 0000000..74707c0
Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/fallbig2.ogg differ
diff --git a/desktopRuntime/resources/sounds/damage/fallsmall.mp3 b/desktopRuntime/resources/sounds/damage/fallsmall.mp3
deleted file mode 100644
index 853a806..0000000
Binary files a/desktopRuntime/resources/sounds/damage/fallsmall.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/damage/fallsmall.ogg b/desktopRuntime/resources/sounds/damage/fallsmall.ogg
new file mode 100644
index 0000000..fc3009b
Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/fallsmall.ogg differ
diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh1.mp3 b/desktopRuntime/resources/sounds/damage/hurtflesh1.mp3
deleted file mode 100644
index 658c553..0000000
Binary files a/desktopRuntime/resources/sounds/damage/hurtflesh1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh1.ogg b/desktopRuntime/resources/sounds/damage/hurtflesh1.ogg
new file mode 100644
index 0000000..3655599
Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/hurtflesh1.ogg differ
diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh2.mp3 b/desktopRuntime/resources/sounds/damage/hurtflesh2.mp3
deleted file mode 100644
index 4e3fbe0..0000000
Binary files a/desktopRuntime/resources/sounds/damage/hurtflesh2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh2.ogg b/desktopRuntime/resources/sounds/damage/hurtflesh2.ogg
new file mode 100644
index 0000000..aaff612
Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/hurtflesh2.ogg differ
diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh3.mp3 b/desktopRuntime/resources/sounds/damage/hurtflesh3.mp3
deleted file mode 100644
index 8f3459a..0000000
Binary files a/desktopRuntime/resources/sounds/damage/hurtflesh3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh3.ogg b/desktopRuntime/resources/sounds/damage/hurtflesh3.ogg
new file mode 100644
index 0000000..b6ea95e
Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/hurtflesh3.ogg differ
diff --git a/desktopRuntime/resources/sounds/fire/fire.ogg b/desktopRuntime/resources/sounds/fire/fire.ogg
new file mode 100644
index 0000000..42758b9
Binary files /dev/null and b/desktopRuntime/resources/sounds/fire/fire.ogg differ
diff --git a/desktopRuntime/resources/sounds/fire/ignite.ogg b/desktopRuntime/resources/sounds/fire/ignite.ogg
new file mode 100644
index 0000000..9063eeb
Binary files /dev/null and b/desktopRuntime/resources/sounds/fire/ignite.ogg differ
diff --git a/desktopRuntime/resources/sounds/liquid/lava.mp3 b/desktopRuntime/resources/sounds/liquid/lava.mp3
deleted file mode 100644
index 48d62a5..0000000
Binary files a/desktopRuntime/resources/sounds/liquid/lava.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/liquid/lava.ogg b/desktopRuntime/resources/sounds/liquid/lava.ogg
new file mode 100644
index 0000000..a03b491
Binary files /dev/null and b/desktopRuntime/resources/sounds/liquid/lava.ogg differ
diff --git a/desktopRuntime/resources/sounds/liquid/lavapop.mp3 b/desktopRuntime/resources/sounds/liquid/lavapop.mp3
deleted file mode 100644
index 4200144..0000000
Binary files a/desktopRuntime/resources/sounds/liquid/lavapop.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/liquid/lavapop.ogg b/desktopRuntime/resources/sounds/liquid/lavapop.ogg
new file mode 100644
index 0000000..0173bf9
Binary files /dev/null and b/desktopRuntime/resources/sounds/liquid/lavapop.ogg differ
diff --git a/desktopRuntime/resources/sounds/liquid/splash.mp3 b/desktopRuntime/resources/sounds/liquid/splash.mp3
deleted file mode 100644
index b9a5ef3..0000000
Binary files a/desktopRuntime/resources/sounds/liquid/splash.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/liquid/splash.ogg b/desktopRuntime/resources/sounds/liquid/splash.ogg
new file mode 100644
index 0000000..8d91a23
Binary files /dev/null and b/desktopRuntime/resources/sounds/liquid/splash.ogg differ
diff --git a/desktopRuntime/resources/sounds/liquid/water.mp3 b/desktopRuntime/resources/sounds/liquid/water.mp3
deleted file mode 100644
index c9c7908..0000000
Binary files a/desktopRuntime/resources/sounds/liquid/water.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/liquid/water.ogg b/desktopRuntime/resources/sounds/liquid/water.ogg
new file mode 100644
index 0000000..157491b
Binary files /dev/null and b/desktopRuntime/resources/sounds/liquid/water.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/blaze/breathe1.ogg b/desktopRuntime/resources/sounds/mob/blaze/breathe1.ogg
new file mode 100644
index 0000000..7c91486
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/breathe1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/blaze/breathe2.ogg b/desktopRuntime/resources/sounds/mob/blaze/breathe2.ogg
new file mode 100644
index 0000000..a296c87
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/breathe2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/blaze/breathe3.ogg b/desktopRuntime/resources/sounds/mob/blaze/breathe3.ogg
new file mode 100644
index 0000000..a374f1f
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/breathe3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/blaze/breathe4.ogg b/desktopRuntime/resources/sounds/mob/blaze/breathe4.ogg
new file mode 100644
index 0000000..bd8cb3e
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/breathe4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/blaze/death.ogg b/desktopRuntime/resources/sounds/mob/blaze/death.ogg
new file mode 100644
index 0000000..6a882c5
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/death.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/blaze/hit1.ogg b/desktopRuntime/resources/sounds/mob/blaze/hit1.ogg
new file mode 100644
index 0000000..7847586
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/hit1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/blaze/hit2.ogg b/desktopRuntime/resources/sounds/mob/blaze/hit2.ogg
new file mode 100644
index 0000000..c741e7c
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/hit2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/blaze/hit3.ogg b/desktopRuntime/resources/sounds/mob/blaze/hit3.ogg
new file mode 100644
index 0000000..fdec114
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/hit3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/blaze/hit4.ogg b/desktopRuntime/resources/sounds/mob/blaze/hit4.ogg
new file mode 100644
index 0000000..ff31cd4
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/hit4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/hiss1.ogg b/desktopRuntime/resources/sounds/mob/cat/hiss1.ogg
new file mode 100644
index 0000000..7083c00
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hiss1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/hiss2.ogg b/desktopRuntime/resources/sounds/mob/cat/hiss2.ogg
new file mode 100644
index 0000000..6ea6a36
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hiss2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/hiss3.ogg b/desktopRuntime/resources/sounds/mob/cat/hiss3.ogg
new file mode 100644
index 0000000..0b75a43
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hiss3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/hitt1.ogg b/desktopRuntime/resources/sounds/mob/cat/hitt1.ogg
new file mode 100644
index 0000000..2fd3fa9
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hitt1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/hitt2.ogg b/desktopRuntime/resources/sounds/mob/cat/hitt2.ogg
new file mode 100644
index 0000000..879761e
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hitt2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/hitt3.ogg b/desktopRuntime/resources/sounds/mob/cat/hitt3.ogg
new file mode 100644
index 0000000..025942d
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hitt3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/meow1.ogg b/desktopRuntime/resources/sounds/mob/cat/meow1.ogg
new file mode 100644
index 0000000..40864f9
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/meow1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/meow2.ogg b/desktopRuntime/resources/sounds/mob/cat/meow2.ogg
new file mode 100644
index 0000000..7b0b264
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/meow2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/meow3.ogg b/desktopRuntime/resources/sounds/mob/cat/meow3.ogg
new file mode 100644
index 0000000..e886244
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/meow3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/meow4.ogg b/desktopRuntime/resources/sounds/mob/cat/meow4.ogg
new file mode 100644
index 0000000..47830e3
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/meow4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/purr1.ogg b/desktopRuntime/resources/sounds/mob/cat/purr1.ogg
new file mode 100644
index 0000000..99b86b3
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/purr1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/purr2.ogg b/desktopRuntime/resources/sounds/mob/cat/purr2.ogg
new file mode 100644
index 0000000..b7d19d3
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/purr2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/purr3.ogg b/desktopRuntime/resources/sounds/mob/cat/purr3.ogg
new file mode 100644
index 0000000..e1cc6bd
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/purr3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/purreow1.ogg b/desktopRuntime/resources/sounds/mob/cat/purreow1.ogg
new file mode 100644
index 0000000..d2445c2
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/purreow1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cat/purreow2.ogg b/desktopRuntime/resources/sounds/mob/cat/purreow2.ogg
new file mode 100644
index 0000000..59a0b47
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/purreow2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/chicken1.mp3 b/desktopRuntime/resources/sounds/mob/chicken1.mp3
deleted file mode 100644
index 9cb13c0..0000000
Binary files a/desktopRuntime/resources/sounds/mob/chicken1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/chicken1.ogg b/desktopRuntime/resources/sounds/mob/chicken1.ogg
new file mode 100644
index 0000000..05f7aa8
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chicken1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/chicken2.mp3 b/desktopRuntime/resources/sounds/mob/chicken2.mp3
deleted file mode 100644
index 744cbfa..0000000
Binary files a/desktopRuntime/resources/sounds/mob/chicken2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/chicken2.ogg b/desktopRuntime/resources/sounds/mob/chicken2.ogg
new file mode 100644
index 0000000..b181d8f
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chicken2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/chicken3.mp3 b/desktopRuntime/resources/sounds/mob/chicken3.mp3
deleted file mode 100644
index eb5f8cb..0000000
Binary files a/desktopRuntime/resources/sounds/mob/chicken3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/chicken3.ogg b/desktopRuntime/resources/sounds/mob/chicken3.ogg
new file mode 100644
index 0000000..e217510
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chicken3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/chickenhurt1.mp3 b/desktopRuntime/resources/sounds/mob/chickenhurt1.mp3
deleted file mode 100644
index de1b789..0000000
Binary files a/desktopRuntime/resources/sounds/mob/chickenhurt1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/chickenhurt1.ogg b/desktopRuntime/resources/sounds/mob/chickenhurt1.ogg
new file mode 100644
index 0000000..a56a08d
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chickenhurt1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/chickenhurt2.mp3 b/desktopRuntime/resources/sounds/mob/chickenhurt2.mp3
deleted file mode 100644
index 81cb41a..0000000
Binary files a/desktopRuntime/resources/sounds/mob/chickenhurt2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/chickenhurt2.ogg b/desktopRuntime/resources/sounds/mob/chickenhurt2.ogg
new file mode 100644
index 0000000..06e65d2
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chickenhurt2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/chickenplop.mp3 b/desktopRuntime/resources/sounds/mob/chickenplop.mp3
deleted file mode 100644
index ee727ad..0000000
Binary files a/desktopRuntime/resources/sounds/mob/chickenplop.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/chickenplop.ogg b/desktopRuntime/resources/sounds/mob/chickenplop.ogg
new file mode 100644
index 0000000..b609080
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chickenplop.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cow1.mp3 b/desktopRuntime/resources/sounds/mob/cow1.mp3
deleted file mode 100644
index 77daa7c..0000000
Binary files a/desktopRuntime/resources/sounds/mob/cow1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/cow1.ogg b/desktopRuntime/resources/sounds/mob/cow1.ogg
new file mode 100644
index 0000000..5208de7
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cow1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cow2.mp3 b/desktopRuntime/resources/sounds/mob/cow2.mp3
deleted file mode 100644
index ee90091..0000000
Binary files a/desktopRuntime/resources/sounds/mob/cow2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/cow2.ogg b/desktopRuntime/resources/sounds/mob/cow2.ogg
new file mode 100644
index 0000000..a252e75
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cow2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cow3.mp3 b/desktopRuntime/resources/sounds/mob/cow3.mp3
deleted file mode 100644
index 7ebedd3..0000000
Binary files a/desktopRuntime/resources/sounds/mob/cow3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/cow3.ogg b/desktopRuntime/resources/sounds/mob/cow3.ogg
new file mode 100644
index 0000000..7345ab2
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cow3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cow4.mp3 b/desktopRuntime/resources/sounds/mob/cow4.mp3
deleted file mode 100644
index 4278b7a..0000000
Binary files a/desktopRuntime/resources/sounds/mob/cow4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/cow4.ogg b/desktopRuntime/resources/sounds/mob/cow4.ogg
new file mode 100644
index 0000000..80d5063
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cow4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cowhurt1.mp3 b/desktopRuntime/resources/sounds/mob/cowhurt1.mp3
deleted file mode 100644
index 856a8e9..0000000
Binary files a/desktopRuntime/resources/sounds/mob/cowhurt1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/cowhurt1.ogg b/desktopRuntime/resources/sounds/mob/cowhurt1.ogg
new file mode 100644
index 0000000..c579de2
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cowhurt1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cowhurt2.mp3 b/desktopRuntime/resources/sounds/mob/cowhurt2.mp3
deleted file mode 100644
index 3233b35..0000000
Binary files a/desktopRuntime/resources/sounds/mob/cowhurt2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/cowhurt2.ogg b/desktopRuntime/resources/sounds/mob/cowhurt2.ogg
new file mode 100644
index 0000000..5e487a8
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cowhurt2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/cowhurt3.mp3 b/desktopRuntime/resources/sounds/mob/cowhurt3.mp3
deleted file mode 100644
index 2c85fa0..0000000
Binary files a/desktopRuntime/resources/sounds/mob/cowhurt3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/cowhurt3.ogg b/desktopRuntime/resources/sounds/mob/cowhurt3.ogg
new file mode 100644
index 0000000..8341bfa
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cowhurt3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/creeper1.mp3 b/desktopRuntime/resources/sounds/mob/creeper1.mp3
deleted file mode 100644
index b85c274..0000000
Binary files a/desktopRuntime/resources/sounds/mob/creeper1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/creeper1.ogg b/desktopRuntime/resources/sounds/mob/creeper1.ogg
new file mode 100644
index 0000000..ceec866
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/creeper1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/creeper2.mp3 b/desktopRuntime/resources/sounds/mob/creeper2.mp3
deleted file mode 100644
index 51e89e8..0000000
Binary files a/desktopRuntime/resources/sounds/mob/creeper2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/creeper2.ogg b/desktopRuntime/resources/sounds/mob/creeper2.ogg
new file mode 100644
index 0000000..6a84ac5
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/creeper2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/creeper3.mp3 b/desktopRuntime/resources/sounds/mob/creeper3.mp3
deleted file mode 100644
index e77564d..0000000
Binary files a/desktopRuntime/resources/sounds/mob/creeper3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/creeper3.ogg b/desktopRuntime/resources/sounds/mob/creeper3.ogg
new file mode 100644
index 0000000..c284dcc
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/creeper3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/creeper4.mp3 b/desktopRuntime/resources/sounds/mob/creeper4.mp3
deleted file mode 100644
index 00957c6..0000000
Binary files a/desktopRuntime/resources/sounds/mob/creeper4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/creeper4.ogg b/desktopRuntime/resources/sounds/mob/creeper4.ogg
new file mode 100644
index 0000000..c115443
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/creeper4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/creeperdeath.mp3 b/desktopRuntime/resources/sounds/mob/creeperdeath.mp3
deleted file mode 100644
index 6d9d6f6..0000000
Binary files a/desktopRuntime/resources/sounds/mob/creeperdeath.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/creeperdeath.ogg b/desktopRuntime/resources/sounds/mob/creeperdeath.ogg
new file mode 100644
index 0000000..9a14fc4
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/creeperdeath.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/death.ogg b/desktopRuntime/resources/sounds/mob/endermen/death.ogg
new file mode 100644
index 0000000..322ac0d
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/death.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/hit1.ogg b/desktopRuntime/resources/sounds/mob/endermen/hit1.ogg
new file mode 100644
index 0000000..d1b88ee
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/hit1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/hit2.ogg b/desktopRuntime/resources/sounds/mob/endermen/hit2.ogg
new file mode 100644
index 0000000..85d3f01
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/hit2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/hit3.ogg b/desktopRuntime/resources/sounds/mob/endermen/hit3.ogg
new file mode 100644
index 0000000..8451b0a
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/hit3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/hit4.ogg b/desktopRuntime/resources/sounds/mob/endermen/hit4.ogg
new file mode 100644
index 0000000..0a47fd8
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/hit4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/idle1.ogg b/desktopRuntime/resources/sounds/mob/endermen/idle1.ogg
new file mode 100644
index 0000000..6f41121
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/idle1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/idle2.ogg b/desktopRuntime/resources/sounds/mob/endermen/idle2.ogg
new file mode 100644
index 0000000..6094b49
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/idle2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/idle3.ogg b/desktopRuntime/resources/sounds/mob/endermen/idle3.ogg
new file mode 100644
index 0000000..8748bf8
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/idle3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/idle4.ogg b/desktopRuntime/resources/sounds/mob/endermen/idle4.ogg
new file mode 100644
index 0000000..a241930
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/idle4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/idle5.ogg b/desktopRuntime/resources/sounds/mob/endermen/idle5.ogg
new file mode 100644
index 0000000..7dc0ca3
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/idle5.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/portal.ogg b/desktopRuntime/resources/sounds/mob/endermen/portal.ogg
new file mode 100644
index 0000000..aa0eb71
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/portal.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/portal2.ogg b/desktopRuntime/resources/sounds/mob/endermen/portal2.ogg
new file mode 100644
index 0000000..b6057b0
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/portal2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/scream1.ogg b/desktopRuntime/resources/sounds/mob/endermen/scream1.ogg
new file mode 100644
index 0000000..995ea33
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/scream1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/scream2.ogg b/desktopRuntime/resources/sounds/mob/endermen/scream2.ogg
new file mode 100644
index 0000000..eb97f7f
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/scream2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/scream3.ogg b/desktopRuntime/resources/sounds/mob/endermen/scream3.ogg
new file mode 100644
index 0000000..1bafb0d
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/scream3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/scream4.ogg b/desktopRuntime/resources/sounds/mob/endermen/scream4.ogg
new file mode 100644
index 0000000..81f0bb1
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/scream4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/endermen/stare.ogg b/desktopRuntime/resources/sounds/mob/endermen/stare.ogg
new file mode 100644
index 0000000..f7551c9
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/stare.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.mp3 b/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.mp3
deleted file mode 100644
index 424946f..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.ogg b/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.ogg
new file mode 100644
index 0000000..2a773d6
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/charge.mp3 b/desktopRuntime/resources/sounds/mob/ghast/charge.mp3
deleted file mode 100644
index c082b74..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/charge.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/charge.ogg b/desktopRuntime/resources/sounds/mob/ghast/charge.ogg
new file mode 100644
index 0000000..a1f7faa
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/charge.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/death.mp3 b/desktopRuntime/resources/sounds/mob/ghast/death.mp3
deleted file mode 100644
index 2bd1075..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/death.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/death.ogg b/desktopRuntime/resources/sounds/mob/ghast/death.ogg
new file mode 100644
index 0000000..39eb418
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/death.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/fireball4.mp3 b/desktopRuntime/resources/sounds/mob/ghast/fireball4.mp3
deleted file mode 100644
index 4dce2bd..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/fireball4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/fireball4.ogg b/desktopRuntime/resources/sounds/mob/ghast/fireball4.ogg
new file mode 100644
index 0000000..a7c6ded
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/fireball4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan1.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan1.mp3
deleted file mode 100644
index 301c24b..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan1.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan1.ogg
new file mode 100644
index 0000000..2faa7d5
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan2.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan2.mp3
deleted file mode 100644
index cd0a105..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan2.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan2.ogg
new file mode 100644
index 0000000..c881055
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan3.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan3.mp3
deleted file mode 100644
index a5d09c6..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan3.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan3.ogg
new file mode 100644
index 0000000..54dc592
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan4.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan4.mp3
deleted file mode 100644
index 608062c..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan4.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan4.ogg
new file mode 100644
index 0000000..da3a6cf
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan5.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan5.mp3
deleted file mode 100644
index 03bf612..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan5.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan5.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan5.ogg
new file mode 100644
index 0000000..a1dba01
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan5.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan6.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan6.mp3
deleted file mode 100644
index 16b3654..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan6.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan6.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan6.ogg
new file mode 100644
index 0000000..43522e8
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan6.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan7.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan7.mp3
deleted file mode 100644
index 03fec8a..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan7.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan7.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan7.ogg
new file mode 100644
index 0000000..867ba35
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan7.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream1.mp3 b/desktopRuntime/resources/sounds/mob/ghast/scream1.mp3
deleted file mode 100644
index d29c38e..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/scream1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream1.ogg b/desktopRuntime/resources/sounds/mob/ghast/scream1.ogg
new file mode 100644
index 0000000..57addd3
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/scream1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream2.mp3 b/desktopRuntime/resources/sounds/mob/ghast/scream2.mp3
deleted file mode 100644
index 9c9be59..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/scream2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream2.ogg b/desktopRuntime/resources/sounds/mob/ghast/scream2.ogg
new file mode 100644
index 0000000..a037e90
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/scream2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream3.mp3 b/desktopRuntime/resources/sounds/mob/ghast/scream3.mp3
deleted file mode 100644
index d6e77d2..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/scream3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream3.ogg b/desktopRuntime/resources/sounds/mob/ghast/scream3.ogg
new file mode 100644
index 0000000..2eb69f5
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/scream3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream4.mp3 b/desktopRuntime/resources/sounds/mob/ghast/scream4.mp3
deleted file mode 100644
index b0840dd..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/scream4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream4.ogg b/desktopRuntime/resources/sounds/mob/ghast/scream4.ogg
new file mode 100644
index 0000000..684a418
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/scream4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream5.mp3 b/desktopRuntime/resources/sounds/mob/ghast/scream5.mp3
deleted file mode 100644
index f493863..0000000
Binary files a/desktopRuntime/resources/sounds/mob/ghast/scream5.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream5.ogg b/desktopRuntime/resources/sounds/mob/ghast/scream5.ogg
new file mode 100644
index 0000000..9246cdd
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/scream5.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/irongolem/death.ogg b/desktopRuntime/resources/sounds/mob/irongolem/death.ogg
new file mode 100644
index 0000000..7bff573
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/death.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/irongolem/hit1.ogg b/desktopRuntime/resources/sounds/mob/irongolem/hit1.ogg
new file mode 100644
index 0000000..e158a0b
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/hit1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/irongolem/hit2.ogg b/desktopRuntime/resources/sounds/mob/irongolem/hit2.ogg
new file mode 100644
index 0000000..474ce5e
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/hit2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/irongolem/hit3.ogg b/desktopRuntime/resources/sounds/mob/irongolem/hit3.ogg
new file mode 100644
index 0000000..6fd337a
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/hit3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/irongolem/hit4.ogg b/desktopRuntime/resources/sounds/mob/irongolem/hit4.ogg
new file mode 100644
index 0000000..2fc372f
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/hit4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/irongolem/throw.ogg b/desktopRuntime/resources/sounds/mob/irongolem/throw.ogg
new file mode 100644
index 0000000..aa504d6
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/throw.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/irongolem/walk1.ogg b/desktopRuntime/resources/sounds/mob/irongolem/walk1.ogg
new file mode 100644
index 0000000..2e819f4
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/walk1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/irongolem/walk2.ogg b/desktopRuntime/resources/sounds/mob/irongolem/walk2.ogg
new file mode 100644
index 0000000..1f73101
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/walk2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/irongolem/walk3.ogg b/desktopRuntime/resources/sounds/mob/irongolem/walk3.ogg
new file mode 100644
index 0000000..4de58b4
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/walk3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/irongolem/walk4.ogg b/desktopRuntime/resources/sounds/mob/irongolem/walk4.ogg
new file mode 100644
index 0000000..4ee9378
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/walk4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/big1.ogg b/desktopRuntime/resources/sounds/mob/magmacube/big1.ogg
new file mode 100644
index 0000000..47cb7ea
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/big1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/big2.ogg b/desktopRuntime/resources/sounds/mob/magmacube/big2.ogg
new file mode 100644
index 0000000..0030737
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/big2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/big3.ogg b/desktopRuntime/resources/sounds/mob/magmacube/big3.ogg
new file mode 100644
index 0000000..e68f01b
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/big3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/big4.ogg b/desktopRuntime/resources/sounds/mob/magmacube/big4.ogg
new file mode 100644
index 0000000..37a27ae
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/big4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/jump1.ogg b/desktopRuntime/resources/sounds/mob/magmacube/jump1.ogg
new file mode 100644
index 0000000..019ed19
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/jump1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/jump2.ogg b/desktopRuntime/resources/sounds/mob/magmacube/jump2.ogg
new file mode 100644
index 0000000..901921a
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/jump2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/jump3.ogg b/desktopRuntime/resources/sounds/mob/magmacube/jump3.ogg
new file mode 100644
index 0000000..d62a21d
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/jump3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/jump4.ogg b/desktopRuntime/resources/sounds/mob/magmacube/jump4.ogg
new file mode 100644
index 0000000..5b62c4c
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/jump4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/small1.ogg b/desktopRuntime/resources/sounds/mob/magmacube/small1.ogg
new file mode 100644
index 0000000..2a2b685
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/small1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/small2.ogg b/desktopRuntime/resources/sounds/mob/magmacube/small2.ogg
new file mode 100644
index 0000000..a4f4f14
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/small2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/small3.ogg b/desktopRuntime/resources/sounds/mob/magmacube/small3.ogg
new file mode 100644
index 0000000..ccad91c
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/small3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/small4.ogg b/desktopRuntime/resources/sounds/mob/magmacube/small4.ogg
new file mode 100644
index 0000000..3bf28d0
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/small4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/magmacube/small5.ogg b/desktopRuntime/resources/sounds/mob/magmacube/small5.ogg
new file mode 100644
index 0000000..26d55f7
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/small5.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/pig1.mp3 b/desktopRuntime/resources/sounds/mob/pig1.mp3
deleted file mode 100644
index bd91f6c..0000000
Binary files a/desktopRuntime/resources/sounds/mob/pig1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/pig1.ogg b/desktopRuntime/resources/sounds/mob/pig1.ogg
new file mode 100644
index 0000000..8516b37
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/pig1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/pig2.mp3 b/desktopRuntime/resources/sounds/mob/pig2.mp3
deleted file mode 100644
index cbf540c..0000000
Binary files a/desktopRuntime/resources/sounds/mob/pig2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/pig2.ogg b/desktopRuntime/resources/sounds/mob/pig2.ogg
new file mode 100644
index 0000000..bf67406
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/pig2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/pig3.mp3 b/desktopRuntime/resources/sounds/mob/pig3.mp3
deleted file mode 100644
index caefa6f..0000000
Binary files a/desktopRuntime/resources/sounds/mob/pig3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/pig3.ogg b/desktopRuntime/resources/sounds/mob/pig3.ogg
new file mode 100644
index 0000000..3f45533
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/pig3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/pigdeath.mp3 b/desktopRuntime/resources/sounds/mob/pigdeath.mp3
deleted file mode 100644
index b98c11f..0000000
Binary files a/desktopRuntime/resources/sounds/mob/pigdeath.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/pigdeath.ogg b/desktopRuntime/resources/sounds/mob/pigdeath.ogg
new file mode 100644
index 0000000..959e98b
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/pigdeath.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/sheep1.mp3 b/desktopRuntime/resources/sounds/mob/sheep1.mp3
deleted file mode 100644
index 51eee55..0000000
Binary files a/desktopRuntime/resources/sounds/mob/sheep1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/sheep1.ogg b/desktopRuntime/resources/sounds/mob/sheep1.ogg
new file mode 100644
index 0000000..dbc3b4b
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/sheep1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/sheep2.mp3 b/desktopRuntime/resources/sounds/mob/sheep2.mp3
deleted file mode 100644
index 13d643e..0000000
Binary files a/desktopRuntime/resources/sounds/mob/sheep2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/sheep2.ogg b/desktopRuntime/resources/sounds/mob/sheep2.ogg
new file mode 100644
index 0000000..d592dd2
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/sheep2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/sheep3.mp3 b/desktopRuntime/resources/sounds/mob/sheep3.mp3
deleted file mode 100644
index 3a9cd4b..0000000
Binary files a/desktopRuntime/resources/sounds/mob/sheep3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/sheep3.ogg b/desktopRuntime/resources/sounds/mob/sheep3.ogg
new file mode 100644
index 0000000..2d333f3
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/sheep3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/hit1.ogg b/desktopRuntime/resources/sounds/mob/silverfish/hit1.ogg
new file mode 100644
index 0000000..4dd65ca
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/hit1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/hit2.ogg b/desktopRuntime/resources/sounds/mob/silverfish/hit2.ogg
new file mode 100644
index 0000000..5b56161
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/hit2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/hit3.ogg b/desktopRuntime/resources/sounds/mob/silverfish/hit3.ogg
new file mode 100644
index 0000000..68cf0ab
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/hit3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/kill.ogg b/desktopRuntime/resources/sounds/mob/silverfish/kill.ogg
new file mode 100644
index 0000000..d471fde
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/kill.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/say1.ogg b/desktopRuntime/resources/sounds/mob/silverfish/say1.ogg
new file mode 100644
index 0000000..7891a05
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/say1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/say2.ogg b/desktopRuntime/resources/sounds/mob/silverfish/say2.ogg
new file mode 100644
index 0000000..4aa77fb
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/say2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/say3.ogg b/desktopRuntime/resources/sounds/mob/silverfish/say3.ogg
new file mode 100644
index 0000000..3ed6d7a
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/say3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/say4.ogg b/desktopRuntime/resources/sounds/mob/silverfish/say4.ogg
new file mode 100644
index 0000000..6c0e053
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/say4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/step1.ogg b/desktopRuntime/resources/sounds/mob/silverfish/step1.ogg
new file mode 100644
index 0000000..193e08d
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/step1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/step2.ogg b/desktopRuntime/resources/sounds/mob/silverfish/step2.ogg
new file mode 100644
index 0000000..5bdda89
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/step2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/step3.ogg b/desktopRuntime/resources/sounds/mob/silverfish/step3.ogg
new file mode 100644
index 0000000..5554468
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/step3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/silverfish/step4.ogg b/desktopRuntime/resources/sounds/mob/silverfish/step4.ogg
new file mode 100644
index 0000000..02e1b66
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/step4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/skeleton1.mp3 b/desktopRuntime/resources/sounds/mob/skeleton1.mp3
deleted file mode 100644
index f0277e1..0000000
Binary files a/desktopRuntime/resources/sounds/mob/skeleton1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/skeleton1.ogg b/desktopRuntime/resources/sounds/mob/skeleton1.ogg
new file mode 100644
index 0000000..e62217d
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeleton1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/skeleton2.mp3 b/desktopRuntime/resources/sounds/mob/skeleton2.mp3
deleted file mode 100644
index 7b62953..0000000
Binary files a/desktopRuntime/resources/sounds/mob/skeleton2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/skeleton2.ogg b/desktopRuntime/resources/sounds/mob/skeleton2.ogg
new file mode 100644
index 0000000..c2e609e
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeleton2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/skeleton3.mp3 b/desktopRuntime/resources/sounds/mob/skeleton3.mp3
deleted file mode 100644
index bca5f36..0000000
Binary files a/desktopRuntime/resources/sounds/mob/skeleton3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/skeleton3.ogg b/desktopRuntime/resources/sounds/mob/skeleton3.ogg
new file mode 100644
index 0000000..eb926fc
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeleton3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/skeletondeath.mp3 b/desktopRuntime/resources/sounds/mob/skeletondeath.mp3
deleted file mode 100644
index 88a889b..0000000
Binary files a/desktopRuntime/resources/sounds/mob/skeletondeath.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/skeletondeath.ogg b/desktopRuntime/resources/sounds/mob/skeletondeath.ogg
new file mode 100644
index 0000000..82e9ef3
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeletondeath.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt1.mp3 b/desktopRuntime/resources/sounds/mob/skeletonhurt1.mp3
deleted file mode 100644
index 6b002ec..0000000
Binary files a/desktopRuntime/resources/sounds/mob/skeletonhurt1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt1.ogg b/desktopRuntime/resources/sounds/mob/skeletonhurt1.ogg
new file mode 100644
index 0000000..533b35c
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeletonhurt1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt2.mp3 b/desktopRuntime/resources/sounds/mob/skeletonhurt2.mp3
deleted file mode 100644
index b71d197..0000000
Binary files a/desktopRuntime/resources/sounds/mob/skeletonhurt2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt2.ogg b/desktopRuntime/resources/sounds/mob/skeletonhurt2.ogg
new file mode 100644
index 0000000..5abba30
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeletonhurt2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt3.mp3 b/desktopRuntime/resources/sounds/mob/skeletonhurt3.mp3
deleted file mode 100644
index d303697..0000000
Binary files a/desktopRuntime/resources/sounds/mob/skeletonhurt3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt3.ogg b/desktopRuntime/resources/sounds/mob/skeletonhurt3.ogg
new file mode 100644
index 0000000..ed5f268
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeletonhurt3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt4.mp3 b/desktopRuntime/resources/sounds/mob/skeletonhurt4.mp3
deleted file mode 100644
index 2414506..0000000
Binary files a/desktopRuntime/resources/sounds/mob/skeletonhurt4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt4.ogg b/desktopRuntime/resources/sounds/mob/skeletonhurt4.ogg
new file mode 100644
index 0000000..9307534
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeletonhurt4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/slime1.mp3 b/desktopRuntime/resources/sounds/mob/slime1.mp3
deleted file mode 100644
index ee8cba6..0000000
Binary files a/desktopRuntime/resources/sounds/mob/slime1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/slime1.ogg b/desktopRuntime/resources/sounds/mob/slime1.ogg
new file mode 100644
index 0000000..4236ac1
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slime1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/slime2.mp3 b/desktopRuntime/resources/sounds/mob/slime2.mp3
deleted file mode 100644
index 64b35c6..0000000
Binary files a/desktopRuntime/resources/sounds/mob/slime2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/slime2.ogg b/desktopRuntime/resources/sounds/mob/slime2.ogg
new file mode 100644
index 0000000..6810b8d
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slime2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/slime3.mp3 b/desktopRuntime/resources/sounds/mob/slime3.mp3
deleted file mode 100644
index 7999312..0000000
Binary files a/desktopRuntime/resources/sounds/mob/slime3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/slime3.ogg b/desktopRuntime/resources/sounds/mob/slime3.ogg
new file mode 100644
index 0000000..aa31fdc
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slime3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/slime4.mp3 b/desktopRuntime/resources/sounds/mob/slime4.mp3
deleted file mode 100644
index dccd6d6..0000000
Binary files a/desktopRuntime/resources/sounds/mob/slime4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/slime4.ogg b/desktopRuntime/resources/sounds/mob/slime4.ogg
new file mode 100644
index 0000000..914e349
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slime4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/slime5.mp3 b/desktopRuntime/resources/sounds/mob/slime5.mp3
deleted file mode 100644
index fa7ce01..0000000
Binary files a/desktopRuntime/resources/sounds/mob/slime5.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/slime5.ogg b/desktopRuntime/resources/sounds/mob/slime5.ogg
new file mode 100644
index 0000000..eb5c74e
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slime5.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/slimeattack1.mp3 b/desktopRuntime/resources/sounds/mob/slimeattack1.mp3
deleted file mode 100644
index 628f7de..0000000
Binary files a/desktopRuntime/resources/sounds/mob/slimeattack1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/slimeattack1.ogg b/desktopRuntime/resources/sounds/mob/slimeattack1.ogg
new file mode 100644
index 0000000..070c7f2
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slimeattack1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/slimeattack2.mp3 b/desktopRuntime/resources/sounds/mob/slimeattack2.mp3
deleted file mode 100644
index 393a08e..0000000
Binary files a/desktopRuntime/resources/sounds/mob/slimeattack2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/slimeattack2.ogg b/desktopRuntime/resources/sounds/mob/slimeattack2.ogg
new file mode 100644
index 0000000..760c16b
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slimeattack2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/spider1.mp3 b/desktopRuntime/resources/sounds/mob/spider1.mp3
deleted file mode 100644
index 5974091..0000000
Binary files a/desktopRuntime/resources/sounds/mob/spider1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/spider1.ogg b/desktopRuntime/resources/sounds/mob/spider1.ogg
new file mode 100644
index 0000000..a22d2a3
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/spider1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/spider2.mp3 b/desktopRuntime/resources/sounds/mob/spider2.mp3
deleted file mode 100644
index 77a0431..0000000
Binary files a/desktopRuntime/resources/sounds/mob/spider2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/spider2.ogg b/desktopRuntime/resources/sounds/mob/spider2.ogg
new file mode 100644
index 0000000..0d8d4d3
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/spider2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/spider3.mp3 b/desktopRuntime/resources/sounds/mob/spider3.mp3
deleted file mode 100644
index d5328ee..0000000
Binary files a/desktopRuntime/resources/sounds/mob/spider3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/spider3.ogg b/desktopRuntime/resources/sounds/mob/spider3.ogg
new file mode 100644
index 0000000..a208e1e
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/spider3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/spider4.mp3 b/desktopRuntime/resources/sounds/mob/spider4.mp3
deleted file mode 100644
index 37bf2dd..0000000
Binary files a/desktopRuntime/resources/sounds/mob/spider4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/spider4.ogg b/desktopRuntime/resources/sounds/mob/spider4.ogg
new file mode 100644
index 0000000..4c09e8d
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/spider4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/spiderdeath.mp3 b/desktopRuntime/resources/sounds/mob/spiderdeath.mp3
deleted file mode 100644
index 715fe4e..0000000
Binary files a/desktopRuntime/resources/sounds/mob/spiderdeath.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/spiderdeath.ogg b/desktopRuntime/resources/sounds/mob/spiderdeath.ogg
new file mode 100644
index 0000000..220663e
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/spiderdeath.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark1.mp3 b/desktopRuntime/resources/sounds/mob/wolf/bark1.mp3
deleted file mode 100644
index 2727638..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/bark1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark1.ogg b/desktopRuntime/resources/sounds/mob/wolf/bark1.ogg
new file mode 100644
index 0000000..f6784b1
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/bark1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark2.mp3 b/desktopRuntime/resources/sounds/mob/wolf/bark2.mp3
deleted file mode 100644
index 6054414..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/bark2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark2.ogg b/desktopRuntime/resources/sounds/mob/wolf/bark2.ogg
new file mode 100644
index 0000000..5265e81
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/bark2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark3.mp3 b/desktopRuntime/resources/sounds/mob/wolf/bark3.mp3
deleted file mode 100644
index c69f614..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/bark3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark3.ogg b/desktopRuntime/resources/sounds/mob/wolf/bark3.ogg
new file mode 100644
index 0000000..b283aa4
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/bark3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/death.mp3 b/desktopRuntime/resources/sounds/mob/wolf/death.mp3
deleted file mode 100644
index 14e7487..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/death.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/death.ogg b/desktopRuntime/resources/sounds/mob/wolf/death.ogg
new file mode 100644
index 0000000..a65af15
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/death.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl1.mp3 b/desktopRuntime/resources/sounds/mob/wolf/growl1.mp3
deleted file mode 100644
index 605a1ac..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/growl1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl1.ogg b/desktopRuntime/resources/sounds/mob/wolf/growl1.ogg
new file mode 100644
index 0000000..94266f3
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/growl1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl2.mp3 b/desktopRuntime/resources/sounds/mob/wolf/growl2.mp3
deleted file mode 100644
index d810b07..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/growl2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl2.ogg b/desktopRuntime/resources/sounds/mob/wolf/growl2.ogg
new file mode 100644
index 0000000..424b3bf
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/growl2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl3.mp3 b/desktopRuntime/resources/sounds/mob/wolf/growl3.mp3
deleted file mode 100644
index 046f276..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/growl3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl3.ogg b/desktopRuntime/resources/sounds/mob/wolf/growl3.ogg
new file mode 100644
index 0000000..41dd0c3
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/growl3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/howl1.mp3 b/desktopRuntime/resources/sounds/mob/wolf/howl1.mp3
deleted file mode 100644
index 1fd43ea..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/howl1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/howl1.ogg b/desktopRuntime/resources/sounds/mob/wolf/howl1.ogg
new file mode 100644
index 0000000..6ddae3b
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/howl1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/howl2.mp3 b/desktopRuntime/resources/sounds/mob/wolf/howl2.mp3
deleted file mode 100644
index 3916f56..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/howl2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/howl2.ogg b/desktopRuntime/resources/sounds/mob/wolf/howl2.ogg
new file mode 100644
index 0000000..4f1b2c4
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/howl2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt1.mp3 b/desktopRuntime/resources/sounds/mob/wolf/hurt1.mp3
deleted file mode 100644
index c49cd84..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/hurt1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt1.ogg b/desktopRuntime/resources/sounds/mob/wolf/hurt1.ogg
new file mode 100644
index 0000000..0e1adcd
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/hurt1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt2.mp3 b/desktopRuntime/resources/sounds/mob/wolf/hurt2.mp3
deleted file mode 100644
index 7f9d4f1..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/hurt2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt2.ogg b/desktopRuntime/resources/sounds/mob/wolf/hurt2.ogg
new file mode 100644
index 0000000..0af6c6b
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/hurt2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt3.mp3 b/desktopRuntime/resources/sounds/mob/wolf/hurt3.mp3
deleted file mode 100644
index c74ca2a..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/hurt3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt3.ogg b/desktopRuntime/resources/sounds/mob/wolf/hurt3.ogg
new file mode 100644
index 0000000..4faf16a
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/hurt3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/panting.mp3 b/desktopRuntime/resources/sounds/mob/wolf/panting.mp3
deleted file mode 100644
index 19dacdb..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/panting.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/panting.ogg b/desktopRuntime/resources/sounds/mob/wolf/panting.ogg
new file mode 100644
index 0000000..5176147
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/panting.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/shake.mp3 b/desktopRuntime/resources/sounds/mob/wolf/shake.mp3
deleted file mode 100644
index 44fb74a..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/shake.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/shake.ogg b/desktopRuntime/resources/sounds/mob/wolf/shake.ogg
new file mode 100644
index 0000000..519b4cb
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/shake.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/whine.mp3 b/desktopRuntime/resources/sounds/mob/wolf/whine.mp3
deleted file mode 100644
index f017364..0000000
Binary files a/desktopRuntime/resources/sounds/mob/wolf/whine.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/wolf/whine.ogg b/desktopRuntime/resources/sounds/mob/wolf/whine.ogg
new file mode 100644
index 0000000..2d2f825
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/whine.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie/metal1.ogg b/desktopRuntime/resources/sounds/mob/zombie/metal1.ogg
new file mode 100644
index 0000000..7afc804
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/metal1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie/metal2.ogg b/desktopRuntime/resources/sounds/mob/zombie/metal2.ogg
new file mode 100644
index 0000000..b8a25a7
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/metal2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie/metal3.ogg b/desktopRuntime/resources/sounds/mob/zombie/metal3.ogg
new file mode 100644
index 0000000..a532df6
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/metal3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie/wood1.ogg b/desktopRuntime/resources/sounds/mob/zombie/wood1.ogg
new file mode 100644
index 0000000..3ef9a67
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/wood1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie/wood2.ogg b/desktopRuntime/resources/sounds/mob/zombie/wood2.ogg
new file mode 100644
index 0000000..ee6c96c
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/wood2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie/wood3.ogg b/desktopRuntime/resources/sounds/mob/zombie/wood3.ogg
new file mode 100644
index 0000000..1e961d7
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/wood3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie/wood4.ogg b/desktopRuntime/resources/sounds/mob/zombie/wood4.ogg
new file mode 100644
index 0000000..abb8e87
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/wood4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie/woodbreak.ogg b/desktopRuntime/resources/sounds/mob/zombie/woodbreak.ogg
new file mode 100644
index 0000000..bd05daf
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/woodbreak.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie1.mp3 b/desktopRuntime/resources/sounds/mob/zombie1.mp3
deleted file mode 100644
index 257cbb3..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombie1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie1.ogg b/desktopRuntime/resources/sounds/mob/zombie1.ogg
new file mode 100644
index 0000000..6c57de1
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie2.mp3 b/desktopRuntime/resources/sounds/mob/zombie2.mp3
deleted file mode 100644
index 676f2ba..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombie2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie2.ogg b/desktopRuntime/resources/sounds/mob/zombie2.ogg
new file mode 100644
index 0000000..80e1918
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie3.mp3 b/desktopRuntime/resources/sounds/mob/zombie3.mp3
deleted file mode 100644
index 1ac7b0f..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombie3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombie3.ogg b/desktopRuntime/resources/sounds/mob/zombie3.ogg
new file mode 100644
index 0000000..c5d2f41
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiedeath.mp3 b/desktopRuntime/resources/sounds/mob/zombiedeath.mp3
deleted file mode 100644
index c004584..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiedeath.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiedeath.ogg b/desktopRuntime/resources/sounds/mob/zombiedeath.ogg
new file mode 100644
index 0000000..7c010fd
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiedeath.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiehurt1.mp3 b/desktopRuntime/resources/sounds/mob/zombiehurt1.mp3
deleted file mode 100644
index 9cb67a8..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiehurt1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiehurt1.ogg b/desktopRuntime/resources/sounds/mob/zombiehurt1.ogg
new file mode 100644
index 0000000..ce3cbde
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiehurt1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiehurt2.mp3 b/desktopRuntime/resources/sounds/mob/zombiehurt2.mp3
deleted file mode 100644
index aee3841..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiehurt2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiehurt2.ogg b/desktopRuntime/resources/sounds/mob/zombiehurt2.ogg
new file mode 100644
index 0000000..122ff24
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiehurt2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.mp3
deleted file mode 100644
index aee5a2b..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.ogg
new file mode 100644
index 0000000..49f18ed
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.mp3
deleted file mode 100644
index 3ab619a..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.ogg
new file mode 100644
index 0000000..60a2739
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.mp3
deleted file mode 100644
index 5f1e46c..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.ogg
new file mode 100644
index 0000000..6d37984
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.mp3
deleted file mode 100644
index 64a51de..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.ogg
new file mode 100644
index 0000000..4f11239
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.mp3
deleted file mode 100644
index 85de17e..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.ogg
new file mode 100644
index 0000000..a398129
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.mp3
deleted file mode 100644
index 8d8ad88..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.ogg
new file mode 100644
index 0000000..79003db
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.mp3
deleted file mode 100644
index cea462e..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.ogg
new file mode 100644
index 0000000..23c530f
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.mp3
deleted file mode 100644
index 10e0e95..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.ogg
new file mode 100644
index 0000000..3ea06c5
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.mp3
deleted file mode 100644
index 0354366..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.ogg
new file mode 100644
index 0000000..00d3f8d
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.mp3
deleted file mode 100644
index ddca274..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.ogg
new file mode 100644
index 0000000..0fa041d
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.ogg differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.mp3
deleted file mode 100644
index 5b910b2..0000000
Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.ogg
new file mode 100644
index 0000000..fb740aa
Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.ogg differ
diff --git a/desktopRuntime/resources/sounds/note/bass.mp3 b/desktopRuntime/resources/sounds/note/bass.mp3
deleted file mode 100644
index e0daff5..0000000
Binary files a/desktopRuntime/resources/sounds/note/bass.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/note/bass.ogg b/desktopRuntime/resources/sounds/note/bass.ogg
new file mode 100644
index 0000000..984341f
Binary files /dev/null and b/desktopRuntime/resources/sounds/note/bass.ogg differ
diff --git a/desktopRuntime/resources/sounds/note/bassattack.mp3 b/desktopRuntime/resources/sounds/note/bassattack.mp3
deleted file mode 100644
index 292a863..0000000
Binary files a/desktopRuntime/resources/sounds/note/bassattack.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/note/bassattack.ogg b/desktopRuntime/resources/sounds/note/bassattack.ogg
new file mode 100644
index 0000000..58acddf
Binary files /dev/null and b/desktopRuntime/resources/sounds/note/bassattack.ogg differ
diff --git a/desktopRuntime/resources/sounds/note/bd.mp3 b/desktopRuntime/resources/sounds/note/bd.mp3
deleted file mode 100644
index 42defa3..0000000
Binary files a/desktopRuntime/resources/sounds/note/bd.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/note/bd.ogg b/desktopRuntime/resources/sounds/note/bd.ogg
new file mode 100644
index 0000000..c258277
Binary files /dev/null and b/desktopRuntime/resources/sounds/note/bd.ogg differ
diff --git a/desktopRuntime/resources/sounds/note/harp.mp3 b/desktopRuntime/resources/sounds/note/harp.mp3
deleted file mode 100644
index f1badf8..0000000
Binary files a/desktopRuntime/resources/sounds/note/harp.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/note/harp.ogg b/desktopRuntime/resources/sounds/note/harp.ogg
new file mode 100644
index 0000000..fcfbc02
Binary files /dev/null and b/desktopRuntime/resources/sounds/note/harp.ogg differ
diff --git a/desktopRuntime/resources/sounds/note/hat.mp3 b/desktopRuntime/resources/sounds/note/hat.mp3
deleted file mode 100644
index dd2eb7c..0000000
Binary files a/desktopRuntime/resources/sounds/note/hat.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/note/hat.ogg b/desktopRuntime/resources/sounds/note/hat.ogg
new file mode 100644
index 0000000..9b3ca5b
Binary files /dev/null and b/desktopRuntime/resources/sounds/note/hat.ogg differ
diff --git a/desktopRuntime/resources/sounds/note/pling.mp3 b/desktopRuntime/resources/sounds/note/pling.mp3
deleted file mode 100644
index 42497ba..0000000
Binary files a/desktopRuntime/resources/sounds/note/pling.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/note/pling.ogg b/desktopRuntime/resources/sounds/note/pling.ogg
new file mode 100644
index 0000000..3013846
Binary files /dev/null and b/desktopRuntime/resources/sounds/note/pling.ogg differ
diff --git a/desktopRuntime/resources/sounds/note/snare.mp3 b/desktopRuntime/resources/sounds/note/snare.mp3
deleted file mode 100644
index 85e4af1..0000000
Binary files a/desktopRuntime/resources/sounds/note/snare.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/note/snare.ogg b/desktopRuntime/resources/sounds/note/snare.ogg
new file mode 100644
index 0000000..4972ed5
Binary files /dev/null and b/desktopRuntime/resources/sounds/note/snare.ogg differ
diff --git a/desktopRuntime/resources/sounds/portal/portal.mp3 b/desktopRuntime/resources/sounds/portal/portal.mp3
deleted file mode 100644
index 7b8cd9e..0000000
Binary files a/desktopRuntime/resources/sounds/portal/portal.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/portal/portal.ogg b/desktopRuntime/resources/sounds/portal/portal.ogg
new file mode 100644
index 0000000..2c02f55
Binary files /dev/null and b/desktopRuntime/resources/sounds/portal/portal.ogg differ
diff --git a/desktopRuntime/resources/sounds/portal/travel.mp3 b/desktopRuntime/resources/sounds/portal/travel.mp3
deleted file mode 100644
index 8042bff..0000000
Binary files a/desktopRuntime/resources/sounds/portal/travel.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/portal/travel.ogg b/desktopRuntime/resources/sounds/portal/travel.ogg
new file mode 100644
index 0000000..3e61de2
Binary files /dev/null and b/desktopRuntime/resources/sounds/portal/travel.ogg differ
diff --git a/desktopRuntime/resources/sounds/portal/trigger.mp3 b/desktopRuntime/resources/sounds/portal/trigger.mp3
deleted file mode 100644
index ec00975..0000000
Binary files a/desktopRuntime/resources/sounds/portal/trigger.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/portal/trigger.ogg b/desktopRuntime/resources/sounds/portal/trigger.ogg
new file mode 100644
index 0000000..8a4ca4b
Binary files /dev/null and b/desktopRuntime/resources/sounds/portal/trigger.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/bow.mp3 b/desktopRuntime/resources/sounds/random/bow.mp3
deleted file mode 100644
index 647f01a..0000000
Binary files a/desktopRuntime/resources/sounds/random/bow.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/bow.ogg b/desktopRuntime/resources/sounds/random/bow.ogg
new file mode 100644
index 0000000..5e83f60
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/bow.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/bowhit1.ogg b/desktopRuntime/resources/sounds/random/bowhit1.ogg
new file mode 100644
index 0000000..3b0d6a2
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/bowhit1.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/bowhit2.ogg b/desktopRuntime/resources/sounds/random/bowhit2.ogg
new file mode 100644
index 0000000..0ece9e9
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/bowhit2.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/bowhit3.ogg b/desktopRuntime/resources/sounds/random/bowhit3.ogg
new file mode 100644
index 0000000..3ff8234
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/bowhit3.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/bowhit4.ogg b/desktopRuntime/resources/sounds/random/bowhit4.ogg
new file mode 100644
index 0000000..82aa26f
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/bowhit4.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/break.ogg b/desktopRuntime/resources/sounds/random/break.ogg
new file mode 100644
index 0000000..8e565af
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/break.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/breath.mp3 b/desktopRuntime/resources/sounds/random/breath.mp3
deleted file mode 100644
index d6bf2ed..0000000
Binary files a/desktopRuntime/resources/sounds/random/breath.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/breath.ogg b/desktopRuntime/resources/sounds/random/breath.ogg
new file mode 100644
index 0000000..a28fb4b
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/breath.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/burp.ogg b/desktopRuntime/resources/sounds/random/burp.ogg
new file mode 100644
index 0000000..5ad3f57
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/burp.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/chestclosed.ogg b/desktopRuntime/resources/sounds/random/chestclosed.ogg
new file mode 100644
index 0000000..bab0652
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/chestclosed.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/chestopen.ogg b/desktopRuntime/resources/sounds/random/chestopen.ogg
new file mode 100644
index 0000000..ee5c91c
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/chestopen.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/click.mp3 b/desktopRuntime/resources/sounds/random/click.mp3
deleted file mode 100644
index 8fe1791..0000000
Binary files a/desktopRuntime/resources/sounds/random/click.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/click.ogg b/desktopRuntime/resources/sounds/random/click.ogg
new file mode 100644
index 0000000..b4889da
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/click.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/door_close.mp3 b/desktopRuntime/resources/sounds/random/door_close.mp3
deleted file mode 100644
index 09bc3dc..0000000
Binary files a/desktopRuntime/resources/sounds/random/door_close.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/door_close.ogg b/desktopRuntime/resources/sounds/random/door_close.ogg
new file mode 100644
index 0000000..cee8d23
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/door_close.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/door_open.mp3 b/desktopRuntime/resources/sounds/random/door_open.mp3
deleted file mode 100644
index 6e151cb..0000000
Binary files a/desktopRuntime/resources/sounds/random/door_open.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/door_open.ogg b/desktopRuntime/resources/sounds/random/door_open.ogg
new file mode 100644
index 0000000..590fc69
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/door_open.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/drink.ogg b/desktopRuntime/resources/sounds/random/drink.ogg
new file mode 100644
index 0000000..069589a
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/drink.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/drr.mp3 b/desktopRuntime/resources/sounds/random/drr.mp3
deleted file mode 100644
index 3f7c679..0000000
Binary files a/desktopRuntime/resources/sounds/random/drr.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/drr.ogg b/desktopRuntime/resources/sounds/random/drr.ogg
new file mode 100644
index 0000000..10923d9
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/drr.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/eat1.ogg b/desktopRuntime/resources/sounds/random/eat1.ogg
new file mode 100644
index 0000000..1a568fa
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/eat1.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/eat2.ogg b/desktopRuntime/resources/sounds/random/eat2.ogg
new file mode 100644
index 0000000..ccff5d9
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/eat2.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/eat3.ogg b/desktopRuntime/resources/sounds/random/eat3.ogg
new file mode 100644
index 0000000..0aa6afc
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/eat3.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/explode.mp3 b/desktopRuntime/resources/sounds/random/explode.mp3
deleted file mode 100644
index 00bd150..0000000
Binary files a/desktopRuntime/resources/sounds/random/explode.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/explode.ogg b/desktopRuntime/resources/sounds/random/explode.ogg
new file mode 100644
index 0000000..a414ea0
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/explode.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/explode1.ogg b/desktopRuntime/resources/sounds/random/explode1.ogg
new file mode 100644
index 0000000..f2bd815
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/explode1.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/explode2.ogg b/desktopRuntime/resources/sounds/random/explode2.ogg
new file mode 100644
index 0000000..99e7079
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/explode2.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/explode3.ogg b/desktopRuntime/resources/sounds/random/explode3.ogg
new file mode 100644
index 0000000..c14c9ee
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/explode3.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/explode4.ogg b/desktopRuntime/resources/sounds/random/explode4.ogg
new file mode 100644
index 0000000..ac2de2b
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/explode4.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/fizz.mp3 b/desktopRuntime/resources/sounds/random/fizz.mp3
deleted file mode 100644
index ee120fd..0000000
Binary files a/desktopRuntime/resources/sounds/random/fizz.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/fizz.ogg b/desktopRuntime/resources/sounds/random/fizz.ogg
new file mode 100644
index 0000000..4beea2e
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/fizz.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/fuse.mp3 b/desktopRuntime/resources/sounds/random/fuse.mp3
deleted file mode 100644
index f098c6c..0000000
Binary files a/desktopRuntime/resources/sounds/random/fuse.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/fuse.ogg b/desktopRuntime/resources/sounds/random/fuse.ogg
new file mode 100644
index 0000000..199f206
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/fuse.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/glass1.mp3 b/desktopRuntime/resources/sounds/random/glass1.mp3
deleted file mode 100644
index 18680d6..0000000
Binary files a/desktopRuntime/resources/sounds/random/glass1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/glass1.ogg b/desktopRuntime/resources/sounds/random/glass1.ogg
new file mode 100644
index 0000000..a8dab85
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/glass1.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/glass2.mp3 b/desktopRuntime/resources/sounds/random/glass2.mp3
deleted file mode 100644
index fb08b8b..0000000
Binary files a/desktopRuntime/resources/sounds/random/glass2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/glass2.ogg b/desktopRuntime/resources/sounds/random/glass2.ogg
new file mode 100644
index 0000000..3bd462d
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/glass2.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/glass3.mp3 b/desktopRuntime/resources/sounds/random/glass3.mp3
deleted file mode 100644
index 3e34621..0000000
Binary files a/desktopRuntime/resources/sounds/random/glass3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/glass3.ogg b/desktopRuntime/resources/sounds/random/glass3.ogg
new file mode 100644
index 0000000..2577f40
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/glass3.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/hurt.mp3 b/desktopRuntime/resources/sounds/random/hurt.mp3
deleted file mode 100644
index 4fa55de..0000000
Binary files a/desktopRuntime/resources/sounds/random/hurt.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/hurt.ogg b/desktopRuntime/resources/sounds/random/hurt.ogg
new file mode 100644
index 0000000..b4cbc12
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/hurt.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/levelup.ogg b/desktopRuntime/resources/sounds/random/levelup.ogg
new file mode 100644
index 0000000..f18c203
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/levelup.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/old_explode.ogg b/desktopRuntime/resources/sounds/random/old_explode.ogg
new file mode 100644
index 0000000..a414ea0
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/old_explode.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/orb.ogg b/desktopRuntime/resources/sounds/random/orb.ogg
new file mode 100644
index 0000000..a38b2cc
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/orb.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/pop.mp3 b/desktopRuntime/resources/sounds/random/pop.mp3
deleted file mode 100644
index aaec450..0000000
Binary files a/desktopRuntime/resources/sounds/random/pop.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/pop.ogg b/desktopRuntime/resources/sounds/random/pop.ogg
new file mode 100644
index 0000000..2890baf
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/pop.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/splash.mp3 b/desktopRuntime/resources/sounds/random/splash.mp3
deleted file mode 100644
index b9a5ef3..0000000
Binary files a/desktopRuntime/resources/sounds/random/splash.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/splash.ogg b/desktopRuntime/resources/sounds/random/splash.ogg
new file mode 100644
index 0000000..8d91a23
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/splash.ogg differ
diff --git a/desktopRuntime/resources/sounds/random/wood click.mp3 b/desktopRuntime/resources/sounds/random/wood click.mp3
deleted file mode 100644
index 9185a51..0000000
Binary files a/desktopRuntime/resources/sounds/random/wood click.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/random/wood click.ogg b/desktopRuntime/resources/sounds/random/wood click.ogg
new file mode 100644
index 0000000..2944f4c
Binary files /dev/null and b/desktopRuntime/resources/sounds/random/wood click.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/cloth1.mp3 b/desktopRuntime/resources/sounds/step/cloth1.mp3
deleted file mode 100644
index 002c1ef..0000000
Binary files a/desktopRuntime/resources/sounds/step/cloth1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/cloth1.ogg b/desktopRuntime/resources/sounds/step/cloth1.ogg
new file mode 100644
index 0000000..0ea73f8
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/cloth1.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/cloth2.mp3 b/desktopRuntime/resources/sounds/step/cloth2.mp3
deleted file mode 100644
index 2dbab59..0000000
Binary files a/desktopRuntime/resources/sounds/step/cloth2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/cloth2.ogg b/desktopRuntime/resources/sounds/step/cloth2.ogg
new file mode 100644
index 0000000..a607a9e
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/cloth2.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/cloth3.mp3 b/desktopRuntime/resources/sounds/step/cloth3.mp3
deleted file mode 100644
index 89ab9ef..0000000
Binary files a/desktopRuntime/resources/sounds/step/cloth3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/cloth3.ogg b/desktopRuntime/resources/sounds/step/cloth3.ogg
new file mode 100644
index 0000000..64b5ef9
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/cloth3.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/cloth4.mp3 b/desktopRuntime/resources/sounds/step/cloth4.mp3
deleted file mode 100644
index dc9d828..0000000
Binary files a/desktopRuntime/resources/sounds/step/cloth4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/cloth4.ogg b/desktopRuntime/resources/sounds/step/cloth4.ogg
new file mode 100644
index 0000000..b65ed79
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/cloth4.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/grass1.mp3 b/desktopRuntime/resources/sounds/step/grass1.mp3
deleted file mode 100644
index ed6c94e..0000000
Binary files a/desktopRuntime/resources/sounds/step/grass1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/grass1.ogg b/desktopRuntime/resources/sounds/step/grass1.ogg
new file mode 100644
index 0000000..12f5751
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/grass1.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/grass2.mp3 b/desktopRuntime/resources/sounds/step/grass2.mp3
deleted file mode 100644
index f8590e5..0000000
Binary files a/desktopRuntime/resources/sounds/step/grass2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/grass2.ogg b/desktopRuntime/resources/sounds/step/grass2.ogg
new file mode 100644
index 0000000..05dff55
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/grass2.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/grass3.mp3 b/desktopRuntime/resources/sounds/step/grass3.mp3
deleted file mode 100644
index 18087db..0000000
Binary files a/desktopRuntime/resources/sounds/step/grass3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/grass3.ogg b/desktopRuntime/resources/sounds/step/grass3.ogg
new file mode 100644
index 0000000..e792b34
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/grass3.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/grass4.mp3 b/desktopRuntime/resources/sounds/step/grass4.mp3
deleted file mode 100644
index 5cd8d8a..0000000
Binary files a/desktopRuntime/resources/sounds/step/grass4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/grass4.ogg b/desktopRuntime/resources/sounds/step/grass4.ogg
new file mode 100644
index 0000000..8421e6a
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/grass4.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/gravel1.mp3 b/desktopRuntime/resources/sounds/step/gravel1.mp3
deleted file mode 100644
index c50dcc2..0000000
Binary files a/desktopRuntime/resources/sounds/step/gravel1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/gravel1.ogg b/desktopRuntime/resources/sounds/step/gravel1.ogg
new file mode 100644
index 0000000..97ae71e
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/gravel1.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/gravel2.mp3 b/desktopRuntime/resources/sounds/step/gravel2.mp3
deleted file mode 100644
index 33d1818..0000000
Binary files a/desktopRuntime/resources/sounds/step/gravel2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/gravel2.ogg b/desktopRuntime/resources/sounds/step/gravel2.ogg
new file mode 100644
index 0000000..5133141
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/gravel2.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/gravel3.mp3 b/desktopRuntime/resources/sounds/step/gravel3.mp3
deleted file mode 100644
index b4633d6..0000000
Binary files a/desktopRuntime/resources/sounds/step/gravel3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/gravel3.ogg b/desktopRuntime/resources/sounds/step/gravel3.ogg
new file mode 100644
index 0000000..1b8debd
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/gravel3.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/gravel4.mp3 b/desktopRuntime/resources/sounds/step/gravel4.mp3
deleted file mode 100644
index dab12d7..0000000
Binary files a/desktopRuntime/resources/sounds/step/gravel4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/gravel4.ogg b/desktopRuntime/resources/sounds/step/gravel4.ogg
new file mode 100644
index 0000000..94a0c1c
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/gravel4.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/sand1.mp3 b/desktopRuntime/resources/sounds/step/sand1.mp3
deleted file mode 100644
index 0f6da6f..0000000
Binary files a/desktopRuntime/resources/sounds/step/sand1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/sand1.ogg b/desktopRuntime/resources/sounds/step/sand1.ogg
new file mode 100644
index 0000000..e9cb62d
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/sand1.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/sand2.mp3 b/desktopRuntime/resources/sounds/step/sand2.mp3
deleted file mode 100644
index aa3bc6c..0000000
Binary files a/desktopRuntime/resources/sounds/step/sand2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/sand2.ogg b/desktopRuntime/resources/sounds/step/sand2.ogg
new file mode 100644
index 0000000..ce2eeb0
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/sand2.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/sand3.mp3 b/desktopRuntime/resources/sounds/step/sand3.mp3
deleted file mode 100644
index daa955e..0000000
Binary files a/desktopRuntime/resources/sounds/step/sand3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/sand3.ogg b/desktopRuntime/resources/sounds/step/sand3.ogg
new file mode 100644
index 0000000..c94fc1b
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/sand3.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/sand4.mp3 b/desktopRuntime/resources/sounds/step/sand4.mp3
deleted file mode 100644
index 6bfedfc..0000000
Binary files a/desktopRuntime/resources/sounds/step/sand4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/sand4.ogg b/desktopRuntime/resources/sounds/step/sand4.ogg
new file mode 100644
index 0000000..ae2d818
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/sand4.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/snow1.mp3 b/desktopRuntime/resources/sounds/step/snow1.mp3
deleted file mode 100644
index 5134ec2..0000000
Binary files a/desktopRuntime/resources/sounds/step/snow1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/snow1.ogg b/desktopRuntime/resources/sounds/step/snow1.ogg
new file mode 100644
index 0000000..f8d92e9
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/snow1.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/snow2.mp3 b/desktopRuntime/resources/sounds/step/snow2.mp3
deleted file mode 100644
index f092071..0000000
Binary files a/desktopRuntime/resources/sounds/step/snow2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/snow2.ogg b/desktopRuntime/resources/sounds/step/snow2.ogg
new file mode 100644
index 0000000..b75843d
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/snow2.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/snow3.mp3 b/desktopRuntime/resources/sounds/step/snow3.mp3
deleted file mode 100644
index 23fa8ef..0000000
Binary files a/desktopRuntime/resources/sounds/step/snow3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/snow3.ogg b/desktopRuntime/resources/sounds/step/snow3.ogg
new file mode 100644
index 0000000..b739c4d
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/snow3.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/snow4.mp3 b/desktopRuntime/resources/sounds/step/snow4.mp3
deleted file mode 100644
index dce2cbd..0000000
Binary files a/desktopRuntime/resources/sounds/step/snow4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/snow4.ogg b/desktopRuntime/resources/sounds/step/snow4.ogg
new file mode 100644
index 0000000..6290af2
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/snow4.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/stone1.mp3 b/desktopRuntime/resources/sounds/step/stone1.mp3
deleted file mode 100644
index 007494f..0000000
Binary files a/desktopRuntime/resources/sounds/step/stone1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/stone1.ogg b/desktopRuntime/resources/sounds/step/stone1.ogg
new file mode 100644
index 0000000..746d282
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/stone1.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/stone2.mp3 b/desktopRuntime/resources/sounds/step/stone2.mp3
deleted file mode 100644
index af36ebc..0000000
Binary files a/desktopRuntime/resources/sounds/step/stone2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/stone2.ogg b/desktopRuntime/resources/sounds/step/stone2.ogg
new file mode 100644
index 0000000..333c970
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/stone2.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/stone3.mp3 b/desktopRuntime/resources/sounds/step/stone3.mp3
deleted file mode 100644
index ecb1eb9..0000000
Binary files a/desktopRuntime/resources/sounds/step/stone3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/stone3.ogg b/desktopRuntime/resources/sounds/step/stone3.ogg
new file mode 100644
index 0000000..f8b629f
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/stone3.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/stone4.mp3 b/desktopRuntime/resources/sounds/step/stone4.mp3
deleted file mode 100644
index 9450f00..0000000
Binary files a/desktopRuntime/resources/sounds/step/stone4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/stone4.ogg b/desktopRuntime/resources/sounds/step/stone4.ogg
new file mode 100644
index 0000000..d705cf3
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/stone4.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/wood1.mp3 b/desktopRuntime/resources/sounds/step/wood1.mp3
deleted file mode 100644
index 32c134d..0000000
Binary files a/desktopRuntime/resources/sounds/step/wood1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/wood1.ogg b/desktopRuntime/resources/sounds/step/wood1.ogg
new file mode 100644
index 0000000..f9a474a
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/wood1.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/wood2.mp3 b/desktopRuntime/resources/sounds/step/wood2.mp3
deleted file mode 100644
index e99c496..0000000
Binary files a/desktopRuntime/resources/sounds/step/wood2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/wood2.ogg b/desktopRuntime/resources/sounds/step/wood2.ogg
new file mode 100644
index 0000000..b55d49b
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/wood2.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/wood3.mp3 b/desktopRuntime/resources/sounds/step/wood3.mp3
deleted file mode 100644
index 67a0487..0000000
Binary files a/desktopRuntime/resources/sounds/step/wood3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/wood3.ogg b/desktopRuntime/resources/sounds/step/wood3.ogg
new file mode 100644
index 0000000..61922ae
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/wood3.ogg differ
diff --git a/desktopRuntime/resources/sounds/step/wood4.mp3 b/desktopRuntime/resources/sounds/step/wood4.mp3
deleted file mode 100644
index 481516a..0000000
Binary files a/desktopRuntime/resources/sounds/step/wood4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/step/wood4.ogg b/desktopRuntime/resources/sounds/step/wood4.ogg
new file mode 100644
index 0000000..f5a02c5
Binary files /dev/null and b/desktopRuntime/resources/sounds/step/wood4.ogg differ
diff --git a/desktopRuntime/resources/sounds/tile/piston/in.mp3 b/desktopRuntime/resources/sounds/tile/piston/in.mp3
deleted file mode 100644
index a3d69ca..0000000
Binary files a/desktopRuntime/resources/sounds/tile/piston/in.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/tile/piston/in.ogg b/desktopRuntime/resources/sounds/tile/piston/in.ogg
new file mode 100644
index 0000000..9657848
Binary files /dev/null and b/desktopRuntime/resources/sounds/tile/piston/in.ogg differ
diff --git a/desktopRuntime/resources/sounds/tile/piston/out.mp3 b/desktopRuntime/resources/sounds/tile/piston/out.mp3
deleted file mode 100644
index 0a84b38..0000000
Binary files a/desktopRuntime/resources/sounds/tile/piston/out.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/tile/piston/out.ogg b/desktopRuntime/resources/sounds/tile/piston/out.ogg
new file mode 100644
index 0000000..b07587f
Binary files /dev/null and b/desktopRuntime/resources/sounds/tile/piston/out.ogg differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart1.mp3 b/desktopRuntime/resources/sounds/vehicle/minecart1.mp3
deleted file mode 100644
index fbf50f6..0000000
Binary files a/desktopRuntime/resources/sounds/vehicle/minecart1.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart1.ogg b/desktopRuntime/resources/sounds/vehicle/minecart1.ogg
new file mode 100644
index 0000000..68fc1e9
Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart1.ogg differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart2.mp3 b/desktopRuntime/resources/sounds/vehicle/minecart2.mp3
deleted file mode 100644
index c86cf01..0000000
Binary files a/desktopRuntime/resources/sounds/vehicle/minecart2.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart2.ogg b/desktopRuntime/resources/sounds/vehicle/minecart2.ogg
new file mode 100644
index 0000000..2611c2e
Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart2.ogg differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart3.mp3 b/desktopRuntime/resources/sounds/vehicle/minecart3.mp3
deleted file mode 100644
index e8e046d..0000000
Binary files a/desktopRuntime/resources/sounds/vehicle/minecart3.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart3.ogg b/desktopRuntime/resources/sounds/vehicle/minecart3.ogg
new file mode 100644
index 0000000..6857838
Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart3.ogg differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart4.mp3 b/desktopRuntime/resources/sounds/vehicle/minecart4.mp3
deleted file mode 100644
index 28e6e76..0000000
Binary files a/desktopRuntime/resources/sounds/vehicle/minecart4.mp3 and /dev/null differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart4.ogg b/desktopRuntime/resources/sounds/vehicle/minecart4.ogg
new file mode 100644
index 0000000..3e8bf8d
Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart4.ogg differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart5.ogg b/desktopRuntime/resources/sounds/vehicle/minecart5.ogg
new file mode 100644
index 0000000..d78644a
Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart5.ogg differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart6.ogg b/desktopRuntime/resources/sounds/vehicle/minecart6.ogg
new file mode 100644
index 0000000..b439e73
Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart6.ogg differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart7.ogg b/desktopRuntime/resources/sounds/vehicle/minecart7.ogg
new file mode 100644
index 0000000..07f7d4f
Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart7.ogg differ
diff --git a/desktopRuntime/resources/sounds/vehicle/minecart8.ogg b/desktopRuntime/resources/sounds/vehicle/minecart8.ogg
new file mode 100644
index 0000000..2a09ef5
Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart8.ogg differ
diff --git a/resources/META-INF/MANIFEST.MF b/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index 1f9b8a7..0000000
--- a/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,1776 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.6.0_22 (Sun Microsystems Inc.)
-
-Name: dc.class
-SHA1-Digest: 9jARFlIKfuEGFFoYDOEjrqZSh9s=
-
-Name: ns.class
-SHA1-Digest: KbBWKRobkEjzdfUWAMBAsS9zJrE=
-
-Name: r.class
-SHA1-Digest: nGB38BM/SHo5bxihP3PGuAWQAUA=
-
-Name: gu.class
-SHA1-Digest: 0MS6moR4cN+BPeLO3Mob6BWzAAA=
-
-Name: gl.class
-SHA1-Digest: r8Ooc+NDq7+v49dKObUqNOV3Pp4=
-
-Name: ki.class
-SHA1-Digest: VIqs5mjhbKD33w9oTNgSHUH18JE=
-
-Name: s.class
-SHA1-Digest: cvLRVQmfhCRFVjQMtdq4LYf5aJw=
-
-Name: mob/spider.png
-SHA1-Digest: VfPrCa+PWJ8sbbk6togxQiGTDZo=
-
-Name: jp.class
-SHA1-Digest: oTJ5yErH+M853RUFd6xs4P1SxL8=
-
-Name: hn.class
-SHA1-Digest: UZhVS2yWT3Nqwyp71VXGY9P81mo=
-
-Name: mb.class
-SHA1-Digest: yc/UAwfT3p3ohEfeIhsK9KXglhE=
-
-Name: hw.class
-SHA1-Digest: ePaBc1xDxf5JzCrCkkYFKOXRaJQ=
-
-Name: com/jcraft/jorbis/Residue0$LookResidue0.class
-SHA1-Digest: 5IOKkvXQZ7zdNtGxP2uDFrdQ/vo=
-
-Name: hu.class
-SHA1-Digest: 4fhJOVg5/wJkfgf95Ym2EmY0ij0=
-
-Name: lm.class
-SHA1-Digest: hyi0mBcB6qmcaT/UUNRj1n3udos=
-
-Name: ex.class
-SHA1-Digest: hhmcDsHdbrUsBEZZBjuV4qmzEaM=
-
-Name: bu.class
-SHA1-Digest: 3r6xXEfTtT6bcObMnuZLGFsEpOE=
-
-Name: jh.class
-SHA1-Digest: kfxD1xQvrhk1xTAU7cPG39EpmSw=
-
-Name: gq.class
-SHA1-Digest: hC+ng2uzcIHWBROJI2tAwBLC5os=
-
-Name: paulscode/sound/MidiChannel$1.class
-SHA1-Digest: AFyBcx7tO6R2hJHWykXlp8xfkQU=
-
-Name: fc.class
-SHA1-Digest: a2pUZ+5lwJxgx8tbAY1M3D3Ggt0=
-
-Name: a.class
-SHA1-Digest: G6DTc8Q+41/EgIUi7xfgzP6DgEM=
-
-Name: item/arrows.png
-SHA1-Digest: moAHRC2YmEi5jR+688Gvp1bSdS8=
-
-Name: fi.class
-SHA1-Digest: ocYq4hVgtysWHVVsLNuYCrOUSzU=
-
-Name: iv.class
-SHA1-Digest: X6uoprrgLM+/bMJ8ghHG9AeqLsQ=
-
-Name: bx.class
-SHA1-Digest: 7RjsQtUSnRVTzv2rAGRm7Y0QFO0=
-
-Name: kl.class
-SHA1-Digest: PBGq/M8VTWJqC3BLToxFz8Wcs/k=
-
-Name: il.class
-SHA1-Digest: E9Ry/etrSbkQt/NzQ7vY/2YAJ70=
-
-Name: paulscode/sound/FilenameURL.class
-SHA1-Digest: PBsVGXVZH25gu5nFIpXZ3TafZW4=
-
-Name: dh.class
-SHA1-Digest: hKfoSvx5KctfYTkOYFmFRFoUD4A=
-
-Name: mob/pigzombie.png
-SHA1-Digest: LETxHfZ185sIlXS1g8v0H9Q5RUs=
-
-Name: pw.class
-SHA1-Digest: NHJTr6KewW9tl/Ys/uxkN0blqMs=
-
-Name: bn.class
-SHA1-Digest: LCpLp/Vcgm+z8+oRyH28uNBbKXI=
-
-Name: cc.class
-SHA1-Digest: 4WHt+vAJbiEWXsuBKmZ3hEPN8+c=
-
-Name: hj.class
-SHA1-Digest: 8qIGrtW1OwYr3bhDMs68Z5MWjMM=
-
-Name: gn.class
-SHA1-Digest: wy+B7zoTT7rtI/dyXEzEK++RP7A=
-
-Name: mp.class
-SHA1-Digest: CXiEPAJSqny+ENlKbpWox9foIaY=
-
-Name: ol.class
-SHA1-Digest: R4yzDSgfAq0HUi6xloe+Oj5SZiw=
-
-Name: d.class
-SHA1-Digest: mhdlF8vyhzTCtBTfjWEvoU15+c8=
-
-Name: gx.class
-SHA1-Digest: BbONQrLDCU8jqpf68H8wLLG3AR0=
-
-Name: dt.class
-SHA1-Digest: xJLCttDUOTsVlmt1IRlKPJvYQ0Y=
-
-Name: com/jcraft/jorbis/Comment.class
-SHA1-Digest: Wfvped19gCPvvbAOl+htBhiVTC8=
-
-Name: ky.class
-SHA1-Digest: Pk6LVblBzISCC3yHoFJdszARsHk=
-
-Name: fo.class
-SHA1-Digest: 7iWnZZliCIoX84k6nzxe+Neq5ho=
-
-Name: paulscode/sound/ICodec.class
-SHA1-Digest: 5z7i/EpC49Y8jyNH1jVWKxZB3gU=
-
-Name: iu.class
-SHA1-Digest: 57DZl2QKGrAjXkbd9oHJO3WjY5w=
-
-Name: l.class
-SHA1-Digest: IgPgA20CsJPKwurrQJRtMiL3Sjk=
-
-Name: lc.class
-SHA1-Digest: Nn9NQxMHFpiQw2lHbCUXFQu7OUw=
-
-Name: gui/inventory.png
-SHA1-Digest: bEfElGShH3Lyjm3xUIj8f+wYnzE=
-
-Name: bh.class
-SHA1-Digest: 9E/C+o8ufv+ux7WrDE/a4h/FDkM=
-
-Name: kd.class
-SHA1-Digest: qP4oNgDytI8OZgx3cLMKwhr+Ydc=
-
-Name: title/black.png
-SHA1-Digest: F5YD+u+qUoA84jX206CpsgHfRYE=
-
-Name: et.class
-SHA1-Digest: hk+cl9c/bMCc82X9uK12pWF+xyE=
-
-Name: qf.class
-SHA1-Digest: 92Y6mJNkIJrk+q5jcBBVUF9Q/Qw=
-
-Name: pp.class
-SHA1-Digest: IigujosXPQLyelYCfarZ48hYieg=
-
-Name: ql.class
-SHA1-Digest: 1nfa5pnTT75n/1Y5LbfgV3duWFQ=
-
-Name: jw.class
-SHA1-Digest: u7WMM/8wYriRtsVa9bHb9pTsfAk=
-
-Name: com/jcraft/jorbis/FuncResidue.class
-SHA1-Digest: HfLTxLt7UphuCCMzin89wWEsKQk=
-
-Name: dr.class
-SHA1-Digest: RERX6j0/HuVtyjxHJZDuqSuLJq4=
-
-Name: cs.class
-SHA1-Digest: i2kEUgFHNWmRa3fLTQJsWCX29k8=
-
-Name: hc.class
-SHA1-Digest: YO3DVw6gdpEmIVpYRAC7tiNGESM=
-
-Name: ny.class
-SHA1-Digest: ryZpNQA+TbbYl8DFz4b9UoJ+aEg=
-
-Name: com/jcraft/jorbis/Residue1.class
-SHA1-Digest: wYDh+AMEiy4MRZecDH2pA0z0ql0=
-
-Name: pn.class
-SHA1-Digest: JC6Wo0I5sKoSpIZ34CrnmFJT3aE=
-
-Name: aa.class
-SHA1-Digest: 7KyJF5hf6xOWF9DNoS3uQsfV/74=
-
-Name: n.class
-SHA1-Digest: DztEtgKAFQnTRxP3lYU7Npkn/50=
-
-Name: ef.class
-SHA1-Digest: PHs2ya+ljkPhihFF+xuZInKpH7w=
-
-Name: be.class
-SHA1-Digest: 881xARCjlLAO2s0j9lG2XcKJ8dw=
-
-Name: bc.class
-SHA1-Digest: iPaICuUUTJunY5CXP3kr/SkgD94=
-
-Name: kr.class
-SHA1-Digest: c98Dy8S5yBto3oTX7w2yS3JQC0Y=
-
-Name: paulscode/sound/Library.class
-SHA1-Digest: 75v1Kn3G5krkUHGGZtFojyNS7oc=
-
-Name: ir.class
-SHA1-Digest: 6EU+QBbrDQczJidqwqx0AyW6QdU=
-
-Name: ft.class
-SHA1-Digest: NRzI4L0h3QyJh6sbjcsNBl/Pu1U=
-
-Name: jl.class
-SHA1-Digest: /OK0o7HaIonKqiz+204dWJWuJzo=
-
-Name: jv.class
-SHA1-Digest: YyzrFwd0ShTPdhU/6PlakJY+XCI=
-
-Name: com/jcraft/jorbis/Mapping0.class
-SHA1-Digest: TuGkQ0GDJ7wG1KzHtmMbsYaKjhY=
-
-Name: mob/slime.png
-SHA1-Digest: NIyCL1+Xs0nDxfNk1ukuaoWtHcc=
-
-Name: ml.class
-SHA1-Digest: ehWOC0mGKqOuPa/zLxlY00f9GzU=
-
-Name: art/kz.png
-SHA1-Digest: Kk1yUIBdNZfGhhdOWU4eLfL2ngU=
-
-Name: bb.class
-SHA1-Digest: NUf3UCaAXMcapNaI5MPQFtajQw4=
-
-Name: nl.class
-SHA1-Digest: C570LmPyc855U4cFTNjzTJJqnto=
-
-Name: ly.class
-SHA1-Digest: Xcm5jvUYJKkzJoH3pzRnAnqJ7so=
-
-Name: com/jcraft/jorbis/CodeBook.class
-SHA1-Digest: biNcF7BEkvBtcuSuN46jdwlp4eg=
-
-Name: paulscode/sound/ListenerData.class
-SHA1-Digest: 7y3vFDVaL9kK6onlkUtt/85OofU=
-
-Name: mm.class
-SHA1-Digest: 49YSvK2sQQ0NcIGSjNeupAWG8ks=
-
-Name: go.class
-SHA1-Digest: 964u1IBngLJwubW7sKcUe9FfAmI=
-
-Name: pa.class
-SHA1-Digest: SFn13E4TyYNJ4OUZJji1AqcdHzA=
-
-Name: gb.class
-SHA1-Digest: cFAfuQM8WIcuGheveDYS7SU949Q=
-
-Name: de.class
-SHA1-Digest: mljzFBORahDWzGwiXLQaujo1g6E=
-
-Name: gj.class
-SHA1-Digest: pTpZR0+Yh+MfZPgjNIF7owfuabk=
-
-Name: dn.class
-SHA1-Digest: k3+HQv3ZCd4/Xc+Q0sXje1v6nXQ=
-
-Name: fk.class
-SHA1-Digest: ypML7ZMYo4oXzdBBdGSjdKTzUT0=
-
-Name: com/jcraft/jorbis/Residue2.class
-SHA1-Digest: n6FIaoI1nwZOhlpCXFCtwxij0ZE=
-
-Name: terrain/moon.png
-SHA1-Digest: SDIpawrYTACa3ShpzcTIQtnsck4=
-
-Name: ew.class
-SHA1-Digest: sXOWwo87KBMck4REc6yffHRtL3Q=
-
-Name: pi.class
-SHA1-Digest: CzY4vlcTFuSIXL5hBDg4TzcT93g=
-
-Name: ma.class
-SHA1-Digest: 4QPjeOVmK3riNBpHW48nwY7DKaQ=
-
-Name: nc.class
-SHA1-Digest: LIXzLMLgKIkq/MJWrGhZWeiC+eg=
-
-Name: misc/dial.png
-SHA1-Digest: WteKszpkoUNHlxdSxnt89gJ4twU=
-
-Name: at.class
-SHA1-Digest: FHM0RY15tXijxMSBZ3L2sJrDdU8=
-
-Name: na.class
-SHA1-Digest: GANG0nYm5KvhKjhleY8IBDwdmv8=
-
-Name: ba.class
-SHA1-Digest: lU5VkHv+C+f13JZpkXlzzxVWVYg=
-
-Name: jk.class
-SHA1-Digest: nKxbVL+e9cnZH8cxq5PUV6CsbfQ=
-
-Name: environment/clouds.png
-SHA1-Digest: HtJx4+gThjxj54jGeXnNmxmW7o0=
-
-Name: ay.class
-SHA1-Digest: Sxn+3Fxz1QDTY3kqb+KH3T6TW9Q=
-
-Name: m.class
-SHA1-Digest: OFKC77IQOMORf/5xLtEKkeKXsOc=
-
-Name: com/jcraft/jorbis/Floor1$Lsfit_acc.class
-SHA1-Digest: MfhxP8jDTRdkiI7KOQXY+wsLePc=
-
-Name: mob/spider_eyes.png
-SHA1-Digest: 30MeaE6D/w4aOZw2BHxe98tnq1E=
-
-Name: ls.class
-SHA1-Digest: 6D4pjbJIsUOeGVuYLc8XAqFH30k=
-
-Name: lg.class
-SHA1-Digest: 3VOtw2rhKSZH2UtSZ/VhK00230w=
-
-Name: mf.class
-SHA1-Digest: wZewuYn40aIBBC+pz0RRJ70OgX8=
-
-Name: paulscode/sound/SoundSystem.class
-SHA1-Digest: RlfS3Nx0lIROKyao7rOUiRUS8pQ=
-
-Name: fb.class
-SHA1-Digest: m6mHVw60PKkmHiZptj1BASJJboU=
-
-Name: em.class
-SHA1-Digest: P7YECU9ufYeXimILLok/uRq//SE=
-
-Name: lv.class
-SHA1-Digest: HPz5NcPxqvwucEGC+BmJRZBbDiw=
-
-Name: hy.class
-SHA1-Digest: UChTrdX/KSP7Ekac/nhsG5XV8js=
-
-Name: ga.class
-SHA1-Digest: 9BULWTJ4HPyZUv1OM1eyQeLBl9M=
-
-Name: paulscode/sound/CommandObject.class
-SHA1-Digest: Tg7G5tIkUYmfcdUASCx63GFfHpY=
-
-Name: lh.class
-SHA1-Digest: D0XbuCs2e2m9WHJzJQhZ0iVbgDs=
-
-Name: aj.class
-SHA1-Digest: ip2F00ED7QZSF/XZxHGYeZT5tLU=
-
-Name: ff.class
-SHA1-Digest: L2Qy93U0hD1iAg4sVsM1t73zmgY=
-
-Name: pm.class
-SHA1-Digest: /qbl9bSahT2EOMnwidc/p/gmrj8=
-
-Name: oc.class
-SHA1-Digest: InCYdgQXfAQdgH1/wabL5lDYGiw=
-
-Name: di.class
-SHA1-Digest: SZxyzeau7dDPP5W2DTAyQU8ODSE=
-
-Name: ip.class
-SHA1-Digest: rremLa2Xj+D32P34Vwzj73Iy/m8=
-
-Name: pg.class
-SHA1-Digest: TKVbLYBTvZDuzGZTw1TNQos4QXc=
-
-Name: hs.class
-SHA1-Digest: h1X3GgTMpDTv7Y5KJFPretzo5nM=
-
-Name: ig.class
-SHA1-Digest: PRzmpPBY0vdlUsmR095Heya3G/M=
-
-Name: net/minecraft/client/MinecraftApplet.class
-SHA1-Digest: xE2AvIE4AOvcLBAMoUkkLFCaPxI=
-
-Name: cb.class
-SHA1-Digest: 1nuKNKG2aN4OdOn8U2L3cTPfAoE=
-
-Name: armor/cloth_2.png
-SHA1-Digest: rLjWgIiUGP7Y6od62FZqqeB/vaA=
-
-Name: lr.class
-SHA1-Digest: g8e9bgMUoueuvM2CXokng2NaO7E=
-
-Name: mob/zombie.png
-SHA1-Digest: FcMQrfVTy+3DLbWmNt19tcrs//w=
-
-Name: misc/pumpkinblur.png
-SHA1-Digest: MN/YugY2yNxZbaRlgAFJ2/Q9/wU=
-
-Name: cr.class
-SHA1-Digest: cIt2DNuQt+XtAYO+yzHAN+wvWVo=
-
-Name: kx.class
-SHA1-Digest: hy5iI1WkH9F5nxXzZ29UXpQEng8=
-
-Name: com/jcraft/jorbis/Floor1.class
-SHA1-Digest: +XTuHoau6RfMD57HMP44Vd6vr3A=
-
-Name: v.class
-SHA1-Digest: Xo83t+HERuU2FZRNHdKXbWOU9NQ=
-
-Name: pq.class
-SHA1-Digest: Welv9fBezm2lIzq/jqoNWVfOPlI=
-
-Name: pj.class
-SHA1-Digest: j7Cm/sPjj7zJSz18fiLt/4tk3zM=
-
-Name: en.class
-SHA1-Digest: iszdpfp3D6p5Hb6nLQ46guTbZoQ=
-
-Name: mob/saddle.png
-SHA1-Digest: R/XNcO9SOQbvm/296+y3c+himyA=
-
-Name: ot.class
-SHA1-Digest: VIgcUvfAQ4/KK+glAvhiFFy3KG8=
-
-Name: ce.class
-SHA1-Digest: I99qbB4cgFHHyfiwsFUHmvoEhyE=
-
-Name: net/minecraft/client/Minecraft.class
-SHA1-Digest: xU9ySlcxTxlu8AkK23Wwfsm9T7A=
-
-Name: paulscode/sound/Source.class
-SHA1-Digest: 3hDMd2Mdtws03ApSlZznmN4M+8I=
-
-Name: paulscode/sound/SoundSystemLogger.class
-SHA1-Digest: 2kJAKCH6nEaKavwctc3MV3ihYis=
-
-Name: gui/container.png
-SHA1-Digest: s4IxEeI0il8FV4xtSwRXr1emQ/Q=
-
-Name: misc/vignette.png
-SHA1-Digest: SD5wUOuOOQHDtGxOcBaMOUt4ELI=
-
-Name: gz.class
-SHA1-Digest: +F6o2+qmI9VmBusV7tUuR4mtzdI=
-
-Name: oh.class
-SHA1-Digest: ZxoTeW5DHT6s14c+qUKw5991LAQ=
-
-Name: ds.class
-SHA1-Digest: Ph/rKAh1gaPc7jJJsWeWygrLJ5A=
-
-Name: qe.class
-SHA1-Digest: vrKio/Bx+hUmVLhveyTokwj45u0=
-
-Name: er.class
-SHA1-Digest: OqymEyESlied4u0WqN5nE2FfJW0=
-
-Name: db.class
-SHA1-Digest: N3PMNX7/rvYO8ioLzSxRrltvJLA=
-
-Name: com/jcraft/jorbis/Floor0$LookFloor0.class
-SHA1-Digest: aV3r97cSwTWpWrVYTgHMKg+31wA=
-
-Name: oe.class
-SHA1-Digest: 2B2Thlc6Yu5p8DwONPx4ep/IzFg=
-
-Name: gui/icons.png
-SHA1-Digest: 3d7hw+UskcGywysCm8Pe0kd9chg=
-
-Name: hb.class
-SHA1-Digest: fstaXhgEOoHTS6su6R8S8yM+nus=
-
-Name: bg.class
-SHA1-Digest: qu+FUyEHUMo3evzYdEcb4/88TC8=
-
-Name: hr.class
-SHA1-Digest: yUjquv+fv2+yzzQdYuSEqt3kdgU=
-
-Name: bd.class
-SHA1-Digest: Zi1SukkK0Kg2s3/KD8h/VqKw/CE=
-
-Name: ai.class
-SHA1-Digest: Yao7gQg5MYnmayACYhzBnypvdFU=
-
-Name: com/jcraft/jorbis/Floor0$InfoFloor0.class
-SHA1-Digest: gqAA/0+xC3QXgZcXmSUlsXnZeBI=
-
-Name: jq.class
-SHA1-Digest: SswGh0/ymsfwagWJk0plfjJ4Gtg=
-
-Name: mq.class
-SHA1-Digest: TSTuokyAeodKQg8mJET/H4/3/BE=
-
-Name: bm.class
-SHA1-Digest: 69mSniAr6PwTNBUR6k4nt3A52b8=
-
-Name: ao.class
-SHA1-Digest: iaRXgiDlodZdphBI8HkwdCYmp3Q=
-
-Name: jg.class
-SHA1-Digest: jWnrfVf8G+ORK5agNT98lDf5Whk=
-
-Name: fs.class
-SHA1-Digest: alN9Zbz1W9vIi4Np8t4uc6x48MQ=
-
-Name: lj.class
-SHA1-Digest: 6VIvA1v/bMsEML+78LMMBx7i+L4=
-
-Name: particles.png
-SHA1-Digest: Cq1yeQc9fhsz9QSLcnZRQUNyPTU=
-
-Name: oq.class
-SHA1-Digest: JHb5Tskog8YjrvolABTJFvx0uVQ=
-
-Name: dv.class
-SHA1-Digest: qpSemy8fqKdPNOaKaOcdyo8tJU8=
-
-Name: mob/creeper.png
-SHA1-Digest: 3HtuKTBjFiOMuk8NXG6vQCQtMVA=
-
-Name: mob/chicken.png
-SHA1-Digest: xxH+S0xuPfLFkqetSCvlhMz7pec=
-
-Name: bt.class
-SHA1-Digest: qbMKEPTcVGo6ZQXFY5GW6G93kzI=
-
-Name: gui/gui.png
-SHA1-Digest: gRdhQou4Hz7VsKfsMQAzIyCdFg0=
-
-Name: ko.class
-SHA1-Digest: E1JvIg8QhRXA4chiAHtLl3oVZ2k=
-
-Name: cu.class
-SHA1-Digest: 5koTXjXnwussIQ/2JZpoBbw74Hk=
-
-Name: j.class
-SHA1-Digest: G29xO68GWijsc9JXEiAg5QTbVBU=
-
-Name: nm.class
-SHA1-Digest: pFZm59dhydczQGAfoX17KzOkyq8=
-
-Name: cn.class
-SHA1-Digest: FzyXxZ5RmzEjsbets3nnHgzBvPY=
-
-Name: com/jcraft/jorbis/Util.class
-SHA1-Digest: pGkpiZgMWfooqa8ikJxOkW5vmuU=
-
-Name: paulscode/sound/SimpleThread.class
-SHA1-Digest: vEDVQJEXlMk76GMcPsfkLkz1BgE=
-
-Name: nn.class
-SHA1-Digest: z1O4ivnKnLfCbVQT3kqVXq63t8k=
-
-Name: ep.class
-SHA1-Digest: dfCB76O7kYMFa90dRX8BHaZe8vM=
-
-Name: od.class
-SHA1-Digest: 3tZSTmdYjFb8x+ie6lDLgKlJFbA=
-
-Name: pack.txt
-SHA1-Digest: 3EKjInVcfn3Wn8KG5d7Igu/jBfM=
-
-Name: nz.class
-SHA1-Digest: mw0D/pkcd2Yj17wPU0vAqH2JkyY=
-
-Name: g.class
-SHA1-Digest: 234YXHNBdGztccPPc8SiZMwrPiQ=
-
-Name: gui/logo.png
-SHA1-Digest: VrsKWcrukW60B8Oi5N7vsINm2bU=
-
-Name: com/jcraft/jorbis/PsyInfo.class
-SHA1-Digest: Ez9EQLkyxPhvJb2WM0m0w4eWPG0=
-
-Name: q.class
-SHA1-Digest: RKoVP+NNghgzKlbBieL+ZxAv4cA=
-
-Name: hm.class
-SHA1-Digest: vyBofCAHzhWRa1Cn8f0UZzUadCk=
-
-Name: br.class
-SHA1-Digest: trc+ZlyhRBXyYMTvgaaQKUz8cTY=
-
-Name: qk.class
-SHA1-Digest: Xnin30qln6a3fiW0cKZDOj5YaRE=
-
-Name: ib.class
-SHA1-Digest: SJje74t7Vm7LUcoX4UQKAiAP34c=
-
-Name: in.class
-SHA1-Digest: K5IqnCbQaIzYJ9iq25HuaamTaMM=
-
-Name: b.class
-SHA1-Digest: qpT+3JiqbpUmqryfOt17icT73aQ=
-
-Name: fr.class
-SHA1-Digest: ojzj+pe5Flfugsi+EJJyIFs6jnE=
-
-Name: paulscode/sound/Vector3D.class
-SHA1-Digest: wPOifqaxmnFE/smMjXY0xnzv/0A=
-
-Name: jy.class
-SHA1-Digest: X8X410JDAlG/dPnHFgotFgSni0g=
-
-Name: po.class
-SHA1-Digest: AjQDzfSgasrZ8nVGXsDcNCQPquo=
-
-Name: t.class
-SHA1-Digest: tJY3+FQbLdPJCYOj5tJRoD7kIOM=
-
-Name: dd.class
-SHA1-Digest: 1XKdNhG6pxdaak0mIQBVC4offeY=
-
-Name: gui/background.png
-SHA1-Digest: Tj5g6xm/Asnn8FmrzIyNN26+r8w=
-
-Name: null
-SHA1-Digest: 2jmj7l5rSw0yVb/vlWAYkK/YBwk=
-
-Name: ge.class
-SHA1-Digest: +EqUZ9u83ANb35eZGbhiIwsBnN8=
-
-Name: armor/chain_1.png
-SHA1-Digest: kjVR+O9K/uHjjos6pVmhxzKWvHI=
-
-Name: ei.class
-SHA1-Digest: B+y7o7dLB801cT9No5adIjv4xO0=
-
-Name: dl.class
-SHA1-Digest: O2/ZL058ceIUbIC/dSnLOt34nsI=
-
-Name: mob/char.png
-SHA1-Digest: 9fkV0U8Uc0ecQ5YqOnJUqbGgNGA=
-
-Name: fl.class
-SHA1-Digest: cBzH+9XGaNEeq+B/m6QhnBadxm4=
-
-Name: kf.class
-SHA1-Digest: iasgOdyQce3J8fQCuoORFiFU95o=
-
-Name: mu.class
-SHA1-Digest: 7unOUEJ6rfiBuDTpXDVFZjl9Lo0=
-
-Name: fx.class
-SHA1-Digest: 0tGSOJZ7Ku2lGJpFPi0JLELgkbw=
-
-Name: as.class
-SHA1-Digest: bLxVkDOvzdgkn3C1/vNgCdVTDl4=
-
-Name: dj.class
-SHA1-Digest: SKbR/E8FwPNjauaWE3RCx+wD598=
-
-Name: ho.class
-SHA1-Digest: NOCn8GdEV1ACg237Eg+sFchlDcA=
-
-Name: com/jcraft/jorbis/Residue0.class
-SHA1-Digest: KCXaUE40/+IVAKaPPwxhuEgXlt8=
-
-Name: paulscode/sound/libraries/ChannelLWJGLOpenAL.class
-SHA1-Digest: edgakTTdK5oAnJdf235WoUok1Z4=
-
-Name: qb.class
-SHA1-Digest: mNE1eDZunaM1r4IziRp8BtuIclg=
-
-Name: cp.class
-SHA1-Digest: kaJ943Yd20RaYIRbQNMowQkCpww=
-
-Name: kb.class
-SHA1-Digest: VPAFtv0p4NrtaEDncm4gu0jT1fk=
-
-Name: mz.class
-SHA1-Digest: 6KaQLoMqNw5GaAkNfVQ5AEw2pvM=
-
-Name: az.class
-SHA1-Digest: Tk7yvvvPBuU3y2hZB879p7aWiZ0=
-
-Name: oz.class
-SHA1-Digest: yKJ0iXiP/eQPJW+UNRMhuGpmBtw=
-
-Name: lb.class
-SHA1-Digest: w9bVOQBzTH5aeYndXZx/BJcVuos=
-
-Name: com/jcraft/jogg/Buffer.class
-SHA1-Digest: CtzmcFa96rWKr/IaMDr9F0rlGig=
-
-Name: com/jcraft/jorbis/Lookup.class
-SHA1-Digest: x9lEkazzxRVeh0p5a3JDXvvpT7w=
-
-Name: f.class
-SHA1-Digest: qUmDLElXyU3vv0jYNha5sdTUO+k=
-
-Name: bj.class
-SHA1-Digest: fdCIcjNNYziRCZoXxtV9QmxxHxM=
-
-Name: ld.class
-SHA1-Digest: 306B8TeF4ifiJk+LcYZK+iToCQM=
-
-Name: lw.class
-SHA1-Digest: BD5K3pVK9nxs+RGyNlmGIATln7k=
-
-Name: ph.class
-SHA1-Digest: sxbb3F9us5AxaLRaHzHb34HL3es=
-
-Name: ow.class
-SHA1-Digest: eJZexVmg/eZsFLT9hSAt7zX78Y4=
-
-Name: ja.class
-SHA1-Digest: FroGGb/855hh+LHjVuoS7tEyRoE=
-
-Name: fd.class
-SHA1-Digest: F+8rJFn0Pb2P3j7DYNFLX8wagIY=
-
-Name: gt.class
-SHA1-Digest: UTeNt6LFJrFVZNIID+fuhcy6x6s=
-
-Name: ih.class
-SHA1-Digest: U9fX57QRWm3g6lcGJRT4yMRqPpM=
-
-Name: ee.class
-SHA1-Digest: SLVe1YxhuaxwgyKTue1dZH/+Vtc=
-
-Name: kp.class
-SHA1-Digest: LVRXFcz48N0JbQgXXTehSxZ+eOQ=
-
-Name: eu.class
-SHA1-Digest: nAvB8Wjf9OwANjuQp/9tqrvWSm4=
-
-Name: gp.class
-SHA1-Digest: QIlaMQRJvis2SBXRK+OUYcHD/34=
-
-Name: fy.class
-SHA1-Digest: 6KDM9l/iuL2WPNl3huVZBzciol0=
-
-Name: hp.class
-SHA1-Digest: PgYuOhV0sNJymU/FEjR5O9CupF4=
-
-Name: li.class
-SHA1-Digest: bIFr0uSVAjWRfOmszQ6fp4k4FIg=
-
-Name: qh.class
-SHA1-Digest: h8zyecLHU2xiwVH20pm87uVCY6Q=
-
-Name: paulscode/sound/MidiChannel.class
-SHA1-Digest: EH60vtJqndyBuulzBsJ8RzfmYD0=
-
-Name: ad.class
-SHA1-Digest: XAxAbII5mwZaatxqLGfeoXiu/jQ=
-
-Name: com/jcraft/jorbis/StaticCodeBook.class
-SHA1-Digest: EG2h2khXpK3TXUVqN5Xu7kDbSQg=
-
-Name: cl.class
-SHA1-Digest: h/mOURy7o7giXxQDWwUgCy55Dws=
-
-Name: bq.class
-SHA1-Digest: zIiBiQMlyJDfMBXdcCZfDzlB1SA=
-
-Name: gw.class
-SHA1-Digest: lwqUoD+TLAwcg8abI12dYQ39C9A=
-
-Name: kq.class
-SHA1-Digest: KQ7fhRE+N8R3XyN89In4wvCb28E=
-
-Name: pack.png
-SHA1-Digest: 0whdfgR8SNywEpiN+JrMJ9wtI+8=
-
-Name: mc.class
-SHA1-Digest: soZCILmdC4kLbXl9NuMN47ufKek=
-
-Name: mob/ghast_fire.png
-SHA1-Digest: +6jL2E1+HQDIsxnSY88TJ0se7F8=
-
-Name: pc.class
-SHA1-Digest: WWa5sgJyH4rfN7HQ8anfyT2kWiE=
-
-Name: dz.class
-SHA1-Digest: MApXitIkPu6n8yFbGVj5LTcYiKs=
-
-Name: im.class
-SHA1-Digest: mB7+vNR0qWAGj9uF90bCKgSp8Yc=
-
-Name: c.class
-SHA1-Digest: Y/dF2tsDWQyqHy6McfwUQWLlUKI=
-
-Name: w.class
-SHA1-Digest: DPzgcy58eDBHem+NIKoOuzUKALc=
-
-Name: gv.class
-SHA1-Digest: +zmHLmjzU9zGdf7R5nOB3lt4Bcc=
-
-Name: cy.class
-SHA1-Digest: T1cJ9PuHGiT+zGilSuT/VOM7V4E=
-
-Name: ae.class
-SHA1-Digest: MGgPoX1lCQjzVM6Gp8Or83BND8o=
-
-Name: he.class
-SHA1-Digest: Y4gREnSBfGR2FEJGIcHwjsUecow=
-
-Name: bw.class
-SHA1-Digest: fAKICSXrL3ZwUs87xaYGEE1UyBM=
-
-Name: iz.class
-SHA1-Digest: VzpxDxhXekcepNZF1zxBEcc8Uys=
-
-Name: fv.class
-SHA1-Digest: DNlfCczCCG0ZE80+cS4fp5SvMq4=
-
-Name: gh.class
-SHA1-Digest: nf8SMT8Dr1Z8/VKxBQ4psptOrQ8=
-
-Name: ci.class
-SHA1-Digest: qzsRwuVdZM3AuIItiD43ull2yvc=
-
-Name: np.class
-SHA1-Digest: h5MnXjj8b8PT6xglXKhBiRSE4OI=
-
-Name: com/jcraft/jorbis/Drft.class
-SHA1-Digest: Nvwe0AqduR6CTfH9JO4TagcpWgg=
-
-Name: iw.class
-SHA1-Digest: 5GmeBWRjougaVTzKcDFsbi6kF8g=
-
-Name: la.class
-SHA1-Digest: 2hOCPNhMQnMKAjdXff6jSDEe6MU=
-
-Name: dp.class
-SHA1-Digest: qyWKtOIBqBXD53aamELlUvoUh8Q=
-
-Name: com/jcraft/jorbis/Time0.class
-SHA1-Digest: f8JMtjf+feYef8a42HLAfWaqIyU=
-
-Name: ck.class
-SHA1-Digest: RLzaK9VZjLrY04NoQZrDxvWOSyE=
-
-Name: le.class
-SHA1-Digest: GFU6PMR+jSxSR9LIYjIjy/m6eTo=
-
-Name: bv.class
-SHA1-Digest: WFN/wbS0osa2WnGUEo+nsRSjwGo=
-
-Name: ch.class
-SHA1-Digest: 6/I96ZpqQYZjovKnjiM05UmXkZA=
-
-Name: ln.class
-SHA1-Digest: F0vJyLLnKUKXXYq0YwmraP/Gqj0=
-
-Name: gk.class
-SHA1-Digest: Fz0ShuoKMqvzxFPaQ6t4H56gD4E=
-
-Name: com/jcraft/jorbis/Mapping0$InfoMapping0.class
-SHA1-Digest: 12e+QLA0mTJT5vsA52t7l4Pr8SA=
-
-Name: ix.class
-SHA1-Digest: 39qZwFJIWI2eFTsVk4b5xHqUPlM=
-
-Name: fg.class
-SHA1-Digest: kVjB1bGMa4tbpoC0OHyeu8rOmjk=
-
-Name: ik.class
-SHA1-Digest: ZDzxZ7GRSJLVtGqFgia01J8vMBo=
-
-Name: misc/shadow.png
-SHA1-Digest: AYFQ3xpHp3kTFkRPiWGj3TvGWxc=
-
-Name: ov.class
-SHA1-Digest: m4ETXOz26KTW0bCmwrL7sRaTh70=
-
-Name: qd.class
-SHA1-Digest: HI36Upr4L8N28dslYwh2yPhT5kI=
-
-Name: cj.class
-SHA1-Digest: d1LLA2gKZz+bFgNNKo5Qzd7urxI=
-
-Name: on.class
-SHA1-Digest: c5qlwLxWyCS3ZRGlKQ/Bcm7vQaw=
-
-Name: com/jcraft/jorbis/Info.class
-SHA1-Digest: EvZjP7iC5LR3zNN7JTstyBMbzeA=
-
-Name: ji.class
-SHA1-Digest: 32AV8DH/ybt1xEd1N0kWyIW2iRw=
-
-Name: ju.class
-SHA1-Digest: fsTehKoIFM65L2jX5xbpFAvrbxk=
-
-Name: lz.class
-SHA1-Digest: RSNqkTXQmk5wkr88xyTRa0xsdvQ=
-
-Name: nf.class
-SHA1-Digest: DSa5xNoSTlstzXYnnIZAaTs5tJ4=
-
-Name: com/jcraft/jorbis/Block.class
-SHA1-Digest: v3gl95ngl2tsYQpDqY/4AyZzyg8=
-
-Name: com/jcraft/jorbis/InfoMode.class
-SHA1-Digest: /iiglLw31fjCsNFremOCILcGvGQ=
-
-Name: misc/water.png
-SHA1-Digest: Vhq7UdiyZLnQqLLJ4yxoNYXxRGA=
-
-Name: og.class
-SHA1-Digest: 0tPjUvYnvHEIy/7vSHMX0y0+QW4=
-
-Name: gg.class
-SHA1-Digest: CL1SoHbEA12XIDzsQFIr2UPEKNY=
-
-Name: cv.class
-SHA1-Digest: imbsRG6CVa7LyoOA8vJ9wprqXmU=
-
-Name: com/jcraft/jorbis/Floor1$InfoFloor1.class
-SHA1-Digest: 8ufluA3sDP2tObC4x8cVs1deLfg=
-
-Name: armor/diamond_1.png
-SHA1-Digest: Rsd1MWYxhXeKfeWKvHhl3FmsdbM=
-
-Name: gm.class
-SHA1-Digest: H9CAdNPOMp3jnlTe/vNQpkXAWY8=
-
-Name: k.class
-SHA1-Digest: /Y8ZaZ7mrLCfWBOnTDwYXWsSYZI=
-
-Name: pz.class
-SHA1-Digest: JUm4LlAL642C0gXkiM3LURAas9g=
-
-Name: font/default.png
-SHA1-Digest: 2CMCEKYrWPY9ZVNsqUlfnaBNBHA=
-
-Name: iq.class
-SHA1-Digest: UzBdjrWEOkjxnCMYnEuRTCv8pGo=
-
-Name: kg.class
-SHA1-Digest: /qDigFO3JDNi8pWaIDvXQwPfyuc=
-
-Name: paulscode/sound/libraries/LibraryLWJGLOpenAL.class
-SHA1-Digest: BLsD2CCBx3bxr753vJ/s6piDPq0=
-
-Name: com/jcraft/jorbis/Residue0$InfoResidue0.class
-SHA1-Digest: sB/wymFIRS/TNNAbsQVIhWum8lY=
-
-Name: e.class
-SHA1-Digest: iZVHOz+QObH7p/CHjFYUC1h11Bw=
-
-Name: bz.class
-SHA1-Digest: MCYCu2uhaSTNV1H/CDtLHDpglao=
-
-Name: oi.class
-SHA1-Digest: j9dGJ7boneJfkq0oRo8MubyWank=
-
-Name: ax.class
-SHA1-Digest: 69UzKFhgLaGCL28795NFOeYzsO0=
-
-Name: ha.class
-SHA1-Digest: vJeaqEDWTjFbA6s+MtgRq3UveqE=
-
-Name: mj.class
-SHA1-Digest: 8XJgLD3jsiWfGn1IBKvZadDsXGE=
-
-Name: hk.class
-SHA1-Digest: Vl61cALLGQwY827LQgG6SgGdhtQ=
-
-Name: kj.class
-SHA1-Digest: FkaUvZEjS0R3bt/gokx8E4Ii1u8=
-
-Name: qg.class
-SHA1-Digest: N5q8WulAaaxYovwr6YfiFaVXfEI=
-
-Name: com/jcraft/jorbis/Floor1$LookFloor1.class
-SHA1-Digest: tg329fQ7pw53wmvehOpBrGxcets=
-
-Name: nt.class
-SHA1-Digest: vgyUOKIvI63IXn6ppES2mpPvdH4=
-
-Name: mob/ghast.png
-SHA1-Digest: Kg/wZUMXUxGCJnkXChRHVFNnm7A=
-
-Name: eg.class
-SHA1-Digest: /UCwJP/aEvYtYKTn5RoD20cN5aI=
-
-Name: ar.class
-SHA1-Digest: vbbaIox7PRzQNX/mQsCFZ5MyMPY=
-
-Name: kn.class
-SHA1-Digest: 1MP7abmJZfpAIOx5cQuEq5RYQ4w=
-
-Name: bo.class
-SHA1-Digest: fnD7v9YxI9V5mK7ORs9maQ31KBU=
-
-Name: af.class
-SHA1-Digest: gHdAW+gY1l0vg/OBY3mCiTJk2eI=
-
-Name: title/mojang.png
-SHA1-Digest: pQbQDV01FaK9+imk92OcVF9Q3dk=
-
-Name: gy.class
-SHA1-Digest: o8W9dCcTAcgEnxpWys+refo4LOg=
-
-Name: terrain.png
-SHA1-Digest: Eq67zq1TZx5lGzrE/TuU5sYdQAs=
-
-Name: py.class
-SHA1-Digest: qmyVFGFAlBpTtpeaE1zZ27mw1yg=
-
-Name: of.class
-SHA1-Digest: uB3Pq7fjEIO4jd3CmtEKwDRtLdk=
-
-Name: ok.class
-SHA1-Digest: /mwnCGSHO6dqQREC0VWCXKJA6ec=
-
-Name: fh.class
-SHA1-Digest: YpK2sZMplC9dr68oJ8ydnVpiblw=
-
-Name: misc/foliagecolor.png
-SHA1-Digest: ZfWbubPYgiXLBObLUQJyyEjyKfI=
-
-Name: an.class
-SHA1-Digest: pYmNLQtKKGOoBdfIeONarZr4R6I=
-
-Name: aq.class
-SHA1-Digest: +Fb4mcLgz2V5ZI3BfEqvvlI2i0s=
-
-Name: hf.class
-SHA1-Digest: KwL2dbMhxkayY9wotEgCddDMvoE=
-
-Name: kt.class
-SHA1-Digest: 0RMQhk4UlVYXfd71/d4Fp1V0viQ=
-
-Name: ke.class
-SHA1-Digest: 5P/yj4C97xhBLN3dEXlkkuwRgZg=
-
-Name: armor/chain_2.png
-SHA1-Digest: o82RYls52TnsQgTA0mgK+e6bfCo=
-
-Name: gd.class
-SHA1-Digest: pmuZETX49qF7dAY4V5cFeCmzsvo=
-
-Name: bp.class
-SHA1-Digest: p+rlsz7OKeP2wuIG+8OmpZ6Fjt4=
-
-Name: kz.class
-SHA1-Digest: E7Hr7ZBCtUH9daE/mB5amHuX2iY=
-
-Name: mob/pigman.png
-SHA1-Digest: yj4LOL0vmF89g1ekVJFYZUqdI74=
-
-Name: hq.class
-SHA1-Digest: ifD9QsViVtAHB10V2N7f3YWaFHU=
-
-Name: ne.class
-SHA1-Digest: m9jfBr2F6zqbZIjjNBycxIxr8AY=
-
-Name: nx.class
-SHA1-Digest: wer3E9nc2I9EfW4JH6gmen3o4u4=
-
-Name: mv.class
-SHA1-Digest: K6OH71WtBlqhlFS75D12nG5GrBA=
-
-Name: ll.class
-SHA1-Digest: VpJOPK+E/WsOyAWF/v9DTbNrqP8=
-
-Name: dy.class
-SHA1-Digest: 7WSv8haFIC9yneUJICD/pKcH4/4=
-
-Name: paulscode/sound/CommandThread.class
-SHA1-Digest: WFt18YYMAx9GmubKllCx9oz39fE=
-
-Name: ed.class
-SHA1-Digest: RY+85AJ4ZFvijb971N9N+a6wdBk=
-
-Name: bf.class
-SHA1-Digest: Cv9mTbbY+hxGCU0WR3D0y6dWulU=
-
-Name: pu.class
-SHA1-Digest: evQNgDtb5g4VnGupbphMu3QEBLM=
-
-Name: gs.class
-SHA1-Digest: YHPoYIZoxJCX82UXh3W+bLY2SyI=
-
-Name: jt.class
-SHA1-Digest: 1HXVmPEBhIjUd3aKg6+44IIvcZg=
-
-Name: lo.class
-SHA1-Digest: Jh2UM/Ib9SYAAsAtXiJHsZ9/GUs=
-
-Name: bl.class
-SHA1-Digest: ibNrF8lDx/IhF0xSu99Vtrcgj5w=
-
-Name: nd.class
-SHA1-Digest: FD/FrXXLMMJkn+FLoq4i4/yKZqE=
-
-Name: armor/diamond_2.png
-SHA1-Digest: kT7xzmEkk35t40yRefv8ZLtnrwM=
-
-Name: armor/cloth_1.png
-SHA1-Digest: qPyk7hlFpOIH4G+JjuhBwvgXLjw=
-
-Name: px.class
-SHA1-Digest: AAHofaQWRBoRphe4BsFszXwv+q8=
-
-Name: lq.class
-SHA1-Digest: nSsp+AdN8NjcPf8wMpuDyL/Ngsg=
-
-Name: kw.class
-SHA1-Digest: miFf4yci9GLnJvGheMTUT1MCNrI=
-
-Name: kk.class
-SHA1-Digest: MffNel02qfvg+Ma4zK/0kWHPGM4=
-
-Name: armor/iron_1.png
-SHA1-Digest: cTTpRCYFt3TCDAyDWDcuKuOCdF8=
-
-Name: pe.class
-SHA1-Digest: 4v+0+aZSDPhx6trVWAM7LISTZaI=
-
-Name: ec.class
-SHA1-Digest: DZ2tqJKpg0d7IX1NPjET1xCePwA=
-
-Name: dq.class
-SHA1-Digest: EVp8Uli+6w7B3xLkh1mM9qRr+0I=
-
-Name: je.class
-SHA1-Digest: JIHWnH3KvpAiuy71Nw/4P9K4zJc=
-
-Name: com/jcraft/jogg/SyncState.class
-SHA1-Digest: AxsHUctwS9JLZDkRt2oXCimBOF4=
-
-Name: ct.class
-SHA1-Digest: X0qCXGnLq9TMtk7NMKOVmLzLHOg=
-
-Name: lu.class
-SHA1-Digest: jBazNYkED+r8c/Z7EKhgnWV69vA=
-
-Name: com/jcraft/jorbis/PsyLook.class
-SHA1-Digest: PscVougKbZfr1UJGQGGAeJ0LvUs=
-
-Name: fm.class
-SHA1-Digest: G5SAFMiczb6zJyNSUruTnhDd+pU=
-
-Name: eo.class
-SHA1-Digest: HE7dnZ/7Jt7bvXUwNlHbC/Cnp0M=
-
-Name: cz.class
-SHA1-Digest: BlgONN6l3Xvg9O8DmBLUUzzW+RU=
-
-Name: mob/sheep_fur.png
-SHA1-Digest: 6cwQ8RybUwyf2yHSclgK9ArVk30=
-
-Name: paulscode/sound/SimpleThread$1.class
-SHA1-Digest: pskahvwFMPVcF6G9bO2PzYKuQ5U=
-
-Name: fu.class
-SHA1-Digest: 4hmqebO9PmS7I6Z5a9iK0H04QFw=
-
-Name: ca.class
-SHA1-Digest: TBXWIWyiyn9WtU3BW60jegHdQnA=
-
-Name: paulscode/sound/libraries/SourceLWJGLOpenAL.class
-SHA1-Digest: MKZNgDpivpKA0q+w/S81TiuO/6s=
-
-Name: ah.class
-SHA1-Digest: Mf+PDnWFwumOhIQbkHZwuPbakuc=
-
-Name: ej.class
-SHA1-Digest: BobzXy320iKinraUe2P4VMQqTEc=
-
-Name: nq.class
-SHA1-Digest: iXQ2JDe0Pr/suhIe0uyGnh6Wb7g=
-
-Name: os.class
-SHA1-Digest: ueWXFX/PtZP+C9HvmROA/UHpOAU=
-
-Name: item/cart.png
-SHA1-Digest: NlDQYnDYCaLWzQCUXpgY9vohGtY=
-
-Name: com/jcraft/jorbis/Floor1$EchstateFloor1.class
-SHA1-Digest: 5gOOxYIlBzQJ3IyeYOoB0StH2RM=
-
-Name: pr.class
-SHA1-Digest: WoIJZC+TbIxDGLUCDedH1vB4vew=
-
-Name: ni.class
-SHA1-Digest: wWe6v9i0zWpfDkfsye7GL2129UE=
-
-Name: jz.class
-SHA1-Digest: TuMAdR1MiY1JzuMthR17VJA8aCA=
-
-Name: cq.class
-SHA1-Digest: gpPg5FcAiiEatX2KznRAOCZUcQk=
-
-Name: misc/grasscolor.png
-SHA1-Digest: mmHb507u61NUcRHOvjkoDfMGhS8=
-
-Name: com/jcraft/jorbis/Lsp.class
-SHA1-Digest: CGlCmZ+qcvi52aq4ClrwSUJrOXA=
-
-Name: cf.class
-SHA1-Digest: n4h0kmejR+mTbSplIHN4cHLd0aI=
-
-Name: p.class
-SHA1-Digest: XAJDIFQEaI7Mhtj5St4yN5KjtLI=
-
-Name: ii.class
-SHA1-Digest: wpOy5DvFW2WNMn5wjNe9msi58G4=
-
-Name: fn.class
-SHA1-Digest: QNzyBdRcKEVRoTum/uFwPGfKFO0=
-
-Name: mi.class
-SHA1-Digest: juzn3Jdx9fbApU77odk9Sx/gEW8=
-
-Name: qc.class
-SHA1-Digest: yGXYXzB+oHzhTkc+Gr5XZvwRUUY=
-
-Name: gi.class
-SHA1-Digest: P/9cJ6NjNdGnDj+tYS8gUzYAdxQ=
-
-Name: ic.class
-SHA1-Digest: TsoThnHGY1FE+cdQCwy5XHiVSKA=
-
-Name: cg.class
-SHA1-Digest: kET3+OJKSwhM0u7HopgLpezoBds=
-
-Name: paulscode/sound/MidiChannel$FadeThread.class
-SHA1-Digest: G1uGye5YYZKEehRpY2GKPb9DBHo=
-
-Name: km.class
-SHA1-Digest: Se1QgnBlqsgwxWD2Yp3tYSze94o=
-
-Name: it.class
-SHA1-Digest: NRlmYJUHNROIpg5HkfUe1Z8RyGM=
-
-Name: bk.class
-SHA1-Digest: LHT4trDD39zo1aBazxnOD8NNoRc=
-
-Name: jc.class
-SHA1-Digest: mkzuzFlTTUlDwm1KBFJXTrzJvdA=
-
-Name: paulscode/sound/codecs/CodecWav.class
-SHA1-Digest: r2jOKPe9080Ax2dlHeXJjoLy1pI=
-
-Name: mob/cow.png
-SHA1-Digest: UOA8ELNnAcU4iQiDpuSj8rVv7PU=
-
-Name: z.class
-SHA1-Digest: tFjSLD2RCPFWxbVXr5XtykhCd6U=
-
-Name: ek.class
-SHA1-Digest: QM20vOLlaqZkMlRTM4Fh4yxjcdE=
-
-Name: gui/crafting.png
-SHA1-Digest: 8TJ2Be84ftY/6oE+S5aRfa6Z7CY=
-
-Name: fz.class
-SHA1-Digest: KCcJhPLVDOkNIJQSCRcQShlxhmw=
-
-Name: x.class
-SHA1-Digest: Ej0MiCLaKirVy8kMLMbdunbM1+0=
-
-Name: ey.class
-SHA1-Digest: XzJp0tBUDXAe1CSiow6M/I6zmkA=
-
-Name: jm.class
-SHA1-Digest: yqaoJdTM7xkOkTM5OG2z00JKQss=
-
-Name: hd.class
-SHA1-Digest: UCPmgmr1ZeNdw4eGLZFO4sJf6/A=
-
-Name: bs.class
-SHA1-Digest: RRI8862DFi6PpT4t0HK1JahaLpw=
-
-Name: is.class
-SHA1-Digest: 57muyulOW8t1SsdI447Io7TTjVc=
-
-Name: jf.class
-SHA1-Digest: J4TTu3uQmvibhbfuRMShqLr5rWc=
-
-Name: com/jcraft/jorbis/FuncMapping.class
-SHA1-Digest: Q/qr+R8FGnng+CCoMZ9or3w7iXU=
-
-Name: mob/pig.png
-SHA1-Digest: V48hcqRI4LD2yLy6gi9TWuKCOB8=
-
-Name: fp.class
-SHA1-Digest: GerTzBzR+bjKZIETGpGNNXAQssQ=
-
-Name: dg.class
-SHA1-Digest: fPA40zqxf5v9r8vEbDOFXs+xBdM=
-
-Name: ap.class
-SHA1-Digest: zZ4478JJiAhgytigjaKpkOijhEA=
-
-Name: com/jcraft/jogg/Page.class
-SHA1-Digest: DYR4aAmVxcRqLZmrAyvj6tVDG8Y=
-
-Name: pl.class
-SHA1-Digest: lZQS97lITHDOTc1du4JF5EIHxiU=
-
-Name: jn.class
-SHA1-Digest: HraWLViKmgxjeYZCHInoKGns/0w=
-
-Name: eb.class
-SHA1-Digest: 2MUnTvFngr03mmszP4x5Eh8TleE=
-
-Name: nv.class
-SHA1-Digest: IugxRaHQd/j2m50OXsogp9d4KL8=
-
-Name: op.class
-SHA1-Digest: 09WIexHTnzJBUCeTX/mbNpP4aHA=
-
-Name: cm.class
-SHA1-Digest: 8fcDlyhXTt/MEOtvkK1nBMkMv8M=
-
-Name: lt.class
-SHA1-Digest: xwgLNQOz/f3fxwGEtRfo4N2qFIc=
-
-Name: lp.class
-SHA1-Digest: CkQeErue4N3Kx6PGEU//OAiyviA=
-
-Name: lx.class
-SHA1-Digest: 9sZLII78WogMceeSc0eGYYMTe4U=
-
-Name: jj.class
-SHA1-Digest: /4k6PzC4F585xio4dFDZyc4zoXY=
-
-Name: lk.class
-SHA1-Digest: c37z3TBUM597IfOhOIZv8prZClY=
-
-Name: ng.class
-SHA1-Digest: /wP18YHHGO03maRBS9vge7GX3u0=
-
-Name: oj.class
-SHA1-Digest: C2V/4y1LVjFdY2920TkEinxFKCE=
-
-Name: kc.class
-SHA1-Digest: YRsLE/DAy2Ze3oGewC5UC0hkuOs=
-
-Name: oa.class
-SHA1-Digest: E8mGlwEg2bmX/qzh8XVXny+fvck=
-
-Name: title/splashes.txt
-SHA1-Digest: h3rdj/D9BTxdWuvD45hcOStwzq8=
-
-Name: oy.class
-SHA1-Digest: sQACbPnEAaQAyWw8nnWwNxP7sC4=
-
-Name: mob/skeleton.png
-SHA1-Digest: 3pt7XEpvzlc2/peM8zcFO0VKYT4=
-
-Name: pb.class
-SHA1-Digest: c1pLl12yvMPdtQt5Q0wAC7eHRQU=
-
-Name: gui/items.png
-SHA1-Digest: 2Ox6LiRZYazTCflHh5qm3hqLlRI=
-
-Name: qi.class
-SHA1-Digest: vflIEBx2xNFGrqg9WlKmc+8lCCw=
-
-Name: ms.class
-SHA1-Digest: gH88G6YZvpJ2u/csTIbineP9o84=
-
-Name: qm.class
-SHA1-Digest: Ye1xE8kHsQ+vL4MmBYx+5GD+K48=
-
-Name: com/jcraft/jorbis/DspState.class
-SHA1-Digest: to2Q/1ovPDLrL8ySvYcALE7l8Bo=
-
-Name: armor/gold_1.png
-SHA1-Digest: l+li03RiLjA7BP6eKgq0nSRvEi8=
-
-Name: nk.class
-SHA1-Digest: wz40iOPloWdSQEE6n2EkUZ56rYA=
-
-Name: pd.class
-SHA1-Digest: 8SbtX0L6KkTHN0Jemkw9iwtG8HE=
-
-Name: dw.class
-SHA1-Digest: NiyVVaBeMCXTDxedyh1cYcchF1Q=
-
-Name: mob/sheep.png
-SHA1-Digest: rqiKnjtsXva+IZaNQdjryUJkaKk=
-
-Name: if.class
-SHA1-Digest: X0U+Qd9hLqEVnr8V/VZerD4SRzw=
-
-Name: com/jcraft/jogg/Packet.class
-SHA1-Digest: SLKnVPKqIBFZYDtuQNHkVpVHAaY=
-
-Name: gui/furnace.png
-SHA1-Digest: VtRb3N+F8S29VcKuKlIWzmV2Wso=
-
-Name: eh.class
-SHA1-Digest: usSwSub1MlrIoLNGdFOPO/tTQhE=
-
-Name: jr.class
-SHA1-Digest: Y6JVlhhPPIFPVmXKaJTROuYAGI8=
-
-Name: nj.class
-SHA1-Digest: UAM0U5UFQ6lIBStd0M9NExGBpe4=
-
-Name: ps.class
-SHA1-Digest: 3CT3QINHUrg0lfipNbSGkRmnlhg=
-
-Name: com/jcraft/jogg/StreamState.class
-SHA1-Digest: STsET1zEbmb+DjYz5Tvlr5u1BG8=
-
-Name: com/jcraft/jorbis/Mdct.class
-SHA1-Digest: IFLAsiW2LwC8VUWK3nqdxBhsZ4w=
-
-Name: item/door.png
-SHA1-Digest: lrKBtBuckAXWFbCkE6q5cR4vgVk=
-
-Name: ev.class
-SHA1-Digest: 2M88aVlg2ll4a7DUc0aQMuTW6Gc=
-
-Name: id.class
-SHA1-Digest: wtWESMMR1K6CMn3oZc33QTH5Peg=
-
-Name: jo.class
-SHA1-Digest: e1pgrYOjmYx9nAvnPd6/kEWjpjo=
-
-Name: h.class
-SHA1-Digest: y126wUrIIQ8wv0IiHG5AvdSgaeg=
-
-Name: au.class
-SHA1-Digest: XiAmempnIHlgwTAuBKI7MgkOsJM=
-
-Name: qa.class
-SHA1-Digest: TLwmAlruGssZ6iO9wVX26fx8M0g=
-
-Name: el.class
-SHA1-Digest: a6MFvpTv4lnCQHaliCT/QK0KmPs=
-
-Name: du.class
-SHA1-Digest: lEXi2Y1t5zqLjbqaOqSNSYFeWaw=
-
-Name: mk.class
-SHA1-Digest: v1tFuh4aZreBrzDEUSeIiYfuZNA=
-
-Name: paulscode/sound/SoundSystemConfig.class
-SHA1-Digest: bD3jatiQAnDJsRdzxDw5tyeRHOs=
-
-Name: es.class
-SHA1-Digest: 8RHMVu2LXknCC+bJZaFerucLOLs=
-
-Name: mg.class
-SHA1-Digest: JMs81J2Oq663aw+uPUneNEHFGBY=
-
-Name: com/jcraft/jorbis/FuncFloor.class
-SHA1-Digest: TeBUuafMrZacZ7y5wt40vyQeFnw=
-
-Name: com/jcraft/jorbis/Floor0$EchstateFloor0.class
-SHA1-Digest: QU3wHS5rfWuoJBHBTPQScITWLmI=
-
-Name: gr.class
-SHA1-Digest: tbmsIOGqmIfJR1DJfUkuYDNdlRk=
-
-Name: com/jcraft/jorbis/Mapping0$LookMapping0.class
-SHA1-Digest: NreTdvhmIk/YJ6zlpsq9il6sy58=
-
-Name: df.class
-SHA1-Digest: xSgfuz1nyGIT7eN3UhEBZTAVBl0=
-
-Name: al.class
-SHA1-Digest: fCwr18w6Z5G3kldaFuEXrx279TU=
-
-Name: hh.class
-SHA1-Digest: GPyjzwqoYHzZ3t3xlPS1HHm77ww=
-
-Name: nb.class
-SHA1-Digest: uWCdU1RD5DIN9ofCPQmdN0LeZsw=
-
-Name: ab.class
-SHA1-Digest: M0osY+ABzql8wlsbZNCERI097JM=
-
-Name: i.class
-SHA1-Digest: lvSnSiXjulDlMLRXD89qKbualEs=
-
-Name: nu.class
-SHA1-Digest: VClOD/ZIUtcN8+fF46K7EfdFp6k=
-
-Name: do.class
-SHA1-Digest: PLtNrfYeRVWTFeTsl7+lt5GNf/c=
-
-Name: gui/unknown_pack.png
-SHA1-Digest: 7QMKZuoM9jhqqAwzjj2biS6BvAo=
-
-Name: dk.class
-SHA1-Digest: 4YR1O7t6siWqVIq3m/w51cbaE+U=
-
-Name: environment/snow.png
-SHA1-Digest: OGPUn5hch8shOOLZbcIJLBQgSNA=
-
-Name: dx.class
-SHA1-Digest: 2eaHJV1atvQCzrNNAbQhuflwBgg=
-
-Name: paulscode/sound/SoundSystemException.class
-SHA1-Digest: i0ZNXaiCtT8s3vBF12iHUMrwCN8=
-
-Name: ks.class
-SHA1-Digest: 7/Zz2eS03KQMqBwjgIG6tWQyHow=
-
-Name: ou.class
-SHA1-Digest: BQvLgTntUvyHqZXlbhEJPZvMJiI=
-
-Name: cw.class
-SHA1-Digest: d4AtmYLovDK1AiEYjn0Fh46Gdj0=
-
-Name: da.class
-SHA1-Digest: zy59T17F3zmuWa0WxGUEu9QcK40=
-
-Name: u.class
-SHA1-Digest: Fkclj+heaB1VnjunQwWv506IhHw=
-
-Name: pf.class
-SHA1-Digest: snrf7G8t+uVcGcePnW8cuGsbxig=
-
-Name: fj.class
-SHA1-Digest: gEHMjpd9IgP7Edj98ubSMqKBwYA=
-
-Name: com/jcraft/jorbis/FuncTime.class
-SHA1-Digest: XKMaUXCuEq3DSN45X5NEkxD/WNI=
-
-Name: kv.class
-SHA1-Digest: kneDIbInn7h7lZ8a1/MnSwyP6WI=
-
-Name: ez.class
-SHA1-Digest: OKti0EoATyjylU0WQSTH7Pc8teI=
-
-Name: oo.class
-SHA1-Digest: Bw9eQesGY+3pee11r1TQMbKoyM8=
-
-Name: dm.class
-SHA1-Digest: X50nyHAX7any+KcNbdmtCqT7uIw=
-
-Name: ka.class
-SHA1-Digest: cU+HBThlrMsczapLOi+IDUO/2SI=
-
-Name: eq.class
-SHA1-Digest: qn0qKIoM+es0qTnmb613aZZF89w=
-
-Name: av.class
-SHA1-Digest: jfcez+liebtWDgrEVev9B1mMFSc=
-
-Name: hg.class
-SHA1-Digest: bxykQaot1Vj2q+z/q0EeGudiOcQ=
-
-Name: hx.class
-SHA1-Digest: feQDuv7V04+hbQnBy1VC/c1te+k=
-
-Name: js.class
-SHA1-Digest: bJrZnJC5GsyaA+0FvOzZ5ivxHnM=
-
-Name: ht.class
-SHA1-Digest: ERwLDj3wLa+p5YU0RXiPO5ijolo=
-
-Name: ag.class
-SHA1-Digest: IOP1nBqJjMcyhutp/3/Hd2zJItU=
-
-Name: paulscode/sound/StreamThread.class
-SHA1-Digest: s0GUIztnX/+stmopMLajWSWzQ2M=
-
-Name: y.class
-SHA1-Digest: 2QA7jIBzgH9TblYlJnOc0M4U3QQ=
-
-Name: ie.class
-SHA1-Digest: 8oUNOVGJcKR4adTm3OzdCsmUuc4=
-
-Name: no.class
-SHA1-Digest: ESnTDfWgf9+YqKITDuZ3nGGPnoU=
-
-Name: item/sign.png
-SHA1-Digest: DpIepeRBc7gFPtk3qQw3Rl4u1JE=
-
-Name: nr.class
-SHA1-Digest: gZMAVDIheE6GaBIIZeTzJSDHwhU=
-
-Name: ak.class
-SHA1-Digest: jkBaRRvVRduS22C5uhYP4omhOlU=
-
-Name: fw.class
-SHA1-Digest: pg1xCx7wwzmKIIOZY7HTdql3Hog=
-
-Name: paulscode/sound/codecs/CodecJOrbis.class
-SHA1-Digest: Tuclsdt0ea2KXJX1FDy6je9lhRs=
-
-Name: terrain/sun.png
-SHA1-Digest: wLz+S2x4Wr6XIHIdyo5Jv4dTPIw=
-
-Name: environment/rain.png
-SHA1-Digest: jyvAPez7AFeHH3PDyIxGeoE9PGk=
-
-Name: armor/gold_2.png
-SHA1-Digest: vMsNeaaeai8J3wVArlXiGci7rIc=
-
-Name: net/minecraft/isom/IsomPreviewApplet.class
-SHA1-Digest: SFiqLNwgT8igHa1fwaoQrpeDn4s=
-
-Name: hi.class
-SHA1-Digest: J5KMBNd3cOeKwwzTbSpJab0ssiM=
-
-Name: armor/iron_2.png
-SHA1-Digest: C4f8PZXXCONaefuQifGBJDzX5DU=
-
-Name: item/boat.png
-SHA1-Digest: mXMEqjLKM4Y9c/Tt6xHUyVDQzD8=
-
-Name: iy.class
-SHA1-Digest: /wyOgw86afvboOm/ztskpIYSNnk=
-
-Name: co.class
-SHA1-Digest: El+vtNOkPbYiXcndH2YnA5bUbKo=
-
-Name: qj.class
-SHA1-Digest: Ppqu2IfEHjqqavE5h4A6Xz3Itq0=
-
-Name: bi.class
-SHA1-Digest: mr7WQ35whZPKr9j7bhYEtDzlkog=
-
-Name: lf.class
-SHA1-Digest: 4rc4NZbUylwClAvzliJP80WK1/Q=
-
-Name: nh.class
-SHA1-Digest: NfFXwzLXHs80t3JkxqN9w6z5Up8=
-
-Name: mw.class
-SHA1-Digest: RW6dcN3ajuvsNVb9MZyvb3kFL24=
-
-Name: gf.class
-SHA1-Digest: DHS/PEHPTS35tYzydU3YCbYQxQg=
-
-Name: hz.class
-SHA1-Digest: 461jcu45pbhuGg8zXo1fdDsILbs=
-
-Name: ia.class
-SHA1-Digest: 7orf133xIoAKdTwhxkoNP76/Y+A=
-
-Name: om.class
-SHA1-Digest: W5nSf4kVpMPVwxJt4HiQWypgesg=
-
-Name: hl.class
-SHA1-Digest: y7PFRW1r7+CD+9oUNZTx5uC10VQ=
-
-Name: o.class
-SHA1-Digest: kiXslvFTsUzC+/77oLAz+gjYsY0=
-
-Name: io.class
-SHA1-Digest: WtiDDLIpNi8Algi4L9Eol88WooM=
-
-Name: paulscode/sound/Channel.class
-SHA1-Digest: Ac+AsXLmbEEHh/UF23mxwYK75oQ=
-
-Name: or.class
-SHA1-Digest: RmmdbM0Q6lG84A30o3W+V9aKqcg=
-
-Name: cd.class
-SHA1-Digest: a2lUAcgjBFWwnZRy5HIUdIcitqU=
-
-Name: mr.class
-SHA1-Digest: VtsCKnBcR18hOR59clqI5rucsts=
-
-Name: mx.class
-SHA1-Digest: G8MyPVPlwnWIOMLUkGIaFhtcPIU=
-
-Name: ob.class
-SHA1-Digest: 7ir5p2pJ+1eFFxsizlYAq8lVRUk=
-
-Name: am.class
-SHA1-Digest: WkZslsrC1PObMBOyUR/Lzgcq+iw=
-
-Name: mh.class
-SHA1-Digest: aEfuBSioWu+yfeuUY21pqz1h5Lw=
-
-Name: fe.class
-SHA1-Digest: DsWXAPixqxnWg1leeqX3rveMenM=
-
-Name: md.class
-SHA1-Digest: nWcJZGKS2wfLtCrmUkKOxq9iEn4=
-
-Name: jd.class
-SHA1-Digest: 638IeQJJziH5NKjy2Et6IiEUlm0=
-
-Name: jx.class
-SHA1-Digest: uzW+yiW8aiRP0efImBdnJrRbmlY=
-
-Name: ea.class
-SHA1-Digest: psOgqzd9svtoPUOEZ5Gko5dpcXA=
-
-Name: pk.class
-SHA1-Digest: xul3SOo5YCsxbt0gHweYj699fb8=
-
-Name: ox.class
-SHA1-Digest: 8z5zcC0EBTPcCd2k4t4dVnTs4to=
-
-Name: mo.class
-SHA1-Digest: Hgg3wsfO2MnGaHvpo6zs5ZoeIXM=
-
-Name: hv.class
-SHA1-Digest: oYNwYEvhd/Hc4O4UkZdyWGjo2e4=
-
-Name: cx.class
-SHA1-Digest: 6Wm0+Ury5FMZA8lQGoOO+QEuwqk=
-
-Name: jb.class
-SHA1-Digest: yisHr8mBTE2+9ZTrvV0338dYkN8=
-
-Name: com/jcraft/jorbis/Lpc.class
-SHA1-Digest: +uIfEExaxyDONJE2rdtMOWhLCEU=
-
-Name: paulscode/sound/SoundBuffer.class
-SHA1-Digest: INNMzgvNlJJFwECDa06b0YVJeGM=
-
-Name: my.class
-SHA1-Digest: O+zvdc7TQ8dAdBIKDVjWcnwvncU=
-
-Name: gc.class
-SHA1-Digest: AND18hawrZbKdUzFD8XasDy02kI=
-
-Name: fq.class
-SHA1-Digest: 1adtpVWY8+AWLBSuo466EPTqHy0=
-
-Name: pv.class
-SHA1-Digest: 7pZE5T7Y4iIO94x8BAVykidOt9Q=
-
-Name: by.class
-SHA1-Digest: 2RY22xcjPeEMuk4ml4/o+BzvAg0=
-
-Name: mt.class
-SHA1-Digest: zDEzePiP/aHjdI7BCfNoRQ95O/4=
-
-Name: com/jcraft/jorbis/CodeBook$DecodeAux.class
-SHA1-Digest: hkIxJ/lcOJPzQxya7qdsMdPR/Eo=
-
-Name: ij.class
-SHA1-Digest: 6JyxeCHXzKZO7ROdjxqnTGvwaHk=
-
-Name: me.class
-SHA1-Digest: j7kpwKdKuzHLLCihhfFKXm/EkP4=
-
-Name: com/jcraft/jorbis/Floor0.class
-SHA1-Digest: 4NiZKvKvRzraYxJu1beNdHlpewE=
-
-Name: fa.class
-SHA1-Digest: xBpq0VrkDOBMax5/gJGEVbGxjeE=
-
-Name: ku.class
-SHA1-Digest: 4Xp2Oky8GA1FWv6kpc8EqTN7BIQ=
-
-Name: kh.class
-SHA1-Digest: Q2Ubyu7URu5i/MtdwoHEzLGRZyA=
-
-Name: pt.class
-SHA1-Digest: ttmVJydIwjHEnfAUk4CqNL3EWs4=
-
-Name: nw.class
-SHA1-Digest: jT4Zgm5hD3AifTNGlxb/wwUBf9I=
-
-Name: aw.class
-SHA1-Digest: G11SEYEBc80Q4m/X7dapcu4oiKg=
-
-Name: paulscode/sound/SoundSystemConfig$Codec.class
-SHA1-Digest: vmoR+oaRfGOf5wccrYGYmz/mBxU=
-
-Name: ac.class
-SHA1-Digest: cm6BIzL58V/aJSTliJ1yQJUnsxU=
-
-Name: mn.class
-SHA1-Digest: M87+N7+2StSvtHJ/97/tnNZD/f0=
-
diff --git a/resources/META-INF/MOJANG_C.DSA b/resources/META-INF/MOJANG_C.DSA
deleted file mode 100644
index e921bfa..0000000
Binary files a/resources/META-INF/MOJANG_C.DSA and /dev/null differ
diff --git a/resources/META-INF/MOJANG_C.SF b/resources/META-INF/MOJANG_C.SF
deleted file mode 100644
index 01261ec..0000000
--- a/resources/META-INF/MOJANG_C.SF
+++ /dev/null
@@ -1,1778 +0,0 @@
-Signature-Version: 1.0
-SHA1-Digest-Manifest-Main-Attributes: zasvPbp2Pj22IZ986L4058c4i8Y=
-Created-By: 1.6.0_22 (Sun Microsystems Inc.)
-SHA1-Digest-Manifest: 8WGDngNoFK49s5T9cXm26xuEC/I=
-
-Name: ns.class
-SHA1-Digest: I6bFOipO6uLivTO4WpEOwMJFZHg=
-
-Name: dc.class
-SHA1-Digest: Hulh6X2EeBL9MilMKmT0ZPdF4rk=
-
-Name: gu.class
-SHA1-Digest: l0y9K9TT9v8sE0xq5SO7/q4QFg4=
-
-Name: r.class
-SHA1-Digest: okVa3D57gfh0LRu0FBLhBF0gnWU=
-
-Name: ki.class
-SHA1-Digest: 1VnsIEQop5T/PpptSX+FFq2YTNM=
-
-Name: gl.class
-SHA1-Digest: Z/iE6GXFJSausPSpMZsYjBGFvMA=
-
-Name: s.class
-SHA1-Digest: AeHe81TM1XfD++hpVx7PgXZfc7k=
-
-Name: jp.class
-SHA1-Digest: ICwK48oRfFhlGH3g5sONFiaVEaI=
-
-Name: mob/spider.png
-SHA1-Digest: mC94GimRFKImw0+2LYdBXDiet8g=
-
-Name: mb.class
-SHA1-Digest: 7qT0NZr3LnBr68uJ8ITe5kiRudc=
-
-Name: hn.class
-SHA1-Digest: jOb1Q2rF3gxZErIqHiX1OepYDE0=
-
-Name: hw.class
-SHA1-Digest: Rs4StiWWq4cA9MVyivlQ5tu+7c4=
-
-Name: com/jcraft/jorbis/Residue0$LookResidue0.class
-SHA1-Digest: k9My2VLu4QE7WH/7uaIlOE6UcpE=
-
-Name: hu.class
-SHA1-Digest: 8cBNWMYk58lln6sifNmWLL1NGDU=
-
-Name: lm.class
-SHA1-Digest: YW/vCJuqnBWCvolkp6agXo2iSGM=
-
-Name: ex.class
-SHA1-Digest: 1z0a97ONHsgeUza28TvyMxqe7hg=
-
-Name: bu.class
-SHA1-Digest: 5f4aRe49ApkrPSiRYyZGp8ZzDqw=
-
-Name: jh.class
-SHA1-Digest: nA235JMyPX6mV10nENrsAOJD4mE=
-
-Name: gq.class
-SHA1-Digest: 8FCrQDpT9awmYDW4OaJF7RPET04=
-
-Name: paulscode/sound/MidiChannel$1.class
-SHA1-Digest: gwJh5z1P3Mcbrh+cyN7iqVOXTEY=
-
-Name: fc.class
-SHA1-Digest: iM9+oFUm3K9onEjTJh3yuRZ33Ww=
-
-Name: a.class
-SHA1-Digest: iQpgZsM16K0W6r4TazKtjYbwvok=
-
-Name: item/arrows.png
-SHA1-Digest: lq8TgQgyCWrYxveInFzSOyNKHss=
-
-Name: fi.class
-SHA1-Digest: JLXz36w9EWfIbG2f1qFey8hsuLk=
-
-Name: iv.class
-SHA1-Digest: tcM5DSZWeFKTwGz75zz43rZZ7Qc=
-
-Name: kl.class
-SHA1-Digest: ceLz5nnwYYsuWCPvjqo41WPujgY=
-
-Name: bx.class
-SHA1-Digest: fT0Sq8jpYEfNN9CrV+8YFFbHj58=
-
-Name: il.class
-SHA1-Digest: 51Rxeu8d0TGZbf6zHqoLQKa2l1o=
-
-Name: paulscode/sound/FilenameURL.class
-SHA1-Digest: 8YYxpqAqzF3YkKqJrnPx1mOZe8I=
-
-Name: dh.class
-SHA1-Digest: hy0rAyXbfuMwT8zL1wqSw2QtOso=
-
-Name: pw.class
-SHA1-Digest: YZFrSmYbQ5IoAyuWSIInTEyZeUE=
-
-Name: mob/pigzombie.png
-SHA1-Digest: aXvAjMVmpWjzavxg5uoTFP8rzdc=
-
-Name: bn.class
-SHA1-Digest: jKvERPBaQwQ1LpiE4me1Wt3EdCI=
-
-Name: hj.class
-SHA1-Digest: AfZXNCuH0tnkE2P1Ksrd7zPdjN4=
-
-Name: cc.class
-SHA1-Digest: kpg4MDniJtc4IN99nmhX69SRnCM=
-
-Name: gn.class
-SHA1-Digest: ATyKhl+pMzfE+230/wg5jsC9JOc=
-
-Name: mp.class
-SHA1-Digest: mvyL0cw8aDwDln54qI7LDvFeSC8=
-
-Name: ol.class
-SHA1-Digest: /In1veKHHrj258uAvVKbGpozSr0=
-
-Name: d.class
-SHA1-Digest: HuTLE5IK0a9He4+7/tigyD6TidA=
-
-Name: dt.class
-SHA1-Digest: l0xhwSmsCareNCPADRgzEXj711g=
-
-Name: gx.class
-SHA1-Digest: okV5rPmygdjovv82VpymSSyStHQ=
-
-Name: ky.class
-SHA1-Digest: W9h62QmMNfUOMvEtvdLNk/e2YPA=
-
-Name: com/jcraft/jorbis/Comment.class
-SHA1-Digest: 4iWDZhAwsxAXtw6RLlWVcr8pNt4=
-
-Name: fo.class
-SHA1-Digest: OiVlAT3/Eg985i1+4AsDEdLPNrg=
-
-Name: paulscode/sound/ICodec.class
-SHA1-Digest: 4OFffQA94WhoWdCiAzbp0pU95Bg=
-
-Name: l.class
-SHA1-Digest: R4rOfQuHNaeZtrS/XX5RtfX0IKc=
-
-Name: iu.class
-SHA1-Digest: fMeB0oGQTaZU+qi9fr/UglYyock=
-
-Name: lc.class
-SHA1-Digest: CymSy/GyRG32rScJ2xxCdQ1vQxI=
-
-Name: gui/inventory.png
-SHA1-Digest: 4ujwowDhHNZ9mCDMEGuNdfz0BJE=
-
-Name: bh.class
-SHA1-Digest: T5+zFBvamZRuoe/B4IcJCmyP0R0=
-
-Name: kd.class
-SHA1-Digest: POTZXeP7u6jcPU8n22pnzTfgXNo=
-
-Name: title/black.png
-SHA1-Digest: S4mcMVy3kS+DRaaSYDNzjhA6cxs=
-
-Name: et.class
-SHA1-Digest: BBLEAX5+719nLQzHMntoma9SwFE=
-
-Name: qf.class
-SHA1-Digest: NTjpn/KO5n7AwYHp0+RDTOr+8vQ=
-
-Name: pp.class
-SHA1-Digest: 9hNuDY3X+X0cWobShrD0/+CWWhA=
-
-Name: ql.class
-SHA1-Digest: 0PD5Qw4LbmgvdPPcdbT6+4YhULA=
-
-Name: jw.class
-SHA1-Digest: yjHFtFg2f5qciXc3VmQnd9u1zqc=
-
-Name: com/jcraft/jorbis/FuncResidue.class
-SHA1-Digest: uMcbLH0JDlMAtKhsuehFU+QV33A=
-
-Name: dr.class
-SHA1-Digest: QC03zDo+eeooVQLxr69qcrAaCUQ=
-
-Name: cs.class
-SHA1-Digest: Om20RVFK1iUCV+ElsTabnpAaPcg=
-
-Name: hc.class
-SHA1-Digest: qH9VVU2S8jKTgujo09WXFKDkP3I=
-
-Name: ny.class
-SHA1-Digest: rMqJ5xSNbbQktxr1KKcFMqAOO+g=
-
-Name: com/jcraft/jorbis/Residue1.class
-SHA1-Digest: nX3+R3ZpqfUM1VvVJNXl/25J3/E=
-
-Name: pn.class
-SHA1-Digest: kmVs6vaYWZpiRZpDIi4a/CwmgxA=
-
-Name: aa.class
-SHA1-Digest: IvtXkD7CiwQbnCbaLuj+vbR9WSc=
-
-Name: n.class
-SHA1-Digest: EnDlxLqDX/+632Siu1XzfCtV6xs=
-
-Name: ef.class
-SHA1-Digest: SVy8siPNF809inRLXvSjE3HAdSU=
-
-Name: be.class
-SHA1-Digest: vRqFNULEME7NKuvmDFKiW9FRbro=
-
-Name: bc.class
-SHA1-Digest: iXhPHNlcdQgO88EW4flf4OTPnMY=
-
-Name: kr.class
-SHA1-Digest: aPGVQKj7Ynr6jLRl6BBY+EgfOeY=
-
-Name: paulscode/sound/Library.class
-SHA1-Digest: CV8zgv3MzNIyY0LSEykzbqbyhlQ=
-
-Name: ir.class
-SHA1-Digest: GBF9BH4iFZkJs2PhqiYw4Ah8WOo=
-
-Name: ft.class
-SHA1-Digest: eQZqbltIKVx4SQA3A9DEyY+dWRo=
-
-Name: jl.class
-SHA1-Digest: xnqM7rDK7SdTBJsWjNjPED3j6mc=
-
-Name: jv.class
-SHA1-Digest: A5VsNY57l8zPVby6/6N3YxohgMw=
-
-Name: com/jcraft/jorbis/Mapping0.class
-SHA1-Digest: wRgv5DwDZv8LyOyR2k+N/7H50e8=
-
-Name: mob/slime.png
-SHA1-Digest: qg1vPUWWA40Rhw6g+xFT7wp9VaE=
-
-Name: ml.class
-SHA1-Digest: qlR+RmBIB807Hv0YgJq54XYBjWk=
-
-Name: art/kz.png
-SHA1-Digest: OQP7OT3VfH/izhIQVaLBEoGbCuc=
-
-Name: bb.class
-SHA1-Digest: 7M0OVI2IuEoPN2SMealb35RE3RQ=
-
-Name: nl.class
-SHA1-Digest: ZxMgZBLjs/4vSa9wRoAYSWoGF20=
-
-Name: ly.class
-SHA1-Digest: 7OfEt5VLSyc49G0m9sqvyNue9ng=
-
-Name: com/jcraft/jorbis/CodeBook.class
-SHA1-Digest: zAdXZiF7IqsDMqIEf2n9q89IMrU=
-
-Name: paulscode/sound/ListenerData.class
-SHA1-Digest: 7yVCLvmhyTiGWSAGeaap+keUojE=
-
-Name: mm.class
-SHA1-Digest: vhkSzOnCI4N/Df967eIYm1AyfKQ=
-
-Name: go.class
-SHA1-Digest: yzhBxZ884mbEKZKhwzizsMHBlP0=
-
-Name: pa.class
-SHA1-Digest: HSC9fJXAK7bprnqhq9h6Qnmtkaw=
-
-Name: gb.class
-SHA1-Digest: ma3Z3d0xQd189NUN4O5IQssK54Y=
-
-Name: de.class
-SHA1-Digest: B0Y2wY7UkPIg8ewiCKSLTnFTHFE=
-
-Name: gj.class
-SHA1-Digest: nd73+66BuFhZAfdwFjGkx7Y/St4=
-
-Name: dn.class
-SHA1-Digest: /+HywWmit5RbMW1Bxjxx/FVBHz0=
-
-Name: fk.class
-SHA1-Digest: yn15AyiIC5US31AT7keGmyDCdfc=
-
-Name: com/jcraft/jorbis/Residue2.class
-SHA1-Digest: u7lYgdIPQZQMpBhnrdfKjeH+weU=
-
-Name: terrain/moon.png
-SHA1-Digest: w88tAfv+1q+B+3K/1cPJYlQJrKE=
-
-Name: ew.class
-SHA1-Digest: /thn9XUTHqTUhw/uOuNMrmcQUvI=
-
-Name: pi.class
-SHA1-Digest: oaFNQ1DL8dWfvVM0LK2Dh4SqyJI=
-
-Name: nc.class
-SHA1-Digest: Gyi7xtge1Ss1YIhpKxctk3syhiw=
-
-Name: ma.class
-SHA1-Digest: xFjsSA9kdYwMxOtN21Rtl4Ss0oE=
-
-Name: at.class
-SHA1-Digest: EuWJfb0Priqt0zXYSgglJpTn2Q8=
-
-Name: misc/dial.png
-SHA1-Digest: 2b/rlkr7CKqcqqINpcIQRSmYBqQ=
-
-Name: na.class
-SHA1-Digest: O0z6RrPtVbuCKsLpnvwzacBHK6w=
-
-Name: jk.class
-SHA1-Digest: yARk9uXBmL4AEBkcQLXiX+QWuiw=
-
-Name: ba.class
-SHA1-Digest: Hdj4j68cx9U4m8mKZVIYJ3KOtB4=
-
-Name: m.class
-SHA1-Digest: 2HqAZOe0XT4gO7DdcKQjPjpnb8w=
-
-Name: ay.class
-SHA1-Digest: QsmRb8DvuoNpjEN2U94Lw8wkFBA=
-
-Name: environment/clouds.png
-SHA1-Digest: uW2vAKuM2Qz0Ma6a2d3dlPxY9ws=
-
-Name: ls.class
-SHA1-Digest: ZcfEOAUW7+LNk1sk1LOiviboIaM=
-
-Name: mob/spider_eyes.png
-SHA1-Digest: zUS+vyf2FHrEFq5Kq+UTasT3riQ=
-
-Name: com/jcraft/jorbis/Floor1$Lsfit_acc.class
-SHA1-Digest: r4Cozh1xEtVC/S5MS+N2/Mj+Tzk=
-
-Name: lg.class
-SHA1-Digest: V2qy/vYJ73LokKkncLQiVS+HPks=
-
-Name: mf.class
-SHA1-Digest: l7bOb49wdGu8dnfUm8KgNEBsLeU=
-
-Name: fb.class
-SHA1-Digest: BHiN2rtFA95pakgvPDhK38Cmrn8=
-
-Name: paulscode/sound/SoundSystem.class
-SHA1-Digest: RkXUVqdapJqf/Jo8qzEfo2zJI+Q=
-
-Name: lv.class
-SHA1-Digest: 3fMJjQpm25iCcAP2C+Ae3iHxgP4=
-
-Name: em.class
-SHA1-Digest: 3vWcdhpF4x6ImL7HUX26ruX0/l0=
-
-Name: hy.class
-SHA1-Digest: +Cpd3SqVWUTehQC5S1ND7lSCst4=
-
-Name: ga.class
-SHA1-Digest: DFKjle1Ckoxp7mufoB0soF6tHds=
-
-Name: paulscode/sound/CommandObject.class
-SHA1-Digest: UFhpnhwsOPJGEiaqWbCXZ8DUYoQ=
-
-Name: lh.class
-SHA1-Digest: TVeyS5IJuh1X7blLB8n+49e1+II=
-
-Name: aj.class
-SHA1-Digest: D6ZunfUjkf7dVtPVwz+8BUnCa7w=
-
-Name: ff.class
-SHA1-Digest: 9D6hhdejogZNBvTQh5NTmdy/4Tc=
-
-Name: pm.class
-SHA1-Digest: EaVJ1BVUs/vmkl8OxI3jG3e20ss=
-
-Name: oc.class
-SHA1-Digest: Dw4qhx5UUioTTyRdneAw1D6RF0s=
-
-Name: ip.class
-SHA1-Digest: RNZGtqZq7Qkp8Gd7SFT1Kkdb6B4=
-
-Name: di.class
-SHA1-Digest: 85zDbZZNFrHSv5g3GK/aQn6IwLk=
-
-Name: pg.class
-SHA1-Digest: mtAokQ3+JG0tLH3tOi/ygG8wB/4=
-
-Name: hs.class
-SHA1-Digest: oijEz7FgbKocC3xOmgOuKyGEZlI=
-
-Name: ig.class
-SHA1-Digest: GxsKMfJnx4WqZGCMMI0GKU88TVo=
-
-Name: cb.class
-SHA1-Digest: C9BKiUaoB0JDXQ41+Zcu6vlj+2g=
-
-Name: net/minecraft/client/MinecraftApplet.class
-SHA1-Digest: tTsXjabIwZp6HCeYYOOnV7fmXeA=
-
-Name: armor/cloth_2.png
-SHA1-Digest: 4ptw/RkyIML9oOQs+fcNJNGnsDo=
-
-Name: lr.class
-SHA1-Digest: 1CoeAWNFNjiZ//jX/6/obfQCLSQ=
-
-Name: kx.class
-SHA1-Digest: QRkNgW881zY1NeCwa2BhtPaW8Q8=
-
-Name: cr.class
-SHA1-Digest: m+tyTo6NclHx/NKBpJ/bP2OgMDc=
-
-Name: misc/pumpkinblur.png
-SHA1-Digest: Aarb6+DRvpE7JS/GikJMPQZ3daE=
-
-Name: mob/zombie.png
-SHA1-Digest: UyVepTsQlC384VFXTTdxQzL9SWQ=
-
-Name: v.class
-SHA1-Digest: 5Dc1WPmYdiP/+SfnjefKq4TOyCw=
-
-Name: com/jcraft/jorbis/Floor1.class
-SHA1-Digest: zvIyc59370P5ieG+riYQg+pvXvw=
-
-Name: pj.class
-SHA1-Digest: i9nbRigNemvITNQKxJDmcUl0JnQ=
-
-Name: pq.class
-SHA1-Digest: iaaZWiL1fMMDGdb0TjEeoxdmMEk=
-
-Name: en.class
-SHA1-Digest: D8goMjObeNOhy607FI+9wKiFCW8=
-
-Name: mob/saddle.png
-SHA1-Digest: Ug3tZCOt3+6ltx1Hd7BmG0q9InY=
-
-Name: ce.class
-SHA1-Digest: 4htHgWUKxvSd60Z9HO5zu9+Wahw=
-
-Name: ot.class
-SHA1-Digest: evtiP4AnnsXkByiMfXc978HLpMc=
-
-Name: net/minecraft/client/Minecraft.class
-SHA1-Digest: V7cD0oyqqJbicbsOAgKaF4MfeS0=
-
-Name: paulscode/sound/Source.class
-SHA1-Digest: XdJ4sBu0NVNllusz42EKnu68npM=
-
-Name: gui/container.png
-SHA1-Digest: 2O+ltn9L22RpkRZpqhTfkcGIfLE=
-
-Name: paulscode/sound/SoundSystemLogger.class
-SHA1-Digest: m1C6P6WvHi81UFPVlpovfFVEGrE=
-
-Name: misc/vignette.png
-SHA1-Digest: tAIXPzrSY1pqb5u6mD9j27/4ltY=
-
-Name: gz.class
-SHA1-Digest: X2IiPiXb7/zNVdBRN5mjyVHYR9w=
-
-Name: oh.class
-SHA1-Digest: BmA+UFMmuuZ3HONs1cpnEr+zS8c=
-
-Name: ds.class
-SHA1-Digest: 8jIJ/HjaHX7GTkDIeMOwiGGkiQs=
-
-Name: qe.class
-SHA1-Digest: +UqfGkWhTWwZEht6xBHMwmKTaNA=
-
-Name: er.class
-SHA1-Digest: Kw96UO3Q1NaS5ZOEbR4+Fd1zGNA=
-
-Name: db.class
-SHA1-Digest: Vg73aT43QlGxmyTrtgdYmUorXwQ=
-
-Name: oe.class
-SHA1-Digest: 2sPmGWo5FXkv8Q5/IQ9ZMVCveJ8=
-
-Name: com/jcraft/jorbis/Floor0$LookFloor0.class
-SHA1-Digest: AEhYctNt+Qom5uchZzItWfyGQEQ=
-
-Name: gui/icons.png
-SHA1-Digest: 4U3GAd5e9ULibnW9Sj9YIYs5pJg=
-
-Name: hr.class
-SHA1-Digest: ciTtDe4gURxKco4RuVxig0jvwwA=
-
-Name: bg.class
-SHA1-Digest: VCVVrX0hO8n+phjx9TZX/qk6vdA=
-
-Name: hb.class
-SHA1-Digest: e+mtPr9AEUjnRlYQXlWNmbrFzkU=
-
-Name: ai.class
-SHA1-Digest: FnZi/JtetrbFYlcYavRKS7y7j+E=
-
-Name: bd.class
-SHA1-Digest: CTx88jmmSKycy25SByJyc/r7RHs=
-
-Name: com/jcraft/jorbis/Floor0$InfoFloor0.class
-SHA1-Digest: Unx5gAoJ/Ws4ZUr4lSGY7kO9F4c=
-
-Name: mq.class
-SHA1-Digest: ik0rXdBiO5QhAnNOOdYaahM0IjA=
-
-Name: jq.class
-SHA1-Digest: 0AcM5lK/3lBcHloCtvausxggJuw=
-
-Name: bm.class
-SHA1-Digest: puDRzwitsws49ItFOBqvYZBj6qM=
-
-Name: jg.class
-SHA1-Digest: kpXJO8USAxBdqZpY+qvVGGV4PqY=
-
-Name: ao.class
-SHA1-Digest: /mq+pK5LZ+kgjhSm0le21CVZKiI=
-
-Name: lj.class
-SHA1-Digest: uBVAbQ9X4N93AG8jHCX0MPoaJAw=
-
-Name: fs.class
-SHA1-Digest: kFEGMOXTwsSIb30eBxZ2dO50utE=
-
-Name: particles.png
-SHA1-Digest: gkvCfcuYtCJ3lxofgHRhLgLPNIs=
-
-Name: dv.class
-SHA1-Digest: NtcmkVWfOS/VUrxX9zgo61/+v3c=
-
-Name: oq.class
-SHA1-Digest: b3kCreld6C/ki/9DhU5HX3WvScw=
-
-Name: mob/creeper.png
-SHA1-Digest: UF6ieoABPsS6jsN2hBuK944pVyg=
-
-Name: bt.class
-SHA1-Digest: XOejkgh9sg6YSy7ycpZbcz+Il+A=
-
-Name: mob/chicken.png
-SHA1-Digest: fTMNRkd6OQvndwfqWObQjtxB4j0=
-
-Name: ko.class
-SHA1-Digest: 8YJlFqD8EHURC3zMcb5ZsHN62y0=
-
-Name: gui/gui.png
-SHA1-Digest: otlJseF6+levJs04i50YQwPB10A=
-
-Name: cu.class
-SHA1-Digest: 7R23csMLN07v/k2aq7U6OnX+cDE=
-
-Name: j.class
-SHA1-Digest: HMKc/olDTGwH+NkZpjBD2BT3v6g=
-
-Name: nm.class
-SHA1-Digest: nlW/5M+LLS9JP5wq3UD14dCNohE=
-
-Name: cn.class
-SHA1-Digest: 7o8d7eVnqu3w6RyBgb6zhQsCYn8=
-
-Name: com/jcraft/jorbis/Util.class
-SHA1-Digest: hSnjnJSHVLq3DhhsKsYujZXiyl8=
-
-Name: nn.class
-SHA1-Digest: 2qdRCsWWrW4VJf9SCDxTQNJws4E=
-
-Name: paulscode/sound/SimpleThread.class
-SHA1-Digest: 23ecv4oVNhfQxUPeKPD/Aq9zpRQ=
-
-Name: od.class
-SHA1-Digest: 5JgqYOJEblsU9XNh64TJq2Dfp+I=
-
-Name: ep.class
-SHA1-Digest: U6kObiQk4d+HcHW+8zRaRoxDz7U=
-
-Name: pack.txt
-SHA1-Digest: f7qFwuzjGEqP9y0Tsnc8gTq3bzg=
-
-Name: nz.class
-SHA1-Digest: fri7NNbC8MXS9w+EdpgYImh8Gi4=
-
-Name: g.class
-SHA1-Digest: p9QpXb3FxX9N3hOE7LBrdmY/Bfw=
-
-Name: gui/logo.png
-SHA1-Digest: mxwCX1YNKYAFOee4ng6lRCOEUPM=
-
-Name: com/jcraft/jorbis/PsyInfo.class
-SHA1-Digest: 5/aGhVGFShutmXoznQfRPV7UcpE=
-
-Name: q.class
-SHA1-Digest: jRQH+ms1Geqn3Vj8g3+s3vZ35ds=
-
-Name: hm.class
-SHA1-Digest: 5Q43TPvXp+IE/af9vO8VspCHE+w=
-
-Name: br.class
-SHA1-Digest: PNVgGwWnUx9iJOCQGt3a1NLVWoE=
-
-Name: qk.class
-SHA1-Digest: cLhKaAagRR/NVQXJ7bxceTWb4Y0=
-
-Name: ib.class
-SHA1-Digest: LbvWRDfStZmqgCOpVn8iTM53Amk=
-
-Name: in.class
-SHA1-Digest: /a1tEC9XJenjKwOzFZOEHIHG4mQ=
-
-Name: b.class
-SHA1-Digest: TdVW/yAz/OiWmAeGJFBvoPll1Sw=
-
-Name: fr.class
-SHA1-Digest: DH+aQvHjQUlnUnmlFWXti4cnnrA=
-
-Name: paulscode/sound/Vector3D.class
-SHA1-Digest: J5d1r5W5WFO8w11MhenGQ1qTlqo=
-
-Name: jy.class
-SHA1-Digest: mXOwUcef7BGUp3pH6UKJdzCrQGM=
-
-Name: po.class
-SHA1-Digest: 9txSXvbPbYEmi1JTa0O6se3t0Wg=
-
-Name: t.class
-SHA1-Digest: pse6IoNaCZCFYDjlxH7+9Z58OCo=
-
-Name: dd.class
-SHA1-Digest: n3b/atjmaw+1XvG6nsXV88RVuIU=
-
-Name: gui/background.png
-SHA1-Digest: M5z1tF4Bjk/CcT/MVJxZ40GC7tI=
-
-Name: null
-SHA1-Digest: CyfXOAdJJYSq4MsUiezDsqrVruI=
-
-Name: ge.class
-SHA1-Digest: pf1KaJbmQtdDFJjFUSrqNlO+uS4=
-
-Name: armor/chain_1.png
-SHA1-Digest: tBEMf7LTnjQ/3bl6winH12DCNEE=
-
-Name: ei.class
-SHA1-Digest: kGofq/joeFuhdRQlfAi/0wKWUXw=
-
-Name: dl.class
-SHA1-Digest: 9lUV1EcHK+fAzpb+R6U/Qj9AKqo=
-
-Name: mob/char.png
-SHA1-Digest: PKLLiMzvOsDbslW6pq8JNQO9lgY=
-
-Name: fl.class
-SHA1-Digest: 3jVFseFj2qFVunc1RXaJaNH1obo=
-
-Name: kf.class
-SHA1-Digest: iDzNRnAO1LE8BlmiF4Gp4zaISqI=
-
-Name: mu.class
-SHA1-Digest: VNHxh+6qhZ00WmEuebR1qXMIGdM=
-
-Name: fx.class
-SHA1-Digest: 9HxcAsmarJ6Pytz+AGecocU3554=
-
-Name: as.class
-SHA1-Digest: 7Dfv1kCD2YMNuqjq/Bz6fXbmods=
-
-Name: dj.class
-SHA1-Digest: XUTkwZCzNBzT99Cf5VH6bURMMvE=
-
-Name: ho.class
-SHA1-Digest: L2w9KR1ySj8eAtYsOG57OehRqoM=
-
-Name: com/jcraft/jorbis/Residue0.class
-SHA1-Digest: dqxMlBWjhSHpnOPy9sQ81p9uPVI=
-
-Name: paulscode/sound/libraries/ChannelLWJGLOpenAL.class
-SHA1-Digest: 5iJq1znSpdgfWAAzR3cUsfx5fcM=
-
-Name: qb.class
-SHA1-Digest: t1GlnkqahZsIC2WqOwOGhATMmTo=
-
-Name: cp.class
-SHA1-Digest: qhjk8iY0fYTNoc7u1zUVzWeVxak=
-
-Name: kb.class
-SHA1-Digest: ungs8dQ6nDHCyHqFGsI1Q7xLyYs=
-
-Name: mz.class
-SHA1-Digest: 6w7BMRlh3IgmUtq5X9vPuoGv0xA=
-
-Name: az.class
-SHA1-Digest: vUg8Lg2/nwH6b0NESp7fROtuI4g=
-
-Name: oz.class
-SHA1-Digest: KPVxLOkhXycvue0xYO+wnlr4EWo=
-
-Name: lb.class
-SHA1-Digest: IcanDUyGlY419jGtEazxvMzhES4=
-
-Name: com/jcraft/jogg/Buffer.class
-SHA1-Digest: v2xYZUdfGn5/zBLovdbuQoQulqI=
-
-Name: com/jcraft/jorbis/Lookup.class
-SHA1-Digest: nEjcf8At2GB0XntUkgTGMn4Oqak=
-
-Name: f.class
-SHA1-Digest: kta06mQ6cflhpze/vAgrDjbK1YA=
-
-Name: bj.class
-SHA1-Digest: ZHPrM81+9q9IYbOvfZQPsAJyBBs=
-
-Name: ld.class
-SHA1-Digest: UZcoRGC7euhS1AvmEcJVHykC98E=
-
-Name: lw.class
-SHA1-Digest: N85jEmF6IoSGbsGNopNaxoxkNvs=
-
-Name: ph.class
-SHA1-Digest: PfTFYEBR4GYbEZeqkAq1Qg/AhSA=
-
-Name: ow.class
-SHA1-Digest: 2BiUFAu/x0TIc6N+0FJ66YGrzOQ=
-
-Name: ja.class
-SHA1-Digest: CMbTORMlsJC8IqBFEFHMLKZwUIc=
-
-Name: fd.class
-SHA1-Digest: p5LeGQ8X0bvwFqmuBAXW45ZfR6Q=
-
-Name: gt.class
-SHA1-Digest: 79H2W7ssc43Apck/6c9yJgAPqqw=
-
-Name: ih.class
-SHA1-Digest: I/61vRq/OnK1UNOjjD8LX4zkoVQ=
-
-Name: ee.class
-SHA1-Digest: q9dbtpoW1yUXENl51LcBhXYMsVs=
-
-Name: kp.class
-SHA1-Digest: 2jOsWpU+KnbtqaIYl6GUBzbPjbo=
-
-Name: eu.class
-SHA1-Digest: QKSJg8ArNvihzJ03X+lukfttOYc=
-
-Name: gp.class
-SHA1-Digest: y0xOcGiovcB6D8BRW0OwEiScFQc=
-
-Name: fy.class
-SHA1-Digest: Dh4DFzkqJeBA6zY8cM482+W03I8=
-
-Name: hp.class
-SHA1-Digest: qBL6b0XR+KavgNk72WmlBKUvftw=
-
-Name: li.class
-SHA1-Digest: pM5kTGzXlrErHQADnHabXn3vywU=
-
-Name: qh.class
-SHA1-Digest: E1zywxljspO1Ttb7iq9hfviLtWA=
-
-Name: paulscode/sound/MidiChannel.class
-SHA1-Digest: bWqfUBHJTei7fpt+eUYIdNyGH2A=
-
-Name: ad.class
-SHA1-Digest: eDIkPr1ftS5kJRlu5v3x7y6r298=
-
-Name: com/jcraft/jorbis/StaticCodeBook.class
-SHA1-Digest: Ed0qsLvEksdCC9YqR+PG1hYf+OM=
-
-Name: cl.class
-SHA1-Digest: ytWp+K0QWOmd6DYfYi+dpRI7M6A=
-
-Name: bq.class
-SHA1-Digest: BaJOiPVzM5Kd/AmJgoEkdd3qPv0=
-
-Name: gw.class
-SHA1-Digest: gsHGg4wMZnYE8Tiyexrgxqrspg4=
-
-Name: kq.class
-SHA1-Digest: XHnBAV9fpdxArS9bB5k3sCbepyU=
-
-Name: pack.png
-SHA1-Digest: m6MPMzcDpoJ4l1/j500wDJve448=
-
-Name: mc.class
-SHA1-Digest: CoiRjTq1C3T0u6Usdutg4JM5Inc=
-
-Name: mob/ghast_fire.png
-SHA1-Digest: kKX2AbAM4yHRasEieDmwjth+4J4=
-
-Name: pc.class
-SHA1-Digest: W/dGhY8KsviR8248A9HV7V/kuKE=
-
-Name: dz.class
-SHA1-Digest: vVNqrcjVIrrl0C/N/aFf/1SZQzM=
-
-Name: im.class
-SHA1-Digest: nKH1MaZ3j68iHS6neLbORdkls6s=
-
-Name: c.class
-SHA1-Digest: e2ssRo/ENqvtwQPv46zZghr7VNM=
-
-Name: w.class
-SHA1-Digest: 0ZkavJBxIuya06xkhglhGUVzqdM=
-
-Name: gv.class
-SHA1-Digest: RYiHNLR+3kBjYijRGXPs0SQWpGw=
-
-Name: cy.class
-SHA1-Digest: vJbgfKWjuWiK06jcKcQEUpIBqaw=
-
-Name: ae.class
-SHA1-Digest: bUZq2xYa0PRXpPoQJU7AFBv52wk=
-
-Name: he.class
-SHA1-Digest: QBWVezTJlkwVBncLdqz4uySyrzc=
-
-Name: bw.class
-SHA1-Digest: yFkC3wU1r1PKdBuKeDuFrgLeAL0=
-
-Name: iz.class
-SHA1-Digest: X/2XedERjbetDYd/dCjOZPxIo9c=
-
-Name: fv.class
-SHA1-Digest: SsUggOE4rmxQRebSBAzlyhnpyrI=
-
-Name: gh.class
-SHA1-Digest: rnTEBW60OkohcaacbuDzHwOjBuM=
-
-Name: ci.class
-SHA1-Digest: SS9S21VWSOnNW8WhqagoMSQqWn8=
-
-Name: np.class
-SHA1-Digest: mHaWJOT4ZjL707afC0PvxHK68gQ=
-
-Name: com/jcraft/jorbis/Drft.class
-SHA1-Digest: 12d3yaC8+h6iFqqHMTq6h1dsSGI=
-
-Name: iw.class
-SHA1-Digest: bWrPEp9f6UTkfohL3tdNDS8JpFY=
-
-Name: la.class
-SHA1-Digest: 8FDXdJOXrSbe3NZwxac9qmLznew=
-
-Name: dp.class
-SHA1-Digest: AeuytFCnR7dw9D/xR0ocdKk//zI=
-
-Name: com/jcraft/jorbis/Time0.class
-SHA1-Digest: botkjjjrLBvyr19jYwHXgwDMhjQ=
-
-Name: ck.class
-SHA1-Digest: t3joUsUyC96E3A+8JBooB139LnQ=
-
-Name: le.class
-SHA1-Digest: zf6NtmGS2A5KrcgLwFEaZlfvlDM=
-
-Name: bv.class
-SHA1-Digest: NvDJn9lcOgncXeM2sh2PHSDqPvs=
-
-Name: ch.class
-SHA1-Digest: 4Fe9DYSGR8OhNY/gwL6B4elbFY8=
-
-Name: ln.class
-SHA1-Digest: TqJ09XrbaOybYFmC4JI7qPInCw4=
-
-Name: gk.class
-SHA1-Digest: rX7j7vg7z+ji/ZrVEWlh4ktL3nA=
-
-Name: com/jcraft/jorbis/Mapping0$InfoMapping0.class
-SHA1-Digest: WFcy1yVna7zOxHIz2H7VRvfwlmg=
-
-Name: ix.class
-SHA1-Digest: r/jrKJSLfTJTOxWnzvimWOcWtpg=
-
-Name: fg.class
-SHA1-Digest: knSEA2/n6+xXZqb+aVZvIlkbQoU=
-
-Name: ik.class
-SHA1-Digest: hNhEWvpdyg76NYHDH5bjowPGau8=
-
-Name: misc/shadow.png
-SHA1-Digest: p9c/V0Zj89BYHB3blNNKk1CYe94=
-
-Name: ov.class
-SHA1-Digest: U6UmdVeoOtGDO2f3Y4Cg66m/YCE=
-
-Name: qd.class
-SHA1-Digest: 61y1MP826QugNKP7bWsfrdjSQ5s=
-
-Name: cj.class
-SHA1-Digest: OphrNLh+RK04E8oaYTEiGeFVWTc=
-
-Name: on.class
-SHA1-Digest: Roh4cJx148QR4Py0IC0mgKWdKSI=
-
-Name: com/jcraft/jorbis/Info.class
-SHA1-Digest: ZAUVNUqWAo1SyHmFMk38/9X35nY=
-
-Name: ji.class
-SHA1-Digest: pfyyCkS8rWy17WPyqyQLZd1mpbc=
-
-Name: ju.class
-SHA1-Digest: hM2PDhh0rGvdKK5cnD0h5Yo0CJI=
-
-Name: lz.class
-SHA1-Digest: zzWu22Ky83+8UZbMeheG+YWRY4I=
-
-Name: nf.class
-SHA1-Digest: IoRlvZb7SFb97piGjobixOLInQE=
-
-Name: com/jcraft/jorbis/Block.class
-SHA1-Digest: uGE76EiUfrn2Ci8svKULo2o4+s0=
-
-Name: com/jcraft/jorbis/InfoMode.class
-SHA1-Digest: s9YbOSF4DP0SNqYYnT2qOI4nSug=
-
-Name: misc/water.png
-SHA1-Digest: FwX5byX6u8nMwoX1GctTeqDYqaU=
-
-Name: og.class
-SHA1-Digest: U3o/ivGQK8lWYhOipu8dgw3GHno=
-
-Name: gg.class
-SHA1-Digest: ChEVKz9zZm08yybMxnKACJmv9wo=
-
-Name: cv.class
-SHA1-Digest: xWtU3qoubDji+ogJqx1hmRIk9rc=
-
-Name: com/jcraft/jorbis/Floor1$InfoFloor1.class
-SHA1-Digest: EiDTSJPpMTsdgUioKH2+WeX6Cz4=
-
-Name: armor/diamond_1.png
-SHA1-Digest: L5SqojOjnA0xvFc6xMHBluEuLLM=
-
-Name: gm.class
-SHA1-Digest: FRJ8wJ9yfHUDU+mwEXlc/svQ3Kw=
-
-Name: k.class
-SHA1-Digest: dQlEauwKjTVMlNvMaBLqw5H4DpI=
-
-Name: pz.class
-SHA1-Digest: mUC4W7NBtam9ZCIgytrG6EHj6to=
-
-Name: font/default.png
-SHA1-Digest: 358OWaSEnJuhOl7cgXV0UlpA5DU=
-
-Name: iq.class
-SHA1-Digest: IPNgh/E6nsSAe/ZvMHhMrAU3ltE=
-
-Name: kg.class
-SHA1-Digest: ya2Gb3sY2EfIym4BD9+fOl4AELY=
-
-Name: paulscode/sound/libraries/LibraryLWJGLOpenAL.class
-SHA1-Digest: 7KM/hvuwDUaMSyZ+HQR4HTpfrGc=
-
-Name: com/jcraft/jorbis/Residue0$InfoResidue0.class
-SHA1-Digest: Bbu+s9KHKZSY4NExdiE/ebq5cLs=
-
-Name: e.class
-SHA1-Digest: IfsjDCEODb8je+SQ0mSG0UTInl0=
-
-Name: bz.class
-SHA1-Digest: PQ7IpZCLK/dSYcEXe3Fi/p8cvUI=
-
-Name: oi.class
-SHA1-Digest: qqlgizVRT2CjzCMJyKgMyYFhL6c=
-
-Name: ax.class
-SHA1-Digest: +abaXrOC2izYkqx3O7BXO++yWjI=
-
-Name: ha.class
-SHA1-Digest: WGJiwjnH4kpeOJY2cnKlkHO9ltM=
-
-Name: mj.class
-SHA1-Digest: 1jUzYc2bb2xE8rGTKPr4DTSbdG8=
-
-Name: hk.class
-SHA1-Digest: 5OI4uA/Eq0E1RkJrB76h5DcdhiU=
-
-Name: kj.class
-SHA1-Digest: /s8wEj8M2trYcQidKUjaias+vJE=
-
-Name: qg.class
-SHA1-Digest: t4bCDlcRrATtoJyY7YJD2RIC6c0=
-
-Name: com/jcraft/jorbis/Floor1$LookFloor1.class
-SHA1-Digest: kHBYGWzAjZfTS3tkLH71q/KgYAM=
-
-Name: nt.class
-SHA1-Digest: WoiIndpzmpewIarAh5FFO+o759Y=
-
-Name: mob/ghast.png
-SHA1-Digest: uBMy1e+eXbf8+s3re+jjvCCuxAE=
-
-Name: eg.class
-SHA1-Digest: G6aWFyl6GJv9pOoEphYdy1jpRkE=
-
-Name: ar.class
-SHA1-Digest: EHu/uHmxb+vWMX/BMXUKEpFWHG4=
-
-Name: kn.class
-SHA1-Digest: 0/63/UJDy853+IctBbEVsIKfMNs=
-
-Name: bo.class
-SHA1-Digest: NpTVVVpjefhphTJCmzdwdcgk2Mw=
-
-Name: af.class
-SHA1-Digest: v0kGtfysOKvrwN0xi+hqvFNiCGE=
-
-Name: title/mojang.png
-SHA1-Digest: eEMeSzfy6TLcVnAnLjw8jPidCgI=
-
-Name: gy.class
-SHA1-Digest: vA2Oujx88GvAzJMHULpDMfoEI/c=
-
-Name: terrain.png
-SHA1-Digest: mNZUcZ71vlPJ5gAFYwA/gPOJI/0=
-
-Name: py.class
-SHA1-Digest: 0C8kvUoKO70aHihmQBe0ZT6EMGA=
-
-Name: of.class
-SHA1-Digest: 0BhEatv45N2NUTQGnh8iGLmWZlE=
-
-Name: ok.class
-SHA1-Digest: kI2QxB25uPLfvbSSeMdx1CYTo/0=
-
-Name: fh.class
-SHA1-Digest: s2tldh7268+CUQx+IoJR7IU+yME=
-
-Name: misc/foliagecolor.png
-SHA1-Digest: LaKC+OcbYY4Hsoiqg091TQ4iBys=
-
-Name: an.class
-SHA1-Digest: g8qiCMCMX8RHE8o+BO+ZLtwN+Vg=
-
-Name: aq.class
-SHA1-Digest: W4Sw+HyUG8vmU02WuaR1WnwTzBU=
-
-Name: hf.class
-SHA1-Digest: t/8U6FvqIb8qyIdUHNHcVbtYMHM=
-
-Name: kt.class
-SHA1-Digest: SNF8Z4Whi5lGYOGko8uwOFDEbUY=
-
-Name: ke.class
-SHA1-Digest: cb94f3OOAPyt9Otjw5GHS67+O8s=
-
-Name: armor/chain_2.png
-SHA1-Digest: GDUY6ASty73Gvh3Cq4ckUEGO92s=
-
-Name: gd.class
-SHA1-Digest: Thx17Vb2wiA6dzLb1OXOtfCdjyQ=
-
-Name: bp.class
-SHA1-Digest: EHoXEbwI1uvmesmpeoOYg0hF2ZU=
-
-Name: kz.class
-SHA1-Digest: JXMwneKxDlCe640W2e0WvfUIekA=
-
-Name: mob/pigman.png
-SHA1-Digest: yFg+hHcoAE6vOQpehEJHLcxsQsA=
-
-Name: hq.class
-SHA1-Digest: E/tumSMi1Xb2o9jMa45LD1B2+Eg=
-
-Name: ne.class
-SHA1-Digest: d14Fal+UtnT/TDIOv8ornGgYXso=
-
-Name: nx.class
-SHA1-Digest: BKRK2F9zH5yJNr1m3szreXDHXJQ=
-
-Name: mv.class
-SHA1-Digest: Ynd1AZt9284YFH1m8P5K/ujnc4g=
-
-Name: ll.class
-SHA1-Digest: djUxJxYlROKAbEBjtOSfjplo98A=
-
-Name: dy.class
-SHA1-Digest: mcpj81ZNqdMAw7XrOrwm8ufxNZM=
-
-Name: paulscode/sound/CommandThread.class
-SHA1-Digest: 4rWCd1hOxmeznznlRwQ1VxTXPbs=
-
-Name: ed.class
-SHA1-Digest: KiwyU9T0Icm7DnwqprKKnppNa1Q=
-
-Name: bf.class
-SHA1-Digest: 6EE1QPzFH0RQpFQeG8DN8Ux1+k0=
-
-Name: pu.class
-SHA1-Digest: af2n2tM7TOtvFA1kCisr2r70yPY=
-
-Name: gs.class
-SHA1-Digest: oCqBm5/Gshi7EjQWVOP4OwPensQ=
-
-Name: jt.class
-SHA1-Digest: 0d2l7+aZuHsCYGpI2tG+9SRaqHY=
-
-Name: lo.class
-SHA1-Digest: 6pbNXF7XjmvSN2maVdt1n2zMuqo=
-
-Name: bl.class
-SHA1-Digest: TxJgPRg+AYDM+TP/Aj/Q5/tmcKI=
-
-Name: nd.class
-SHA1-Digest: Va5oU8V3HR3J4sto+eloWkeA2f0=
-
-Name: armor/diamond_2.png
-SHA1-Digest: zDF6Lmh3LCkvuplelANAFdIv3wU=
-
-Name: armor/cloth_1.png
-SHA1-Digest: PmYk7pkZIfjG9ONzgOPUW8YSDLc=
-
-Name: px.class
-SHA1-Digest: 30ZUlulmtEEITVrUmzZqbM+h9w0=
-
-Name: lq.class
-SHA1-Digest: fZ5qKHNd1EK8YpR2zUnLxeoRv8w=
-
-Name: kw.class
-SHA1-Digest: E+50nnF1h8CryMYNfTknMQJzGIk=
-
-Name: kk.class
-SHA1-Digest: vWjRIwc7uZAQr3rR/GxKICz4OTs=
-
-Name: armor/iron_1.png
-SHA1-Digest: peIb5JP1Bk7Vq+0nLtCA0hI9xko=
-
-Name: pe.class
-SHA1-Digest: QgDE/vdCNI5mAh/vJ4AJ879xUIg=
-
-Name: ec.class
-SHA1-Digest: FueNV5Q9UDWEDfLcpEqUHi10VPc=
-
-Name: dq.class
-SHA1-Digest: gp/jidNu4QPD33ODKmnqX5ZmVB0=
-
-Name: je.class
-SHA1-Digest: YR9KrnfGqU1EaFX0pqSq/W5nNOQ=
-
-Name: com/jcraft/jogg/SyncState.class
-SHA1-Digest: uDr4GZdNxoEyehk8wk/wxNuegus=
-
-Name: ct.class
-SHA1-Digest: cB0W/V08gHyzk6W/WdTQB0gwn2A=
-
-Name: lu.class
-SHA1-Digest: /GSH/mTfd07iLd3IlmNjcbfNZ0k=
-
-Name: com/jcraft/jorbis/PsyLook.class
-SHA1-Digest: cB4xCWY+KBAofyMXtEHMbA9BeLY=
-
-Name: fm.class
-SHA1-Digest: tr0MhzYT0KTpL9iggVwkb3HulHs=
-
-Name: eo.class
-SHA1-Digest: V/WCZFIxRc3auRr4wr5LUG+rmjU=
-
-Name: cz.class
-SHA1-Digest: Vw5LsM9QUrErLTEJ5t3jpiHQ3BI=
-
-Name: mob/sheep_fur.png
-SHA1-Digest: 0hxIrQykC9FHG45VjF3Sn8t5HdI=
-
-Name: fu.class
-SHA1-Digest: +qSr6VlTEg3cIgPXKgBU/GPK2vo=
-
-Name: paulscode/sound/SimpleThread$1.class
-SHA1-Digest: /+PanQG6BsqL7x9LCDSUOqSessM=
-
-Name: ca.class
-SHA1-Digest: xK7ihXqUvPfDXQEUwOv4BP3uamw=
-
-Name: paulscode/sound/libraries/SourceLWJGLOpenAL.class
-SHA1-Digest: 7Xkqmd4w6i+EwoGwr6tGnanBDus=
-
-Name: ah.class
-SHA1-Digest: 55x4F7O4ka3m4e1Od11lGY987MY=
-
-Name: nq.class
-SHA1-Digest: 0FSf5PN6zUO0b/7t3zDvnUXhOg4=
-
-Name: ej.class
-SHA1-Digest: B47uUztqs43JOpmnwUgJa/yvhvI=
-
-Name: os.class
-SHA1-Digest: 9WVT0njB/wbEvWVPb78WYNsjdXo=
-
-Name: item/cart.png
-SHA1-Digest: 4ustDFtfnvImUi1JA9hLTov/ZfQ=
-
-Name: com/jcraft/jorbis/Floor1$EchstateFloor1.class
-SHA1-Digest: Pd7znkKb2945RpoirzjkFhDMLys=
-
-Name: pr.class
-SHA1-Digest: Y4bVuxN9n9KKX8xSwUhpWQGmcw4=
-
-Name: ni.class
-SHA1-Digest: HVeSJqrQA5HXqK9TCldftA9OktQ=
-
-Name: jz.class
-SHA1-Digest: GMwFCbvFZPYOsXI/mwLbqk0aGcg=
-
-Name: cq.class
-SHA1-Digest: I0KwdIRtYGjiRxhu6q9A7PDPLUM=
-
-Name: misc/grasscolor.png
-SHA1-Digest: rnNhx7HK50I7G9J3cSRNHBmV+DA=
-
-Name: com/jcraft/jorbis/Lsp.class
-SHA1-Digest: N82tIuz3QbdueW56lc8H6oTNtIM=
-
-Name: cf.class
-SHA1-Digest: 1O7y+Ko4eGmmqNgH/XC1HfYa2fI=
-
-Name: p.class
-SHA1-Digest: zkFzeKL1IgHYGmT8a6qzukqtsa4=
-
-Name: ii.class
-SHA1-Digest: GS0g3eAcLTKpMjgsLG3cYAMmsZs=
-
-Name: fn.class
-SHA1-Digest: hkrLIWxkDdcujIfw8C3UcejVJaI=
-
-Name: mi.class
-SHA1-Digest: Re3PIN6nmF+O75YT79kBkL7e+As=
-
-Name: qc.class
-SHA1-Digest: jzKtXwC8y31IpVLThYGlpR7LpIE=
-
-Name: gi.class
-SHA1-Digest: 2WXX8rKJ/+OnxCnyw+5N3W+0qJ8=
-
-Name: ic.class
-SHA1-Digest: PZ6QmInP7NUMa3Zz6una03Kye/0=
-
-Name: cg.class
-SHA1-Digest: OYebEKdFmogzUSHisfIwjgytyrU=
-
-Name: paulscode/sound/MidiChannel$FadeThread.class
-SHA1-Digest: XN4OON524HHHIugH5OW3rJS+BFA=
-
-Name: km.class
-SHA1-Digest: A5Nw2FDIEtAuVebkuE2WIBmAJ6E=
-
-Name: it.class
-SHA1-Digest: bDkrfWlEOjPRvGtdLEOo4k3jNe0=
-
-Name: bk.class
-SHA1-Digest: EIN3v9RSz5W0E5PPyDE6cES2qmg=
-
-Name: jc.class
-SHA1-Digest: 23VVwbPn3xGZNN+3kWSeRjaQ2QE=
-
-Name: paulscode/sound/codecs/CodecWav.class
-SHA1-Digest: VG68FfqhkArBwnRM+JaWnIhwcrY=
-
-Name: ek.class
-SHA1-Digest: H3xZrm+NyxkDGRlZ1FEv/ZgLAX4=
-
-Name: z.class
-SHA1-Digest: 9rAmxNmrO3JXQFLx+RUfNo7a+6w=
-
-Name: mob/cow.png
-SHA1-Digest: MAl8fVbz3qULSId2jriuXDvYDEI=
-
-Name: gui/crafting.png
-SHA1-Digest: 6oQ6loTGzZKw0NtAEMbTyN3moAA=
-
-Name: fz.class
-SHA1-Digest: jG1RQ7RWUiNmuUMtV8RvUQYMmE8=
-
-Name: x.class
-SHA1-Digest: fiU+uPoRYJ/9YyfriqKbFSEWb68=
-
-Name: jm.class
-SHA1-Digest: kiTSq3dfrfzoOKJVveRutVgO5ig=
-
-Name: ey.class
-SHA1-Digest: iyWR2h3RCakHCpiZrWq0oAVD8+0=
-
-Name: hd.class
-SHA1-Digest: /vWftxTqEMAoyVr317mubrYEOSw=
-
-Name: bs.class
-SHA1-Digest: GXNm3XDY2LeapGNUnlX50gxppCw=
-
-Name: jf.class
-SHA1-Digest: dEqp6Gqvy/3ElzkOhr0KZd6rgDg=
-
-Name: is.class
-SHA1-Digest: sMJssscjkEuqt9DUNAT4PLfeHMo=
-
-Name: fp.class
-SHA1-Digest: sjEUw1xE6nyU6EXD6wRO7tRSr5g=
-
-Name: mob/pig.png
-SHA1-Digest: poWWhKMOkkwBcgnP77dsGOoNQIU=
-
-Name: com/jcraft/jorbis/FuncMapping.class
-SHA1-Digest: TeDwwjonZNBbgD3vFgQG6Wtycjk=
-
-Name: dg.class
-SHA1-Digest: a+Gql8VAAe/pqL3yG/dYoWNyosI=
-
-Name: ap.class
-SHA1-Digest: LjwbDczz1jM0w9j16SMeFDDQ1k4=
-
-Name: pl.class
-SHA1-Digest: nJxdy2JuxiKE+b8LbCNa3WGox90=
-
-Name: com/jcraft/jogg/Page.class
-SHA1-Digest: iDyfCZ4x5IUBzDmjk0k55MNuvR4=
-
-Name: jn.class
-SHA1-Digest: MsIc41bqxRzZnlYQYqcPsQpRM2c=
-
-Name: eb.class
-SHA1-Digest: Fb3ScTTWG/MtJrkov8QD05Xh8D4=
-
-Name: nv.class
-SHA1-Digest: 2xyt4jxAcmQPjyWBM8UI+UD4aXM=
-
-Name: op.class
-SHA1-Digest: 38PHbrdFFwSpMYPxmjpZOvUF63s=
-
-Name: lt.class
-SHA1-Digest: p0RhHm7mQh7am0YuJk9vl/UuySk=
-
-Name: cm.class
-SHA1-Digest: 0b7y0M0bpkqxqHQF18xy9/dx2uE=
-
-Name: lp.class
-SHA1-Digest: jmjrCm0u34OMl4PkGJ9jrRPM+vs=
-
-Name: lx.class
-SHA1-Digest: Jq3ttuXRcGi2aHCK+VkRVbBMRdI=
-
-Name: lk.class
-SHA1-Digest: Hwy/YW61ZAgzogVR+Sb4o1sbfGg=
-
-Name: jj.class
-SHA1-Digest: 4O/c33sBN8rq86R4tPJ5TzdoUtM=
-
-Name: ng.class
-SHA1-Digest: yl0WiC1kMfESxVGe7EXu6MJNOUo=
-
-Name: oa.class
-SHA1-Digest: qYm8RyZWffIVLHtfH06Z+cVyKCc=
-
-Name: kc.class
-SHA1-Digest: Q7Wew/Jz2Ghq2pdxvCetesWJ8xs=
-
-Name: oj.class
-SHA1-Digest: s/NUy5vHXke9vPikjEj//YEcp9I=
-
-Name: oy.class
-SHA1-Digest: HzJzl8ibkL0RBkCxWfgSxb9nxs0=
-
-Name: title/splashes.txt
-SHA1-Digest: mTUHUhKmveRGkO3x1DWFoppRK20=
-
-Name: mob/skeleton.png
-SHA1-Digest: BZISu5+MOba+0+fs0puOIhbxsW0=
-
-Name: pb.class
-SHA1-Digest: fRxvnkjGsFiWuXibZW78xctU+yc=
-
-Name: gui/items.png
-SHA1-Digest: W8NLXDn7r2p0DItmL6jPZGJuxGo=
-
-Name: qi.class
-SHA1-Digest: ZMOFeEvd3TTPVhSxTJFwGAU60BI=
-
-Name: ms.class
-SHA1-Digest: keey9VtUYYMgJMQH6m35xH4v/sE=
-
-Name: qm.class
-SHA1-Digest: Fzd+Nlh/4XpGdOSKotOFZRfOPR8=
-
-Name: com/jcraft/jorbis/DspState.class
-SHA1-Digest: K6AWoe2wm2Dmfijpg7/XNsJowzs=
-
-Name: armor/gold_1.png
-SHA1-Digest: S9K6i5/rhI3ymFbdKOssP0NcV6I=
-
-Name: nk.class
-SHA1-Digest: +zAxyb8VHIvzJz58XzPdF/AZTzc=
-
-Name: dw.class
-SHA1-Digest: hesWIikIPXI2i0I0P2og/m3znAM=
-
-Name: pd.class
-SHA1-Digest: Dhkfrrn3DLP5ekPoIHUYxMQ2pKc=
-
-Name: if.class
-SHA1-Digest: 2s12O80sc71bc7awR+zR9wVzqeo=
-
-Name: mob/sheep.png
-SHA1-Digest: 1bEEzD9yzD9xHJ0krm/HbNz9220=
-
-Name: gui/furnace.png
-SHA1-Digest: jNksPrGHasTvy/PuhUjuc12uwL4=
-
-Name: com/jcraft/jogg/Packet.class
-SHA1-Digest: eFmKa3f5bt7e7OtaYxhcCBNFupU=
-
-Name: jr.class
-SHA1-Digest: 80dAvPFJmWowd/GDdWPbWxHGBO0=
-
-Name: eh.class
-SHA1-Digest: vLg3hG5C4duhFNrh50qBOi0VO9s=
-
-Name: nj.class
-SHA1-Digest: w//scQhIyd7za8OPFnG81w+c50w=
-
-Name: ps.class
-SHA1-Digest: bms6ETC/qhOODaI+g20l9yDZ9p8=
-
-Name: com/jcraft/jogg/StreamState.class
-SHA1-Digest: EcewTOdOrfLUalY1MKLqvpKLnto=
-
-Name: com/jcraft/jorbis/Mdct.class
-SHA1-Digest: i01FbGtrTyDdK/R+EJyI+wLbTj8=
-
-Name: id.class
-SHA1-Digest: Mfqr1Z1eiPXi6Q3Pu0KYCa/3yuA=
-
-Name: ev.class
-SHA1-Digest: 8dkv3bYPaU5rl1ycWqf+zgDuKms=
-
-Name: item/door.png
-SHA1-Digest: dexEaxuUqFi2jZc+eJhHj8YS0F8=
-
-Name: jo.class
-SHA1-Digest: EcdrGqT8MTc1cYMHus8JK4WbhVY=
-
-Name: au.class
-SHA1-Digest: kO/UmhaaBpl+UPTZqH8XRfabqdI=
-
-Name: h.class
-SHA1-Digest: r5j2o1AhNkHVj6m8rwFxfdcVvHE=
-
-Name: qa.class
-SHA1-Digest: WgKD1WxPumuhcjGBUATrz4cg0o0=
-
-Name: el.class
-SHA1-Digest: 8R224OE71LORLIVdXXDfswAiJxc=
-
-Name: du.class
-SHA1-Digest: +2ILD9nv1rFDFjOj/dfI0/2ZRTA=
-
-Name: mk.class
-SHA1-Digest: cjjl2GcKE859Q7Jue9HyXpl4UNM=
-
-Name: paulscode/sound/SoundSystemConfig.class
-SHA1-Digest: n62ZP7zwSmNzrLpXdmkib5CW3a4=
-
-Name: es.class
-SHA1-Digest: r69oK5X5DGYxizsuJ3dv9h/fALo=
-
-Name: mg.class
-SHA1-Digest: 7kNPRMUVcimzsSOijLHlp3+7jqI=
-
-Name: com/jcraft/jorbis/FuncFloor.class
-SHA1-Digest: M12xq16JrjqQORSO5RS7yUZd2qE=
-
-Name: com/jcraft/jorbis/Floor0$EchstateFloor0.class
-SHA1-Digest: QntLuK+4Kvha0MI4ju+dgKp/MNU=
-
-Name: gr.class
-SHA1-Digest: GiEUHk5MQdisj41b8piMnngJhCQ=
-
-Name: com/jcraft/jorbis/Mapping0$LookMapping0.class
-SHA1-Digest: w4Fw8KeIFTGIeUhOmpsnvvGYg+o=
-
-Name: df.class
-SHA1-Digest: /G/doOJj6aXICl9+thwk6xpCG4E=
-
-Name: al.class
-SHA1-Digest: Sgz73juotoR0UOddGm4EvGYON9g=
-
-Name: hh.class
-SHA1-Digest: dvPutxeEEO/6lBrPJKqbm29HnU0=
-
-Name: nb.class
-SHA1-Digest: oo+0KoHgTEVs81K3eO6DnoihBdM=
-
-Name: nu.class
-SHA1-Digest: dmNyfPRbYfm2S6J04ZlmWNVyo14=
-
-Name: i.class
-SHA1-Digest: 9Qj0n29ATcYg2x4tndaTBSBlMz0=
-
-Name: ab.class
-SHA1-Digest: +T5hQdpcpYFCwPIr90A2/9asc74=
-
-Name: do.class
-SHA1-Digest: t7nxdNJSFgCZrmoEuWhmu6iqCWA=
-
-Name: dk.class
-SHA1-Digest: iv3X7oq4wPR2a9A3SOdyQIC5tSM=
-
-Name: gui/unknown_pack.png
-SHA1-Digest: VaC0z78yWNZwMSbzn/sTznLiO4c=
-
-Name: environment/snow.png
-SHA1-Digest: encK6dCSWJE5GahHWXQsqP2lhSs=
-
-Name: dx.class
-SHA1-Digest: 7f0mv2PiyEidv5LA7i9VaQX/NnI=
-
-Name: paulscode/sound/SoundSystemException.class
-SHA1-Digest: VN6UAiwpKeD5ZLqTLovDqk04vmY=
-
-Name: ks.class
-SHA1-Digest: fuZ5asNKuCVbnlAqpOW2p6kVatQ=
-
-Name: ou.class
-SHA1-Digest: Qlf/d/irDDIU9v9bFjWr0HGnjeg=
-
-Name: da.class
-SHA1-Digest: xIN9pwplhY2lmOCjASI50LOJiws=
-
-Name: cw.class
-SHA1-Digest: yp2/GCKLkfIMTrSrFdAERRIRQ2s=
-
-Name: u.class
-SHA1-Digest: hViZBKIAk9HIrnvRnlChOB7SH9g=
-
-Name: pf.class
-SHA1-Digest: R2cROYNyaOmTX3VvOaxxwRbfVkk=
-
-Name: fj.class
-SHA1-Digest: CsLyoWG1DodkhlOv3EIhsvZEhDw=
-
-Name: kv.class
-SHA1-Digest: WtTZN4dLBT+eIZHSAAlvAdgnMz4=
-
-Name: com/jcraft/jorbis/FuncTime.class
-SHA1-Digest: h6MEG4T5k9koW54dkMVQ2Q+PYG0=
-
-Name: ez.class
-SHA1-Digest: eW7NTie9NlD0MPBDYLuu9rrZF1M=
-
-Name: oo.class
-SHA1-Digest: pMSlpXrkdHESN/fpt+yw9SQ4bRI=
-
-Name: dm.class
-SHA1-Digest: 1zyDLPHKjMVGICJ/9GI511TcRYc=
-
-Name: ka.class
-SHA1-Digest: E7qR3+kMfObrBhHrcQlKHcfxniY=
-
-Name: av.class
-SHA1-Digest: Z5mzwq0CEBz0zonfQzs+pooQYK0=
-
-Name: eq.class
-SHA1-Digest: tReHHff6/TIzXp4F2SeIzO/viao=
-
-Name: js.class
-SHA1-Digest: aWiAepKdfU1HpyURGXJK7cQGSzg=
-
-Name: hx.class
-SHA1-Digest: vbHEAx7VB3yFPhfkL4xN1UrefLk=
-
-Name: hg.class
-SHA1-Digest: xYTZBn78Jkrfwse0o5atP7wy9oQ=
-
-Name: ht.class
-SHA1-Digest: b8L6aR7w78jL0FBBwfRWbGD3cok=
-
-Name: ag.class
-SHA1-Digest: mgeRypGz/yuleeS05zP5kZBOjkA=
-
-Name: paulscode/sound/StreamThread.class
-SHA1-Digest: 8vqesEOj6LaK4NlEP2L9+dDtrSw=
-
-Name: ie.class
-SHA1-Digest: iOuFMNQaaXxmak0XikeackNyR14=
-
-Name: y.class
-SHA1-Digest: WMrBPSX07vVDCtfk950+QpNYEE8=
-
-Name: no.class
-SHA1-Digest: lYWzdkbXZbJdKjRm1nBhhQbs9S4=
-
-Name: item/sign.png
-SHA1-Digest: iJrTBIheTr2xSk2adBLc2pWhWwY=
-
-Name: nr.class
-SHA1-Digest: 90PR7T2JVWs0oTn04onYas+TMlU=
-
-Name: ak.class
-SHA1-Digest: WepwcANTfwR8AymCghOWvwbqRtI=
-
-Name: fw.class
-SHA1-Digest: buVGf4oHsgaXcY6PIG3m1CajKho=
-
-Name: paulscode/sound/codecs/CodecJOrbis.class
-SHA1-Digest: zcqd8ulmDiUgL0ukIMoO5MreLn8=
-
-Name: terrain/sun.png
-SHA1-Digest: SFEIBZ7TQXcQA2K+UWDpwNq4tBY=
-
-Name: environment/rain.png
-SHA1-Digest: WWDBOIhcsdFffYqsXVFzf71YY8k=
-
-Name: armor/gold_2.png
-SHA1-Digest: l6gONukjfJqIUBf+F1JpqtQ+B14=
-
-Name: net/minecraft/isom/IsomPreviewApplet.class
-SHA1-Digest: 34vCjl8mbLNoDr8oGdXNlx+7cQA=
-
-Name: hi.class
-SHA1-Digest: hwyTh1fDxik/bqmNnPJKtr7OfNU=
-
-Name: armor/iron_2.png
-SHA1-Digest: ysALX9siRw4eb2Da4IAq0XO8bj8=
-
-Name: iy.class
-SHA1-Digest: 4/W6Mu/Zrkw0BWPx1VHT/BBYWes=
-
-Name: item/boat.png
-SHA1-Digest: Jqo2ngeHwoEv6FftizHURBE9upE=
-
-Name: co.class
-SHA1-Digest: F5Bb9QvdqJWXr5dAiocNMKmkTHE=
-
-Name: qj.class
-SHA1-Digest: NiPzgJtuIuw5Ir/nO08Cp5ErIYk=
-
-Name: lf.class
-SHA1-Digest: uQkIQS7lLYcA3q1tHQLf37csugc=
-
-Name: bi.class
-SHA1-Digest: F4Hw+Fn+Gix+KOjVW8Bak0ajGCQ=
-
-Name: nh.class
-SHA1-Digest: k0QT9iKGN79TdIyOIEwbJhVYuGA=
-
-Name: mw.class
-SHA1-Digest: tQ3iO7Hl20htjbxUP4uIY/3AX1k=
-
-Name: gf.class
-SHA1-Digest: URlPHCIvxM1YPWVW7SgJlthPeAg=
-
-Name: hz.class
-SHA1-Digest: ZkZppevo3o7bvifFW82rd9MHJMQ=
-
-Name: ia.class
-SHA1-Digest: GGd6/IZVr8tcT5l66YJDRgu9JVI=
-
-Name: o.class
-SHA1-Digest: o/cCaxpkhsQMcq6nEhsnf58bNvs=
-
-Name: hl.class
-SHA1-Digest: nyNLAU6FAuQrk+fAJbB9JAFdKx4=
-
-Name: om.class
-SHA1-Digest: ytPDwqL+2hDzgH0tcJTH7774p48=
-
-Name: io.class
-SHA1-Digest: PxKgj4TWPBYkni3vzp+cHvJ+49I=
-
-Name: or.class
-SHA1-Digest: BDAM1bSJ/N3PyBt/eLGGSy0+oeM=
-
-Name: paulscode/sound/Channel.class
-SHA1-Digest: JODeIPAjSA9X5kE7npwrjfox4JQ=
-
-Name: ob.class
-SHA1-Digest: /AKOjKhzumsSgV0suvByzK6kBfw=
-
-Name: mx.class
-SHA1-Digest: PsCbq7B85bkpv/ZYNV0jjfVqxNI=
-
-Name: mr.class
-SHA1-Digest: GUISBEO8Jv5dPtwO1JmgpDBEopQ=
-
-Name: cd.class
-SHA1-Digest: o1ZJiiFoHWRYKnmII1CkeqVJv58=
-
-Name: am.class
-SHA1-Digest: MQ2AP7V6k6xBdtQInvAFrr1VINE=
-
-Name: mh.class
-SHA1-Digest: WqTTq+TZQop4LM0dz83MgapBR8s=
-
-Name: md.class
-SHA1-Digest: R9UHwLiv0iENOh+GADeUm+ix1mg=
-
-Name: fe.class
-SHA1-Digest: nFKE1nMa4PJxptVWNLb1II/UE3o=
-
-Name: jx.class
-SHA1-Digest: O8lrDK4h6IFZ1uSGe/mcrp3hedk=
-
-Name: jd.class
-SHA1-Digest: UJD8cYaqjD1nW/1WJm29dDEBXWc=
-
-Name: ea.class
-SHA1-Digest: 1LeX5OnTqvnlrhfoyQI+OYyHZgw=
-
-Name: ox.class
-SHA1-Digest: x92MfhhfPWvu7eL+/yClnIhU1ME=
-
-Name: pk.class
-SHA1-Digest: rgS9n1FscetCy11u0lBbKP9xUI0=
-
-Name: mo.class
-SHA1-Digest: mja/afQNr/smYemRIg0Yhi3lphc=
-
-Name: hv.class
-SHA1-Digest: F4IkQV3HnR+J1J6VCIJg45b38aw=
-
-Name: cx.class
-SHA1-Digest: QeD4vHon+rjpPlFOJlYVNvJ7IJA=
-
-Name: jb.class
-SHA1-Digest: f3dji6yKBOBbv48UCJxdCTxkYgo=
-
-Name: paulscode/sound/SoundBuffer.class
-SHA1-Digest: M7gcO17vNINPkbN00TFOSCfSlrA=
-
-Name: com/jcraft/jorbis/Lpc.class
-SHA1-Digest: YXcyS4Y3Pf5jN5d/mFH5D94q3oA=
-
-Name: my.class
-SHA1-Digest: vttZ+evdIXUFdxraMVVSBzDULuA=
-
-Name: fq.class
-SHA1-Digest: G0r78xA/zB/i1hXQ9q1dtvOz6nY=
-
-Name: gc.class
-SHA1-Digest: 2/QQWT7WJr3fD+QR5QLRblfkqB8=
-
-Name: pv.class
-SHA1-Digest: 17KH19tJMsYamJ6CEI4XR3qxjCo=
-
-Name: by.class
-SHA1-Digest: R8gmXRawgX0g2rKdplQ9LR6hM/o=
-
-Name: mt.class
-SHA1-Digest: CzBo5dGslshaRtwYNVS9cUP6EWM=
-
-Name: me.class
-SHA1-Digest: /Dx7+nq/BLfn2csvrFdp0O7pF/g=
-
-Name: ij.class
-SHA1-Digest: SAzM9ooVj/9nZEh3E/VG53RZ334=
-
-Name: com/jcraft/jorbis/CodeBook$DecodeAux.class
-SHA1-Digest: 1cUuI6ciXo0b2C9AdaZ5qd4J/vo=
-
-Name: fa.class
-SHA1-Digest: excB+C5UBHtUWJWBwyUdTTSlTCA=
-
-Name: com/jcraft/jorbis/Floor0.class
-SHA1-Digest: KAjuFAFXvvcUyjpOMoUdDgk0OOU=
-
-Name: ku.class
-SHA1-Digest: Jp61mVla0tQnFB3UVF6QkwZi9XI=
-
-Name: kh.class
-SHA1-Digest: Akth3h25BA5h2LLugiR/bVZF54w=
-
-Name: pt.class
-SHA1-Digest: N9OMF7504rDoPRsInoq6VedHXx8=
-
-Name: nw.class
-SHA1-Digest: C2499b9DLIRJhTpnT514ZGDvT3Y=
-
-Name: aw.class
-SHA1-Digest: gEJbQyr9OBi5NH83R/FLIR5KLwQ=
-
-Name: paulscode/sound/SoundSystemConfig$Codec.class
-SHA1-Digest: fU91ZZ0gIEEDo0952AU9BnjtAac=
-
-Name: mn.class
-SHA1-Digest: wuByrAwnFwVp7f6tb6LSzZtQeAY=
-
-Name: ac.class
-SHA1-Digest: 3gO/Ia+n7VrRi4iwSIIZJ6Io9eU=
-
diff --git a/resources/armor/chain_1.png b/resources/armor/chain_1.png
deleted file mode 100644
index 3632af5..0000000
Binary files a/resources/armor/chain_1.png and /dev/null differ
diff --git a/resources/armor/chain_2.png b/resources/armor/chain_2.png
deleted file mode 100644
index 330425b..0000000
Binary files a/resources/armor/chain_2.png and /dev/null differ
diff --git a/resources/armor/cloth_1.png b/resources/armor/cloth_1.png
deleted file mode 100644
index f3cf4aa..0000000
Binary files a/resources/armor/cloth_1.png and /dev/null differ
diff --git a/resources/armor/cloth_2.png b/resources/armor/cloth_2.png
deleted file mode 100644
index 15fb908..0000000
Binary files a/resources/armor/cloth_2.png and /dev/null differ
diff --git a/resources/armor/diamond_1.png b/resources/armor/diamond_1.png
deleted file mode 100644
index 339da65..0000000
Binary files a/resources/armor/diamond_1.png and /dev/null differ
diff --git a/resources/armor/diamond_2.png b/resources/armor/diamond_2.png
deleted file mode 100644
index c220c12..0000000
Binary files a/resources/armor/diamond_2.png and /dev/null differ
diff --git a/resources/armor/gold_1.png b/resources/armor/gold_1.png
deleted file mode 100644
index 885f309..0000000
Binary files a/resources/armor/gold_1.png and /dev/null differ
diff --git a/resources/armor/gold_2.png b/resources/armor/gold_2.png
deleted file mode 100644
index 9d1ea3b..0000000
Binary files a/resources/armor/gold_2.png and /dev/null differ
diff --git a/resources/armor/iron_1.png b/resources/armor/iron_1.png
deleted file mode 100644
index 374ab07..0000000
Binary files a/resources/armor/iron_1.png and /dev/null differ
diff --git a/resources/armor/iron_2.png b/resources/armor/iron_2.png
deleted file mode 100644
index 53af4f4..0000000
Binary files a/resources/armor/iron_2.png and /dev/null differ
diff --git a/resources/art/kz.png b/resources/art/kz.png
deleted file mode 100644
index dc6bd6b..0000000
Binary files a/resources/art/kz.png and /dev/null differ
diff --git a/resources/environment/clouds.png b/resources/environment/clouds.png
deleted file mode 100644
index b4a78c2..0000000
Binary files a/resources/environment/clouds.png and /dev/null differ
diff --git a/resources/environment/rain.png b/resources/environment/rain.png
deleted file mode 100644
index e9dc16c..0000000
Binary files a/resources/environment/rain.png and /dev/null differ
diff --git a/resources/environment/snow.png b/resources/environment/snow.png
deleted file mode 100644
index 84417c5..0000000
Binary files a/resources/environment/snow.png and /dev/null differ
diff --git a/resources/font/default.png b/resources/font/default.png
deleted file mode 100644
index fb7686e..0000000
Binary files a/resources/font/default.png and /dev/null differ
diff --git a/resources/glsl/core.glsl b/resources/glsl/core.glsl
deleted file mode 100644
index 9f11465..0000000
--- a/resources/glsl/core.glsl
+++ /dev/null
@@ -1,222 +0,0 @@
-
-// copyright (c) 2020-2023 lax1dude
-
-#line 4
-
-precision highp int;
-precision highp sampler2D;
-precision highp float;
-
-uniform mat4 matrix_m;
-uniform mat4 matrix_p;
-uniform mat4 matrix_t;
-
-#ifdef CC_VERT
-
-in vec3 a_position;
-#ifdef CC_a_texture0
-in vec2 a_texture0;
-#endif
-#ifdef CC_a_color
-in vec4 a_color;
-#endif
-#ifdef CC_a_normal
-in vec4 a_normal;
-#endif
-#ifdef CC_a_texture1
-in vec2 a_texture1;
-#endif
-
-#ifdef CC_TEX_GEN_STRQ
-out vec4 v_object_pos;
-#endif
-out vec4 v_position;
-#ifdef CC_a_color
-out vec4 v_color;
-#endif
-#ifdef CC_a_normal
-out vec4 v_normal;
-#endif
-#ifdef CC_a_texture0
-out vec2 v_texture0;
-#endif
-#ifdef CC_a_texture1
-out vec2 v_texture1;
-#endif
-
-#endif
-
-
-#ifdef CC_VERT
-
-void main(){
- vec4 pos = matrix_m * vec4(a_position, 1.0);
- v_position = pos;
-#ifdef CC_TEX_GEN_STRQ
- v_object_pos = vec4(a_position, 1.0);
-#endif
-#ifdef CC_a_color
- v_color = a_color;
-#endif
-#ifdef CC_a_normal
- v_normal = a_normal;
-#endif
-#ifdef CC_a_texture0
- v_texture0 = a_texture0;
-#endif
-#ifdef CC_a_texture1
- v_texture1 = a_texture1;
-#endif
- gl_Position = matrix_p * pos;
-}
-
-#endif
-
-#ifdef CC_FRAG
-
-uniform sampler2D tex0;
-uniform sampler2D tex1;
-uniform vec2 texCoordV0;
-uniform vec2 texCoordV1;
-#ifdef CC_lighting
-uniform vec3 light0Pos;
-uniform vec3 light1Pos;
-uniform vec3 normalUniform;
-#endif
-#ifdef CC_fog
-uniform vec4 fogColor;
-//X = uniform float fogMode;
-//Y = uniform float fogStart;
-//Z = uniform float fogEnd - fogStart;
-//W = uniform float fogDensity;
-uniform vec4 fogParam;
-#endif
-uniform vec4 colorUniform;
-#ifdef CC_alphatest
-uniform float alphaTestF;
-#endif
-#ifdef CC_TEX_GEN_STRQ
-//uniform int textureGenS_M;
-//uniform int textureGenT_M;
-//uniform int textureGenR_M;
-//uniform int textureGenQ_M;
-uniform ivec4 textureGen_M;
-uniform vec4 textureGenS_V;
-uniform vec4 textureGenT_V;
-uniform vec4 textureGenR_V;
-uniform vec4 textureGenQ_V;
-#endif
-#ifdef CC_patch_anisotropic
-uniform vec2 anisotropic_fix;
-#endif
-
-#ifdef CC_TEX_GEN_STRQ
-in vec4 v_object_pos;
-#endif
-in vec4 v_position;
-#ifdef CC_a_color
-in vec4 v_color;
-#endif
-#ifdef CC_a_normal
-in vec4 v_normal;
-#endif
-#ifdef CC_a_texture0
-in vec2 v_texture0;
-#endif
-#ifdef CC_a_texture1
-in vec2 v_texture1;
-#endif
-
-out vec4 fragColor;
-
-#define TEX_MAT3x2(mat4In) mat3x2(mat4In[0].xy,mat4In[1].xy,mat4In[3].xy)
-#define TEX_MAT4x3(mat4In) mat4x3(mat4In[0].xyw,mat4In[1].xyw,mat4In[2].xyw,mat4In[3].xyw)
-
-void main(){
-#ifdef CC_a_color
- vec4 color = colorUniform * v_color;
-#else
- vec4 color = colorUniform;
-#endif
-
-#ifdef CC_TEX_GEN_STRQ
- vec4 texSrc[2];
- texSrc[0] = v_object_pos;
- texSrc[1] = v_position;
-
- vec4 texPos;
- texPos.x = dot(texSrc[textureGen_M.x], textureGenS_V);
- texPos.y = dot(texSrc[textureGen_M.y], textureGenT_V);
- texPos.z = dot(texSrc[textureGen_M.z], textureGenR_V);
- texPos.w = dot(texSrc[textureGen_M.w], textureGenQ_V);
- texPos.xyz = TEX_MAT4x3(matrix_t) * texPos;
- color *= texture(tex0, texPos.xy / texPos.z).bgra;
-#ifdef CC_alphatest
- if(color.a < alphaTestF){
- discard;
- }
-#endif
-#else
-#ifdef CC_unit0
-#ifdef CC_a_texture0
-
-#ifdef CC_patch_anisotropic
- vec2 uv = TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0);
-
- /* https://bugs.chromium.org/p/angleproject/issues/detail?id=4994 */
- uv = ((uv * anisotropic_fix) - fract(uv * anisotropic_fix) + 0.5) / anisotropic_fix;
-
- vec4 texColor = texture(tex0, uv);
-#else
- vec4 texColor = texture(tex0, TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0));
-#endif
-
-#else
- vec4 texColor = texture(tex0, TEX_MAT3x2(matrix_t) * vec3(texCoordV0, 1.0));
-#endif
-
-#ifdef CC_swap_rb
- color *= texColor.rgba;
-#else
- color *= texColor.bgra;
-#endif
-
-#endif
-
-#ifdef CC_alphatest
- if(color.a < alphaTestF){
- discard;
- }
-#endif
-
-#ifdef CC_unit1
-#ifdef CC_a_texture1
- color.rgb *= texture(tex1, (v_texture1 + 8.0) * 0.00390625).bgr;
-#else
- color.rgb *= texture(tex1, (texCoordV1 + 8.0) * 0.00390625).bgr;
-#endif
-#endif
-#endif
-
-#ifdef CC_lighting
-#ifdef CC_a_normal
- vec3 normal = ((v_normal.xyz - 0.5) * 2.0);
-#else
- vec3 normal = normalUniform;
-#endif
- normal = normalize(mat3(matrix_m) * normal);
- float ins = max(dot(normal, -light0Pos), 0.0) + max(dot(normal, -light1Pos), 0.0);
- color.rgb *= min((0.4 + ins * 0.6), 1.0);
-#endif
-
-#ifdef CC_fog
- float dist = sqrt(dot(v_position, v_position));
- float i = fogParam.x == 1.0 ? (dist - fogParam.y) / fogParam.z : 1.0 - exp(-fogParam.w * dist);
- color.rgb = mix(color.rgb, fogColor.xyz, clamp(i, 0.0, 1.0) * fogColor.a);
-#endif
-
- fragColor = color;
-}
-
-#endif
-
diff --git a/resources/gui/background.png b/resources/gui/background.png
deleted file mode 100644
index b29e009..0000000
Binary files a/resources/gui/background.png and /dev/null differ
diff --git a/resources/gui/container.png b/resources/gui/container.png
deleted file mode 100644
index bd1d383..0000000
Binary files a/resources/gui/container.png and /dev/null differ
diff --git a/resources/gui/crafting.png b/resources/gui/crafting.png
deleted file mode 100644
index da83118..0000000
Binary files a/resources/gui/crafting.png and /dev/null differ
diff --git a/resources/gui/furnace.png b/resources/gui/furnace.png
deleted file mode 100644
index a5834e1..0000000
Binary files a/resources/gui/furnace.png and /dev/null differ
diff --git a/resources/gui/gui.png b/resources/gui/gui.png
deleted file mode 100644
index 81af329..0000000
Binary files a/resources/gui/gui.png and /dev/null differ
diff --git a/resources/gui/icons.png b/resources/gui/icons.png
deleted file mode 100644
index 73fe9bb..0000000
Binary files a/resources/gui/icons.png and /dev/null differ
diff --git a/resources/gui/inventory.png b/resources/gui/inventory.png
deleted file mode 100644
index 0b5f291..0000000
Binary files a/resources/gui/inventory.png and /dev/null differ
diff --git a/resources/gui/items.png b/resources/gui/items.png
deleted file mode 100644
index ea7d4f7..0000000
Binary files a/resources/gui/items.png and /dev/null differ
diff --git a/resources/gui/logo.png b/resources/gui/logo.png
deleted file mode 100644
index b7c2879..0000000
Binary files a/resources/gui/logo.png and /dev/null differ
diff --git a/resources/gui/unknown_pack.png b/resources/gui/unknown_pack.png
deleted file mode 100644
index 3a45a90..0000000
Binary files a/resources/gui/unknown_pack.png and /dev/null differ
diff --git a/resources/item/arrows.png b/resources/item/arrows.png
deleted file mode 100644
index 75c5828..0000000
Binary files a/resources/item/arrows.png and /dev/null differ
diff --git a/resources/item/boat.png b/resources/item/boat.png
deleted file mode 100644
index 132a0f7..0000000
Binary files a/resources/item/boat.png and /dev/null differ
diff --git a/resources/item/cart.png b/resources/item/cart.png
deleted file mode 100644
index 32af68e..0000000
Binary files a/resources/item/cart.png and /dev/null differ
diff --git a/resources/item/door.png b/resources/item/door.png
deleted file mode 100644
index 52df2d9..0000000
Binary files a/resources/item/door.png and /dev/null differ
diff --git a/resources/item/sign.png b/resources/item/sign.png
deleted file mode 100644
index e829472..0000000
Binary files a/resources/item/sign.png and /dev/null differ
diff --git a/resources/misc/dial.png b/resources/misc/dial.png
deleted file mode 100644
index 140e7e3..0000000
Binary files a/resources/misc/dial.png and /dev/null differ
diff --git a/resources/misc/foliagecolor.png b/resources/misc/foliagecolor.png
deleted file mode 100644
index a98e378..0000000
Binary files a/resources/misc/foliagecolor.png and /dev/null differ
diff --git a/resources/misc/grasscolor.png b/resources/misc/grasscolor.png
deleted file mode 100644
index a6d9c20..0000000
Binary files a/resources/misc/grasscolor.png and /dev/null differ
diff --git a/resources/misc/pumpkinblur.png b/resources/misc/pumpkinblur.png
deleted file mode 100644
index c6e2ffc..0000000
Binary files a/resources/misc/pumpkinblur.png and /dev/null differ
diff --git a/resources/misc/shadow.png b/resources/misc/shadow.png
deleted file mode 100644
index 06d999b..0000000
Binary files a/resources/misc/shadow.png and /dev/null differ
diff --git a/resources/misc/vignette.png b/resources/misc/vignette.png
deleted file mode 100644
index f236acb..0000000
Binary files a/resources/misc/vignette.png and /dev/null differ
diff --git a/resources/misc/water.png b/resources/misc/water.png
deleted file mode 100644
index 8b92f9b..0000000
Binary files a/resources/misc/water.png and /dev/null differ
diff --git a/resources/mob/char.png b/resources/mob/char.png
deleted file mode 100644
index 7cfa08a..0000000
Binary files a/resources/mob/char.png and /dev/null differ
diff --git a/resources/mob/chicken.png b/resources/mob/chicken.png
deleted file mode 100644
index d481293..0000000
Binary files a/resources/mob/chicken.png and /dev/null differ
diff --git a/resources/mob/cow.png b/resources/mob/cow.png
deleted file mode 100644
index 2080ebc..0000000
Binary files a/resources/mob/cow.png and /dev/null differ
diff --git a/resources/mob/creeper.png b/resources/mob/creeper.png
deleted file mode 100644
index e0a5e0a..0000000
Binary files a/resources/mob/creeper.png and /dev/null differ
diff --git a/resources/mob/ghast.png b/resources/mob/ghast.png
deleted file mode 100644
index e83a60d..0000000
Binary files a/resources/mob/ghast.png and /dev/null differ
diff --git a/resources/mob/ghast_fire.png b/resources/mob/ghast_fire.png
deleted file mode 100644
index fff9718..0000000
Binary files a/resources/mob/ghast_fire.png and /dev/null differ
diff --git a/resources/mob/pig.png b/resources/mob/pig.png
deleted file mode 100644
index 5c1efc2..0000000
Binary files a/resources/mob/pig.png and /dev/null differ
diff --git a/resources/mob/pigman.png b/resources/mob/pigman.png
deleted file mode 100644
index c900b36..0000000
Binary files a/resources/mob/pigman.png and /dev/null differ
diff --git a/resources/mob/pigzombie.png b/resources/mob/pigzombie.png
deleted file mode 100644
index 0a0a25a..0000000
Binary files a/resources/mob/pigzombie.png and /dev/null differ
diff --git a/resources/mob/saddle.png b/resources/mob/saddle.png
deleted file mode 100644
index aaea7a6..0000000
Binary files a/resources/mob/saddle.png and /dev/null differ
diff --git a/resources/mob/sheep.png b/resources/mob/sheep.png
deleted file mode 100644
index 98cfa9a..0000000
Binary files a/resources/mob/sheep.png and /dev/null differ
diff --git a/resources/mob/sheep_fur.png b/resources/mob/sheep_fur.png
deleted file mode 100644
index f1291a5..0000000
Binary files a/resources/mob/sheep_fur.png and /dev/null differ
diff --git a/resources/mob/skeleton.png b/resources/mob/skeleton.png
deleted file mode 100644
index 9d22339..0000000
Binary files a/resources/mob/skeleton.png and /dev/null differ
diff --git a/resources/mob/slime.png b/resources/mob/slime.png
deleted file mode 100644
index 42fc873..0000000
Binary files a/resources/mob/slime.png and /dev/null differ
diff --git a/resources/mob/spider.png b/resources/mob/spider.png
deleted file mode 100644
index 08344a8..0000000
Binary files a/resources/mob/spider.png and /dev/null differ
diff --git a/resources/mob/spider_eyes.png b/resources/mob/spider_eyes.png
deleted file mode 100644
index 2a7734f..0000000
Binary files a/resources/mob/spider_eyes.png and /dev/null differ
diff --git a/resources/mob/zombie.png b/resources/mob/zombie.png
deleted file mode 100644
index 0ab7089..0000000
Binary files a/resources/mob/zombie.png and /dev/null differ
diff --git a/resources/music/calm1.mp3 b/resources/music/calm1.mp3
deleted file mode 100644
index f957283..0000000
Binary files a/resources/music/calm1.mp3 and /dev/null differ
diff --git a/resources/music/calm2.mp3 b/resources/music/calm2.mp3
deleted file mode 100644
index 4595df3..0000000
Binary files a/resources/music/calm2.mp3 and /dev/null differ
diff --git a/resources/music/calm3.mp3 b/resources/music/calm3.mp3
deleted file mode 100644
index d39f51b..0000000
Binary files a/resources/music/calm3.mp3 and /dev/null differ
diff --git a/resources/newMusic/hal1.mp3 b/resources/newMusic/hal1.mp3
deleted file mode 100644
index f6132ca..0000000
Binary files a/resources/newMusic/hal1.mp3 and /dev/null differ
diff --git a/resources/newMusic/hal2.mp3 b/resources/newMusic/hal2.mp3
deleted file mode 100644
index 732060c..0000000
Binary files a/resources/newMusic/hal2.mp3 and /dev/null differ
diff --git a/resources/newMusic/hal3.mp3 b/resources/newMusic/hal3.mp3
deleted file mode 100644
index 931463d..0000000
Binary files a/resources/newMusic/hal3.mp3 and /dev/null differ
diff --git a/resources/newMusic/hal4.mp3 b/resources/newMusic/hal4.mp3
deleted file mode 100644
index bb38011..0000000
Binary files a/resources/newMusic/hal4.mp3 and /dev/null differ
diff --git a/resources/newMusic/nuance1.mp3 b/resources/newMusic/nuance1.mp3
deleted file mode 100644
index 66021e8..0000000
Binary files a/resources/newMusic/nuance1.mp3 and /dev/null differ
diff --git a/resources/newMusic/nuance2.mp3 b/resources/newMusic/nuance2.mp3
deleted file mode 100644
index 53c7439..0000000
Binary files a/resources/newMusic/nuance2.mp3 and /dev/null differ
diff --git a/resources/newMusic/piano1.mp3 b/resources/newMusic/piano1.mp3
deleted file mode 100644
index 9c28f80..0000000
Binary files a/resources/newMusic/piano1.mp3 and /dev/null differ
diff --git a/resources/newMusic/piano2.mp3 b/resources/newMusic/piano2.mp3
deleted file mode 100644
index adde4f6..0000000
Binary files a/resources/newMusic/piano2.mp3 and /dev/null differ
diff --git a/resources/newMusic/piano3.mp3 b/resources/newMusic/piano3.mp3
deleted file mode 100644
index d80d41e..0000000
Binary files a/resources/newMusic/piano3.mp3 and /dev/null differ
diff --git a/resources/pack.png b/resources/pack.png
deleted file mode 100644
index 973a7cf..0000000
Binary files a/resources/pack.png and /dev/null differ
diff --git a/resources/pack.txt b/resources/pack.txt
deleted file mode 100644
index c14bb3b..0000000
--- a/resources/pack.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-The default look of Minecraft
-
diff --git a/resources/particles.png b/resources/particles.png
deleted file mode 100644
index 892ca98..0000000
Binary files a/resources/particles.png and /dev/null differ
diff --git a/resources/sounds/ambient/cave/cave1.mp3 b/resources/sounds/ambient/cave/cave1.mp3
deleted file mode 100644
index b9d43cd..0000000
Binary files a/resources/sounds/ambient/cave/cave1.mp3 and /dev/null differ
diff --git a/resources/sounds/ambient/cave/cave2.mp3 b/resources/sounds/ambient/cave/cave2.mp3
deleted file mode 100644
index 47e22ee..0000000
Binary files a/resources/sounds/ambient/cave/cave2.mp3 and /dev/null differ
diff --git a/resources/sounds/ambient/cave/cave3.mp3 b/resources/sounds/ambient/cave/cave3.mp3
deleted file mode 100644
index a2bc1e0..0000000
Binary files a/resources/sounds/ambient/cave/cave3.mp3 and /dev/null differ
diff --git a/resources/sounds/ambient/cave/cave4.mp3 b/resources/sounds/ambient/cave/cave4.mp3
deleted file mode 100644
index 3220da5..0000000
Binary files a/resources/sounds/ambient/cave/cave4.mp3 and /dev/null differ
diff --git a/resources/sounds/ambient/weather/rain1.ogg b/resources/sounds/ambient/weather/rain1.ogg
deleted file mode 100644
index 6246c9c..0000000
Binary files a/resources/sounds/ambient/weather/rain1.ogg and /dev/null differ
diff --git a/resources/sounds/ambient/weather/rain2.ogg b/resources/sounds/ambient/weather/rain2.ogg
deleted file mode 100644
index 598c30a..0000000
Binary files a/resources/sounds/ambient/weather/rain2.ogg and /dev/null differ
diff --git a/resources/sounds/ambient/weather/rain3.ogg b/resources/sounds/ambient/weather/rain3.ogg
deleted file mode 100644
index 5057d6b..0000000
Binary files a/resources/sounds/ambient/weather/rain3.ogg and /dev/null differ
diff --git a/resources/sounds/ambient/weather/rain4.ogg b/resources/sounds/ambient/weather/rain4.ogg
deleted file mode 100644
index 44ce41f..0000000
Binary files a/resources/sounds/ambient/weather/rain4.ogg and /dev/null differ
diff --git a/resources/sounds/ambient/weather/thunder1.ogg b/resources/sounds/ambient/weather/thunder1.ogg
deleted file mode 100644
index 59af558..0000000
Binary files a/resources/sounds/ambient/weather/thunder1.ogg and /dev/null differ
diff --git a/resources/sounds/ambient/weather/thunder2.ogg b/resources/sounds/ambient/weather/thunder2.ogg
deleted file mode 100644
index 2233dbf..0000000
Binary files a/resources/sounds/ambient/weather/thunder2.ogg and /dev/null differ
diff --git a/resources/sounds/ambient/weather/thunder3.ogg b/resources/sounds/ambient/weather/thunder3.ogg
deleted file mode 100644
index abd3208..0000000
Binary files a/resources/sounds/ambient/weather/thunder3.ogg and /dev/null differ
diff --git a/resources/sounds/damage/fallbig1.mp3 b/resources/sounds/damage/fallbig1.mp3
deleted file mode 100644
index 305f6cc..0000000
Binary files a/resources/sounds/damage/fallbig1.mp3 and /dev/null differ
diff --git a/resources/sounds/damage/fallbig2.mp3 b/resources/sounds/damage/fallbig2.mp3
deleted file mode 100644
index e9c17ac..0000000
Binary files a/resources/sounds/damage/fallbig2.mp3 and /dev/null differ
diff --git a/resources/sounds/damage/fallsmall.mp3 b/resources/sounds/damage/fallsmall.mp3
deleted file mode 100644
index 853a806..0000000
Binary files a/resources/sounds/damage/fallsmall.mp3 and /dev/null differ
diff --git a/resources/sounds/damage/hurtflesh1.mp3 b/resources/sounds/damage/hurtflesh1.mp3
deleted file mode 100644
index 658c553..0000000
Binary files a/resources/sounds/damage/hurtflesh1.mp3 and /dev/null differ
diff --git a/resources/sounds/damage/hurtflesh2.mp3 b/resources/sounds/damage/hurtflesh2.mp3
deleted file mode 100644
index 4e3fbe0..0000000
Binary files a/resources/sounds/damage/hurtflesh2.mp3 and /dev/null differ
diff --git a/resources/sounds/damage/hurtflesh3.mp3 b/resources/sounds/damage/hurtflesh3.mp3
deleted file mode 100644
index 8f3459a..0000000
Binary files a/resources/sounds/damage/hurtflesh3.mp3 and /dev/null differ
diff --git a/resources/sounds/liquid/lava.mp3 b/resources/sounds/liquid/lava.mp3
deleted file mode 100644
index 48d62a5..0000000
Binary files a/resources/sounds/liquid/lava.mp3 and /dev/null differ
diff --git a/resources/sounds/liquid/lavapop.mp3 b/resources/sounds/liquid/lavapop.mp3
deleted file mode 100644
index 4200144..0000000
Binary files a/resources/sounds/liquid/lavapop.mp3 and /dev/null differ
diff --git a/resources/sounds/liquid/splash.mp3 b/resources/sounds/liquid/splash.mp3
deleted file mode 100644
index b9a5ef3..0000000
Binary files a/resources/sounds/liquid/splash.mp3 and /dev/null differ
diff --git a/resources/sounds/liquid/water.mp3 b/resources/sounds/liquid/water.mp3
deleted file mode 100644
index c9c7908..0000000
Binary files a/resources/sounds/liquid/water.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/chicken1.mp3 b/resources/sounds/mob/chicken1.mp3
deleted file mode 100644
index 9cb13c0..0000000
Binary files a/resources/sounds/mob/chicken1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/chicken2.mp3 b/resources/sounds/mob/chicken2.mp3
deleted file mode 100644
index 744cbfa..0000000
Binary files a/resources/sounds/mob/chicken2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/chicken3.mp3 b/resources/sounds/mob/chicken3.mp3
deleted file mode 100644
index eb5f8cb..0000000
Binary files a/resources/sounds/mob/chicken3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/chickenhurt1.mp3 b/resources/sounds/mob/chickenhurt1.mp3
deleted file mode 100644
index de1b789..0000000
Binary files a/resources/sounds/mob/chickenhurt1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/chickenhurt2.mp3 b/resources/sounds/mob/chickenhurt2.mp3
deleted file mode 100644
index 81cb41a..0000000
Binary files a/resources/sounds/mob/chickenhurt2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/chickenplop.mp3 b/resources/sounds/mob/chickenplop.mp3
deleted file mode 100644
index ee727ad..0000000
Binary files a/resources/sounds/mob/chickenplop.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/cow1.mp3 b/resources/sounds/mob/cow1.mp3
deleted file mode 100644
index 77daa7c..0000000
Binary files a/resources/sounds/mob/cow1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/cow2.mp3 b/resources/sounds/mob/cow2.mp3
deleted file mode 100644
index ee90091..0000000
Binary files a/resources/sounds/mob/cow2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/cow3.mp3 b/resources/sounds/mob/cow3.mp3
deleted file mode 100644
index 7ebedd3..0000000
Binary files a/resources/sounds/mob/cow3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/cow4.mp3 b/resources/sounds/mob/cow4.mp3
deleted file mode 100644
index 4278b7a..0000000
Binary files a/resources/sounds/mob/cow4.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/cowhurt1.mp3 b/resources/sounds/mob/cowhurt1.mp3
deleted file mode 100644
index 856a8e9..0000000
Binary files a/resources/sounds/mob/cowhurt1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/cowhurt2.mp3 b/resources/sounds/mob/cowhurt2.mp3
deleted file mode 100644
index 3233b35..0000000
Binary files a/resources/sounds/mob/cowhurt2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/cowhurt3.mp3 b/resources/sounds/mob/cowhurt3.mp3
deleted file mode 100644
index 2c85fa0..0000000
Binary files a/resources/sounds/mob/cowhurt3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/creeper1.mp3 b/resources/sounds/mob/creeper1.mp3
deleted file mode 100644
index b85c274..0000000
Binary files a/resources/sounds/mob/creeper1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/creeper2.mp3 b/resources/sounds/mob/creeper2.mp3
deleted file mode 100644
index 51e89e8..0000000
Binary files a/resources/sounds/mob/creeper2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/creeper3.mp3 b/resources/sounds/mob/creeper3.mp3
deleted file mode 100644
index e77564d..0000000
Binary files a/resources/sounds/mob/creeper3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/creeper4.mp3 b/resources/sounds/mob/creeper4.mp3
deleted file mode 100644
index 00957c6..0000000
Binary files a/resources/sounds/mob/creeper4.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/creeperdeath.mp3 b/resources/sounds/mob/creeperdeath.mp3
deleted file mode 100644
index 6d9d6f6..0000000
Binary files a/resources/sounds/mob/creeperdeath.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/affectionate scream.mp3 b/resources/sounds/mob/ghast/affectionate scream.mp3
deleted file mode 100644
index 424946f..0000000
Binary files a/resources/sounds/mob/ghast/affectionate scream.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/charge.mp3 b/resources/sounds/mob/ghast/charge.mp3
deleted file mode 100644
index c082b74..0000000
Binary files a/resources/sounds/mob/ghast/charge.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/death.mp3 b/resources/sounds/mob/ghast/death.mp3
deleted file mode 100644
index 2bd1075..0000000
Binary files a/resources/sounds/mob/ghast/death.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/fireball4.mp3 b/resources/sounds/mob/ghast/fireball4.mp3
deleted file mode 100644
index 4dce2bd..0000000
Binary files a/resources/sounds/mob/ghast/fireball4.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/moan1.mp3 b/resources/sounds/mob/ghast/moan1.mp3
deleted file mode 100644
index 301c24b..0000000
Binary files a/resources/sounds/mob/ghast/moan1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/moan2.mp3 b/resources/sounds/mob/ghast/moan2.mp3
deleted file mode 100644
index cd0a105..0000000
Binary files a/resources/sounds/mob/ghast/moan2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/moan3.mp3 b/resources/sounds/mob/ghast/moan3.mp3
deleted file mode 100644
index a5d09c6..0000000
Binary files a/resources/sounds/mob/ghast/moan3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/moan4.mp3 b/resources/sounds/mob/ghast/moan4.mp3
deleted file mode 100644
index 608062c..0000000
Binary files a/resources/sounds/mob/ghast/moan4.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/moan5.mp3 b/resources/sounds/mob/ghast/moan5.mp3
deleted file mode 100644
index 03bf612..0000000
Binary files a/resources/sounds/mob/ghast/moan5.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/moan6.mp3 b/resources/sounds/mob/ghast/moan6.mp3
deleted file mode 100644
index 16b3654..0000000
Binary files a/resources/sounds/mob/ghast/moan6.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/moan7.mp3 b/resources/sounds/mob/ghast/moan7.mp3
deleted file mode 100644
index 03fec8a..0000000
Binary files a/resources/sounds/mob/ghast/moan7.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/scream1.mp3 b/resources/sounds/mob/ghast/scream1.mp3
deleted file mode 100644
index d29c38e..0000000
Binary files a/resources/sounds/mob/ghast/scream1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/scream2.mp3 b/resources/sounds/mob/ghast/scream2.mp3
deleted file mode 100644
index 9c9be59..0000000
Binary files a/resources/sounds/mob/ghast/scream2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/scream3.mp3 b/resources/sounds/mob/ghast/scream3.mp3
deleted file mode 100644
index d6e77d2..0000000
Binary files a/resources/sounds/mob/ghast/scream3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/scream4.mp3 b/resources/sounds/mob/ghast/scream4.mp3
deleted file mode 100644
index b0840dd..0000000
Binary files a/resources/sounds/mob/ghast/scream4.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/ghast/scream5.mp3 b/resources/sounds/mob/ghast/scream5.mp3
deleted file mode 100644
index f493863..0000000
Binary files a/resources/sounds/mob/ghast/scream5.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/pig1.mp3 b/resources/sounds/mob/pig1.mp3
deleted file mode 100644
index bd91f6c..0000000
Binary files a/resources/sounds/mob/pig1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/pig2.mp3 b/resources/sounds/mob/pig2.mp3
deleted file mode 100644
index cbf540c..0000000
Binary files a/resources/sounds/mob/pig2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/pig3.mp3 b/resources/sounds/mob/pig3.mp3
deleted file mode 100644
index caefa6f..0000000
Binary files a/resources/sounds/mob/pig3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/pigdeath.mp3 b/resources/sounds/mob/pigdeath.mp3
deleted file mode 100644
index b98c11f..0000000
Binary files a/resources/sounds/mob/pigdeath.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/sheep1.mp3 b/resources/sounds/mob/sheep1.mp3
deleted file mode 100644
index 51eee55..0000000
Binary files a/resources/sounds/mob/sheep1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/sheep2.mp3 b/resources/sounds/mob/sheep2.mp3
deleted file mode 100644
index 13d643e..0000000
Binary files a/resources/sounds/mob/sheep2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/sheep3.mp3 b/resources/sounds/mob/sheep3.mp3
deleted file mode 100644
index 3a9cd4b..0000000
Binary files a/resources/sounds/mob/sheep3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/skeleton1.mp3 b/resources/sounds/mob/skeleton1.mp3
deleted file mode 100644
index f0277e1..0000000
Binary files a/resources/sounds/mob/skeleton1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/skeleton2.mp3 b/resources/sounds/mob/skeleton2.mp3
deleted file mode 100644
index 7b62953..0000000
Binary files a/resources/sounds/mob/skeleton2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/skeleton3.mp3 b/resources/sounds/mob/skeleton3.mp3
deleted file mode 100644
index bca5f36..0000000
Binary files a/resources/sounds/mob/skeleton3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/skeletondeath.mp3 b/resources/sounds/mob/skeletondeath.mp3
deleted file mode 100644
index 88a889b..0000000
Binary files a/resources/sounds/mob/skeletondeath.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/skeletonhurt1.mp3 b/resources/sounds/mob/skeletonhurt1.mp3
deleted file mode 100644
index 6b002ec..0000000
Binary files a/resources/sounds/mob/skeletonhurt1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/skeletonhurt2.mp3 b/resources/sounds/mob/skeletonhurt2.mp3
deleted file mode 100644
index b71d197..0000000
Binary files a/resources/sounds/mob/skeletonhurt2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/skeletonhurt3.mp3 b/resources/sounds/mob/skeletonhurt3.mp3
deleted file mode 100644
index d303697..0000000
Binary files a/resources/sounds/mob/skeletonhurt3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/skeletonhurt4.mp3 b/resources/sounds/mob/skeletonhurt4.mp3
deleted file mode 100644
index 2414506..0000000
Binary files a/resources/sounds/mob/skeletonhurt4.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/slime1.mp3 b/resources/sounds/mob/slime1.mp3
deleted file mode 100644
index ee8cba6..0000000
Binary files a/resources/sounds/mob/slime1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/slime2.mp3 b/resources/sounds/mob/slime2.mp3
deleted file mode 100644
index 64b35c6..0000000
Binary files a/resources/sounds/mob/slime2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/slime3.mp3 b/resources/sounds/mob/slime3.mp3
deleted file mode 100644
index 7999312..0000000
Binary files a/resources/sounds/mob/slime3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/slime4.mp3 b/resources/sounds/mob/slime4.mp3
deleted file mode 100644
index dccd6d6..0000000
Binary files a/resources/sounds/mob/slime4.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/slime5.mp3 b/resources/sounds/mob/slime5.mp3
deleted file mode 100644
index fa7ce01..0000000
Binary files a/resources/sounds/mob/slime5.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/slimeattack1.mp3 b/resources/sounds/mob/slimeattack1.mp3
deleted file mode 100644
index 628f7de..0000000
Binary files a/resources/sounds/mob/slimeattack1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/slimeattack2.mp3 b/resources/sounds/mob/slimeattack2.mp3
deleted file mode 100644
index 393a08e..0000000
Binary files a/resources/sounds/mob/slimeattack2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/spider1.mp3 b/resources/sounds/mob/spider1.mp3
deleted file mode 100644
index 5974091..0000000
Binary files a/resources/sounds/mob/spider1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/spider2.mp3 b/resources/sounds/mob/spider2.mp3
deleted file mode 100644
index 77a0431..0000000
Binary files a/resources/sounds/mob/spider2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/spider3.mp3 b/resources/sounds/mob/spider3.mp3
deleted file mode 100644
index d5328ee..0000000
Binary files a/resources/sounds/mob/spider3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/spider4.mp3 b/resources/sounds/mob/spider4.mp3
deleted file mode 100644
index 37bf2dd..0000000
Binary files a/resources/sounds/mob/spider4.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/spiderdeath.mp3 b/resources/sounds/mob/spiderdeath.mp3
deleted file mode 100644
index 715fe4e..0000000
Binary files a/resources/sounds/mob/spiderdeath.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/bark1.mp3 b/resources/sounds/mob/wolf/bark1.mp3
deleted file mode 100644
index 2727638..0000000
Binary files a/resources/sounds/mob/wolf/bark1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/bark2.mp3 b/resources/sounds/mob/wolf/bark2.mp3
deleted file mode 100644
index 6054414..0000000
Binary files a/resources/sounds/mob/wolf/bark2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/bark3.mp3 b/resources/sounds/mob/wolf/bark3.mp3
deleted file mode 100644
index c69f614..0000000
Binary files a/resources/sounds/mob/wolf/bark3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/death.mp3 b/resources/sounds/mob/wolf/death.mp3
deleted file mode 100644
index 14e7487..0000000
Binary files a/resources/sounds/mob/wolf/death.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/growl1.mp3 b/resources/sounds/mob/wolf/growl1.mp3
deleted file mode 100644
index 605a1ac..0000000
Binary files a/resources/sounds/mob/wolf/growl1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/growl2.mp3 b/resources/sounds/mob/wolf/growl2.mp3
deleted file mode 100644
index d810b07..0000000
Binary files a/resources/sounds/mob/wolf/growl2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/growl3.mp3 b/resources/sounds/mob/wolf/growl3.mp3
deleted file mode 100644
index 046f276..0000000
Binary files a/resources/sounds/mob/wolf/growl3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/howl1.mp3 b/resources/sounds/mob/wolf/howl1.mp3
deleted file mode 100644
index 1fd43ea..0000000
Binary files a/resources/sounds/mob/wolf/howl1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/howl2.mp3 b/resources/sounds/mob/wolf/howl2.mp3
deleted file mode 100644
index 3916f56..0000000
Binary files a/resources/sounds/mob/wolf/howl2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/hurt1.mp3 b/resources/sounds/mob/wolf/hurt1.mp3
deleted file mode 100644
index c49cd84..0000000
Binary files a/resources/sounds/mob/wolf/hurt1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/hurt2.mp3 b/resources/sounds/mob/wolf/hurt2.mp3
deleted file mode 100644
index 7f9d4f1..0000000
Binary files a/resources/sounds/mob/wolf/hurt2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/hurt3.mp3 b/resources/sounds/mob/wolf/hurt3.mp3
deleted file mode 100644
index c74ca2a..0000000
Binary files a/resources/sounds/mob/wolf/hurt3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/panting.mp3 b/resources/sounds/mob/wolf/panting.mp3
deleted file mode 100644
index 19dacdb..0000000
Binary files a/resources/sounds/mob/wolf/panting.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/shake.mp3 b/resources/sounds/mob/wolf/shake.mp3
deleted file mode 100644
index 44fb74a..0000000
Binary files a/resources/sounds/mob/wolf/shake.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/wolf/whine.mp3 b/resources/sounds/mob/wolf/whine.mp3
deleted file mode 100644
index f017364..0000000
Binary files a/resources/sounds/mob/wolf/whine.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombie1.mp3 b/resources/sounds/mob/zombie1.mp3
deleted file mode 100644
index 257cbb3..0000000
Binary files a/resources/sounds/mob/zombie1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombie2.mp3 b/resources/sounds/mob/zombie2.mp3
deleted file mode 100644
index 676f2ba..0000000
Binary files a/resources/sounds/mob/zombie2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombie3.mp3 b/resources/sounds/mob/zombie3.mp3
deleted file mode 100644
index 1ac7b0f..0000000
Binary files a/resources/sounds/mob/zombie3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiedeath.mp3 b/resources/sounds/mob/zombiedeath.mp3
deleted file mode 100644
index c004584..0000000
Binary files a/resources/sounds/mob/zombiedeath.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiehurt1.mp3 b/resources/sounds/mob/zombiehurt1.mp3
deleted file mode 100644
index 9cb67a8..0000000
Binary files a/resources/sounds/mob/zombiehurt1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiehurt2.mp3 b/resources/sounds/mob/zombiehurt2.mp3
deleted file mode 100644
index aee3841..0000000
Binary files a/resources/sounds/mob/zombiehurt2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiepig/zpig1.mp3 b/resources/sounds/mob/zombiepig/zpig1.mp3
deleted file mode 100644
index aee5a2b..0000000
Binary files a/resources/sounds/mob/zombiepig/zpig1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiepig/zpig2.mp3 b/resources/sounds/mob/zombiepig/zpig2.mp3
deleted file mode 100644
index 3ab619a..0000000
Binary files a/resources/sounds/mob/zombiepig/zpig2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiepig/zpig3.mp3 b/resources/sounds/mob/zombiepig/zpig3.mp3
deleted file mode 100644
index 5f1e46c..0000000
Binary files a/resources/sounds/mob/zombiepig/zpig3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiepig/zpig4.mp3 b/resources/sounds/mob/zombiepig/zpig4.mp3
deleted file mode 100644
index 64a51de..0000000
Binary files a/resources/sounds/mob/zombiepig/zpig4.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiepig/zpigangry1.mp3 b/resources/sounds/mob/zombiepig/zpigangry1.mp3
deleted file mode 100644
index 85de17e..0000000
Binary files a/resources/sounds/mob/zombiepig/zpigangry1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiepig/zpigangry2.mp3 b/resources/sounds/mob/zombiepig/zpigangry2.mp3
deleted file mode 100644
index 8d8ad88..0000000
Binary files a/resources/sounds/mob/zombiepig/zpigangry2.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiepig/zpigangry3.mp3 b/resources/sounds/mob/zombiepig/zpigangry3.mp3
deleted file mode 100644
index cea462e..0000000
Binary files a/resources/sounds/mob/zombiepig/zpigangry3.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiepig/zpigangry4.mp3 b/resources/sounds/mob/zombiepig/zpigangry4.mp3
deleted file mode 100644
index 10e0e95..0000000
Binary files a/resources/sounds/mob/zombiepig/zpigangry4.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiepig/zpigdeath.mp3 b/resources/sounds/mob/zombiepig/zpigdeath.mp3
deleted file mode 100644
index 0354366..0000000
Binary files a/resources/sounds/mob/zombiepig/zpigdeath.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiepig/zpighurt1.mp3 b/resources/sounds/mob/zombiepig/zpighurt1.mp3
deleted file mode 100644
index ddca274..0000000
Binary files a/resources/sounds/mob/zombiepig/zpighurt1.mp3 and /dev/null differ
diff --git a/resources/sounds/mob/zombiepig/zpighurt2.mp3 b/resources/sounds/mob/zombiepig/zpighurt2.mp3
deleted file mode 100644
index 5b910b2..0000000
Binary files a/resources/sounds/mob/zombiepig/zpighurt2.mp3 and /dev/null differ
diff --git a/resources/sounds/note/bass.mp3 b/resources/sounds/note/bass.mp3
deleted file mode 100644
index e0daff5..0000000
Binary files a/resources/sounds/note/bass.mp3 and /dev/null differ
diff --git a/resources/sounds/note/bassattack.mp3 b/resources/sounds/note/bassattack.mp3
deleted file mode 100644
index 292a863..0000000
Binary files a/resources/sounds/note/bassattack.mp3 and /dev/null differ
diff --git a/resources/sounds/note/bd.mp3 b/resources/sounds/note/bd.mp3
deleted file mode 100644
index 42defa3..0000000
Binary files a/resources/sounds/note/bd.mp3 and /dev/null differ
diff --git a/resources/sounds/note/harp.mp3 b/resources/sounds/note/harp.mp3
deleted file mode 100644
index f1badf8..0000000
Binary files a/resources/sounds/note/harp.mp3 and /dev/null differ
diff --git a/resources/sounds/note/hat.mp3 b/resources/sounds/note/hat.mp3
deleted file mode 100644
index dd2eb7c..0000000
Binary files a/resources/sounds/note/hat.mp3 and /dev/null differ
diff --git a/resources/sounds/note/pling.mp3 b/resources/sounds/note/pling.mp3
deleted file mode 100644
index 42497ba..0000000
Binary files a/resources/sounds/note/pling.mp3 and /dev/null differ
diff --git a/resources/sounds/note/snare.mp3 b/resources/sounds/note/snare.mp3
deleted file mode 100644
index 85e4af1..0000000
Binary files a/resources/sounds/note/snare.mp3 and /dev/null differ
diff --git a/resources/sounds/portal/portal.mp3 b/resources/sounds/portal/portal.mp3
deleted file mode 100644
index 7b8cd9e..0000000
Binary files a/resources/sounds/portal/portal.mp3 and /dev/null differ
diff --git a/resources/sounds/portal/travel.mp3 b/resources/sounds/portal/travel.mp3
deleted file mode 100644
index 8042bff..0000000
Binary files a/resources/sounds/portal/travel.mp3 and /dev/null differ
diff --git a/resources/sounds/portal/trigger.mp3 b/resources/sounds/portal/trigger.mp3
deleted file mode 100644
index ec00975..0000000
Binary files a/resources/sounds/portal/trigger.mp3 and /dev/null differ
diff --git a/resources/sounds/random/bow.mp3 b/resources/sounds/random/bow.mp3
deleted file mode 100644
index 647f01a..0000000
Binary files a/resources/sounds/random/bow.mp3 and /dev/null differ
diff --git a/resources/sounds/random/breath.mp3 b/resources/sounds/random/breath.mp3
deleted file mode 100644
index d6bf2ed..0000000
Binary files a/resources/sounds/random/breath.mp3 and /dev/null differ
diff --git a/resources/sounds/random/click.mp3 b/resources/sounds/random/click.mp3
deleted file mode 100644
index 8fe1791..0000000
Binary files a/resources/sounds/random/click.mp3 and /dev/null differ
diff --git a/resources/sounds/random/door_close.mp3 b/resources/sounds/random/door_close.mp3
deleted file mode 100644
index 09bc3dc..0000000
Binary files a/resources/sounds/random/door_close.mp3 and /dev/null differ
diff --git a/resources/sounds/random/door_open.mp3 b/resources/sounds/random/door_open.mp3
deleted file mode 100644
index 6e151cb..0000000
Binary files a/resources/sounds/random/door_open.mp3 and /dev/null differ
diff --git a/resources/sounds/random/drr.mp3 b/resources/sounds/random/drr.mp3
deleted file mode 100644
index 3f7c679..0000000
Binary files a/resources/sounds/random/drr.mp3 and /dev/null differ
diff --git a/resources/sounds/random/explode.mp3 b/resources/sounds/random/explode.mp3
deleted file mode 100644
index 00bd150..0000000
Binary files a/resources/sounds/random/explode.mp3 and /dev/null differ
diff --git a/resources/sounds/random/fizz.mp3 b/resources/sounds/random/fizz.mp3
deleted file mode 100644
index ee120fd..0000000
Binary files a/resources/sounds/random/fizz.mp3 and /dev/null differ
diff --git a/resources/sounds/random/fuse.mp3 b/resources/sounds/random/fuse.mp3
deleted file mode 100644
index f098c6c..0000000
Binary files a/resources/sounds/random/fuse.mp3 and /dev/null differ
diff --git a/resources/sounds/random/glass1.mp3 b/resources/sounds/random/glass1.mp3
deleted file mode 100644
index 18680d6..0000000
Binary files a/resources/sounds/random/glass1.mp3 and /dev/null differ
diff --git a/resources/sounds/random/glass2.mp3 b/resources/sounds/random/glass2.mp3
deleted file mode 100644
index fb08b8b..0000000
Binary files a/resources/sounds/random/glass2.mp3 and /dev/null differ
diff --git a/resources/sounds/random/glass3.mp3 b/resources/sounds/random/glass3.mp3
deleted file mode 100644
index 3e34621..0000000
Binary files a/resources/sounds/random/glass3.mp3 and /dev/null differ
diff --git a/resources/sounds/random/hurt.mp3 b/resources/sounds/random/hurt.mp3
deleted file mode 100644
index 4fa55de..0000000
Binary files a/resources/sounds/random/hurt.mp3 and /dev/null differ
diff --git a/resources/sounds/random/pop.mp3 b/resources/sounds/random/pop.mp3
deleted file mode 100644
index aaec450..0000000
Binary files a/resources/sounds/random/pop.mp3 and /dev/null differ
diff --git a/resources/sounds/random/splash.mp3 b/resources/sounds/random/splash.mp3
deleted file mode 100644
index b9a5ef3..0000000
Binary files a/resources/sounds/random/splash.mp3 and /dev/null differ
diff --git a/resources/sounds/random/wood click.mp3 b/resources/sounds/random/wood click.mp3
deleted file mode 100644
index 9185a51..0000000
Binary files a/resources/sounds/random/wood click.mp3 and /dev/null differ
diff --git a/resources/sounds/step/cloth1.mp3 b/resources/sounds/step/cloth1.mp3
deleted file mode 100644
index 002c1ef..0000000
Binary files a/resources/sounds/step/cloth1.mp3 and /dev/null differ
diff --git a/resources/sounds/step/cloth2.mp3 b/resources/sounds/step/cloth2.mp3
deleted file mode 100644
index 2dbab59..0000000
Binary files a/resources/sounds/step/cloth2.mp3 and /dev/null differ
diff --git a/resources/sounds/step/cloth3.mp3 b/resources/sounds/step/cloth3.mp3
deleted file mode 100644
index 89ab9ef..0000000
Binary files a/resources/sounds/step/cloth3.mp3 and /dev/null differ
diff --git a/resources/sounds/step/cloth4.mp3 b/resources/sounds/step/cloth4.mp3
deleted file mode 100644
index dc9d828..0000000
Binary files a/resources/sounds/step/cloth4.mp3 and /dev/null differ
diff --git a/resources/sounds/step/grass1.mp3 b/resources/sounds/step/grass1.mp3
deleted file mode 100644
index ed6c94e..0000000
Binary files a/resources/sounds/step/grass1.mp3 and /dev/null differ
diff --git a/resources/sounds/step/grass2.mp3 b/resources/sounds/step/grass2.mp3
deleted file mode 100644
index f8590e5..0000000
Binary files a/resources/sounds/step/grass2.mp3 and /dev/null differ
diff --git a/resources/sounds/step/grass3.mp3 b/resources/sounds/step/grass3.mp3
deleted file mode 100644
index 18087db..0000000
Binary files a/resources/sounds/step/grass3.mp3 and /dev/null differ
diff --git a/resources/sounds/step/grass4.mp3 b/resources/sounds/step/grass4.mp3
deleted file mode 100644
index 5cd8d8a..0000000
Binary files a/resources/sounds/step/grass4.mp3 and /dev/null differ
diff --git a/resources/sounds/step/gravel1.mp3 b/resources/sounds/step/gravel1.mp3
deleted file mode 100644
index c50dcc2..0000000
Binary files a/resources/sounds/step/gravel1.mp3 and /dev/null differ
diff --git a/resources/sounds/step/gravel2.mp3 b/resources/sounds/step/gravel2.mp3
deleted file mode 100644
index 33d1818..0000000
Binary files a/resources/sounds/step/gravel2.mp3 and /dev/null differ
diff --git a/resources/sounds/step/gravel3.mp3 b/resources/sounds/step/gravel3.mp3
deleted file mode 100644
index b4633d6..0000000
Binary files a/resources/sounds/step/gravel3.mp3 and /dev/null differ
diff --git a/resources/sounds/step/gravel4.mp3 b/resources/sounds/step/gravel4.mp3
deleted file mode 100644
index dab12d7..0000000
Binary files a/resources/sounds/step/gravel4.mp3 and /dev/null differ
diff --git a/resources/sounds/step/sand1.mp3 b/resources/sounds/step/sand1.mp3
deleted file mode 100644
index 0f6da6f..0000000
Binary files a/resources/sounds/step/sand1.mp3 and /dev/null differ
diff --git a/resources/sounds/step/sand2.mp3 b/resources/sounds/step/sand2.mp3
deleted file mode 100644
index aa3bc6c..0000000
Binary files a/resources/sounds/step/sand2.mp3 and /dev/null differ
diff --git a/resources/sounds/step/sand3.mp3 b/resources/sounds/step/sand3.mp3
deleted file mode 100644
index daa955e..0000000
Binary files a/resources/sounds/step/sand3.mp3 and /dev/null differ
diff --git a/resources/sounds/step/sand4.mp3 b/resources/sounds/step/sand4.mp3
deleted file mode 100644
index 6bfedfc..0000000
Binary files a/resources/sounds/step/sand4.mp3 and /dev/null differ
diff --git a/resources/sounds/step/snow1.mp3 b/resources/sounds/step/snow1.mp3
deleted file mode 100644
index 5134ec2..0000000
Binary files a/resources/sounds/step/snow1.mp3 and /dev/null differ
diff --git a/resources/sounds/step/snow2.mp3 b/resources/sounds/step/snow2.mp3
deleted file mode 100644
index f092071..0000000
Binary files a/resources/sounds/step/snow2.mp3 and /dev/null differ
diff --git a/resources/sounds/step/snow3.mp3 b/resources/sounds/step/snow3.mp3
deleted file mode 100644
index 23fa8ef..0000000
Binary files a/resources/sounds/step/snow3.mp3 and /dev/null differ
diff --git a/resources/sounds/step/snow4.mp3 b/resources/sounds/step/snow4.mp3
deleted file mode 100644
index dce2cbd..0000000
Binary files a/resources/sounds/step/snow4.mp3 and /dev/null differ
diff --git a/resources/sounds/step/stone1.mp3 b/resources/sounds/step/stone1.mp3
deleted file mode 100644
index 007494f..0000000
Binary files a/resources/sounds/step/stone1.mp3 and /dev/null differ
diff --git a/resources/sounds/step/stone2.mp3 b/resources/sounds/step/stone2.mp3
deleted file mode 100644
index af36ebc..0000000
Binary files a/resources/sounds/step/stone2.mp3 and /dev/null differ
diff --git a/resources/sounds/step/stone3.mp3 b/resources/sounds/step/stone3.mp3
deleted file mode 100644
index ecb1eb9..0000000
Binary files a/resources/sounds/step/stone3.mp3 and /dev/null differ
diff --git a/resources/sounds/step/stone4.mp3 b/resources/sounds/step/stone4.mp3
deleted file mode 100644
index 9450f00..0000000
Binary files a/resources/sounds/step/stone4.mp3 and /dev/null differ
diff --git a/resources/sounds/step/wood1.mp3 b/resources/sounds/step/wood1.mp3
deleted file mode 100644
index 32c134d..0000000
Binary files a/resources/sounds/step/wood1.mp3 and /dev/null differ
diff --git a/resources/sounds/step/wood2.mp3 b/resources/sounds/step/wood2.mp3
deleted file mode 100644
index e99c496..0000000
Binary files a/resources/sounds/step/wood2.mp3 and /dev/null differ
diff --git a/resources/sounds/step/wood3.mp3 b/resources/sounds/step/wood3.mp3
deleted file mode 100644
index 67a0487..0000000
Binary files a/resources/sounds/step/wood3.mp3 and /dev/null differ
diff --git a/resources/sounds/step/wood4.mp3 b/resources/sounds/step/wood4.mp3
deleted file mode 100644
index 481516a..0000000
Binary files a/resources/sounds/step/wood4.mp3 and /dev/null differ
diff --git a/resources/sounds/tile/piston/in.mp3 b/resources/sounds/tile/piston/in.mp3
deleted file mode 100644
index a3d69ca..0000000
Binary files a/resources/sounds/tile/piston/in.mp3 and /dev/null differ
diff --git a/resources/sounds/tile/piston/out.mp3 b/resources/sounds/tile/piston/out.mp3
deleted file mode 100644
index 0a84b38..0000000
Binary files a/resources/sounds/tile/piston/out.mp3 and /dev/null differ
diff --git a/resources/sounds/vehicle/minecart1.mp3 b/resources/sounds/vehicle/minecart1.mp3
deleted file mode 100644
index fbf50f6..0000000
Binary files a/resources/sounds/vehicle/minecart1.mp3 and /dev/null differ
diff --git a/resources/sounds/vehicle/minecart2.mp3 b/resources/sounds/vehicle/minecart2.mp3
deleted file mode 100644
index c86cf01..0000000
Binary files a/resources/sounds/vehicle/minecart2.mp3 and /dev/null differ
diff --git a/resources/sounds/vehicle/minecart3.mp3 b/resources/sounds/vehicle/minecart3.mp3
deleted file mode 100644
index e8e046d..0000000
Binary files a/resources/sounds/vehicle/minecart3.mp3 and /dev/null differ
diff --git a/resources/sounds/vehicle/minecart4.mp3 b/resources/sounds/vehicle/minecart4.mp3
deleted file mode 100644
index 28e6e76..0000000
Binary files a/resources/sounds/vehicle/minecart4.mp3 and /dev/null differ
diff --git a/resources/terrain.png b/resources/terrain.png
deleted file mode 100644
index 9165212..0000000
Binary files a/resources/terrain.png and /dev/null differ
diff --git a/resources/terrain/moon.png b/resources/terrain/moon.png
deleted file mode 100644
index 61cebbc..0000000
Binary files a/resources/terrain/moon.png and /dev/null differ
diff --git a/resources/terrain/sun.png b/resources/terrain/sun.png
deleted file mode 100644
index d343344..0000000
Binary files a/resources/terrain/sun.png and /dev/null differ
diff --git a/resources/title/black.png b/resources/title/black.png
deleted file mode 100644
index dc2ad3e..0000000
Binary files a/resources/title/black.png and /dev/null differ
diff --git a/resources/title/mojang.png b/resources/title/mojang.png
deleted file mode 100644
index 794beb0..0000000
Binary files a/resources/title/mojang.png and /dev/null differ
diff --git a/resources/title/splashes.txt b/resources/title/splashes.txt
deleted file mode 100644
index 0d69170..0000000
--- a/resources/title/splashes.txt
+++ /dev/null
@@ -1,210 +0,0 @@
-Pre-beta!
-As seen on TV!
-Awesome!
-100% pure!
-May contain nuts!
-Better than Prey!
-More polygons!
-Sexy!
-Limited edition!
-Flashing letters!
-Made by Notch!
-Coming soon!
-Best in class!
-When it's finished!
-Absolutely dragon free!
-Excitement!
-More than 500 sold!
-One of a kind!
-Heaps of hits on YouTube!
-Indev!
-Spiders everywhere!
-Check it out!
-Holy cow, man!
-It's a game!
-Made in Sweden!
-Uses LWJGL!
-Reticulating splines!
-Minecraft!
-Yaaay!
-Alpha version!
-Singleplayer!
-Keyboard compatible!
-Undocumented!
-Ingots!
-Exploding creepers!
-That's not a moon!
-l33t!
-Create!
-Survive!
-Dungeon!
-Exclusive!
-The bee's knees!
-Down with O.P.P.!
-Closed source!
-Classy!
-Wow!
-Not on steam!
-9.95 euro!
-Half price!
-Oh man!
-Check it out!
-Awesome community!
-Pixels!
-Teetsuuuuoooo!
-Kaaneeeedaaaa!
-Now with difficulty!
-Enhanced!
-90% bug free!
-Pretty!
-12 herbs and spices!
-Fat free!
-Absolutely no memes!
-Free dental!
-Ask your doctor!
-Minors welcome!
-Cloud computing!
-Legal in Finland!
-Hard to label!
-Technically good!
-Bringing home the bacon!
-Indie!
-GOTY!
-Ceci n'est pas une title screen!
-Euclidian!
-Now in 3D!
-Inspirational!
-Herregud!
-Complex cellular automata!
-Yes, sir!
-Played by cowboys!
-OpenGL 1.1!
-Thousands of colors!
-Try it!
-Age of Wonders is better!
-Try the mushroom stew!
-Sensational!
-Hot tamale, hot hot tamale!
-Play him off, keyboard cat!
-Guaranteed!
-Macroscopic!
-Bring it on!
-Random splash!
-Call your mother!
-Monster infighting!
-Loved by millions!
-Ultimate edition!
-Freaky!
-You've got a brand new key!
-Water proof!
-Uninflammable!
-Whoa, dude!
-All inclusive!
-Tell your friends!
-NP is not in P!
-Notch <3 ez!
-Music by C418!
-Livestreamed!
-Haunted!
-Polynomial!
-Terrestrial!
-All is full of love!
-Full of stars!
-Scientific!
-Cooler than Spock!
-Collaborate and listen!
-Never dig down!
-Take frequent breaks!
-Not linear!
-Han shot first!
-Nice to meet you!
-Buckets of lava!
-Ride the pig!
-Larger than Earth!
-sqrt(-1) love you!
-Phobos anomaly!
-Punching wood!
-Falling off cliffs!
-0% sugar!
-150% hyperbole!
-Synecdoche!
-Let's danec!
-Seecret Friday update!
-Reference implementation!
-Lewd with two dudes with food!
-Kiss the sky!
-20 GOTO 10!
-Verlet intregration!
-Peter Griffin!
-Do not distribute!
-Cogito ergo sum!
-4815162342 lines of code!
-A skeleton popped out!
-The Work of Notch!
-The sum of its parts!
-BTAF used to be good!
-I miss ADOM!
-umop-apisdn!
-OICU812!
-Bring me Ray Cokes!
-Finger-licking!
-Thematic!
-Pneumatic!
-Sublime!
-Octagonal!
-Une baguette!
-Gargamel plays it!
-Rita is the new top dog!
-SWM forever!
-Representing Edsbyn!
-Matt Damon!
-Superfragilisticexpialidocious!
-Consummate V's!
-Cow Tools!
-Double buffered!
-Fan fiction!
-Flaxkikare!
-Jason! Jason! Jason!
-Hotter than the sun!
-Internet enabled!
-Autonomous!
-Engage!
-Fantasy!
-DRR! DRR! DRR!
-Kick it root down!
-Regional resources!
-Woo, facepunch!
-Woo, somethingawful!
-Woo, /v/!
-Woo, tigsource!
-Woo, minecraftforum!
-Woo, worldofminecraft!
-Google anlyticsed!
-Now supports ���!
-Give us Gordon!
-Tip your waiter!
-Very fun!
-12345 is a bad password!
-Vote for net neutrality!
-Lives in a pineapple under the sea!
-MAP11 has two names!
-Omnipotent!
-Gasp!
-...!
-Bees, bees, bees, bees!
-Jag känner en bot!
-This text is hard to read if you play the game at the default resolution, but at 1080p it's fine!
-Haha, LOL!
-Hampsterdance!
-Switches and ores!
-Menger sponge!
-idspispopd!
-Eple (original edit)!
-So fresh, so clean!
-Slow acting portals!
-Try the Nether!
-Don't look directly at the bugs!
-Oh, ok, Pigmen!
-Finally with ladders!
-Scary!
-Play Minecraft, Watch Topgear, Get Pig
\ No newline at end of file
diff --git a/src/lwjgl/java/net/PeytonPlayz585/opengl/GL11_1.java b/src/lwjgl/java/net/PeytonPlayz585/opengl/GL11_1.java
index b2fcb82..2fbacd7 100644
--- a/src/lwjgl/java/net/PeytonPlayz585/opengl/GL11_1.java
+++ b/src/lwjgl/java/net/PeytonPlayz585/opengl/GL11_1.java
@@ -72,7 +72,8 @@ import net.minecraft.src.MathHelper;
import net.minecraft.src.Tessellator;
import paulscode.sound.SoundSystem;
import paulscode.sound.SoundSystemConfig;
-import paulscode.sound.libraries.LibraryLWJGLOpenAL;
+import paulscode.sound.codecs.CodecJOrbis;
+import net.lax1dude.eaglercraft.adapter.sound.LibraryLWJGLOpenAL;
import org.lwjgl.opengl.ARBDebugOutput;
import org.lwjgl.opengl.ARBDebugOutputCallback;
@@ -5047,6 +5048,7 @@ public class GL11_1 {
try {
SoundSystemConfig.addLibrary(LibraryLWJGLOpenAL.class);
+ SoundSystemConfig.setCodec("ogg", CodecJOrbis.class);
SoundSystemConfig.setCodec("mp3", CodecJLayerMP3.class);
ss = new SoundSystem();
}catch(Throwable t) {
diff --git a/src/lwjgl/java/paulscode/sound/Channel.java b/src/lwjgl/java/paulscode/sound/Channel.java
deleted file mode 100644
index abc1b0b..0000000
--- a/src/lwjgl/java/paulscode/sound/Channel.java
+++ /dev/null
@@ -1,262 +0,0 @@
-package paulscode.sound;
-
-import java.util.LinkedList;
-import javax.sound.sampled.AudioFormat;
-
-/**
- * The Channel class is the base class which can be extended for
- * library-specific channels. It is also used in the "no-sound" library. A
- * channel is a reserved sound-card voice through which sources are played back.
- * Channels can be either streaming channels or normal (non-streaming) ones. For
- * consistant naming conventions, each sub-class should have the name prefix
- * "Channel".
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class Channel {
- /**
- * The library class associated with this type of channel.
- */
- protected Class libraryType = Library.class;
-
- /**
- * Global identifier for the type of channel (normal or streaming). Possible
- * values for this varriable can be found in the
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} class.
- */
- public int channelType;
-
- /**
- * Processes status messages, warnings, and error messages.
- */
- private SoundSystemLogger logger;
-
- /**
- * Whatever source is attached to this channel.
- */
- public Source attachedSource = null;
-
- /**
- * Cumulative counter of the buffers played then unqued.
- */
- public int buffersUnqueued = 0;
-
- /**
- * Constructor: Takes channelType identifier as a paramater. Possible values for
- * channel type can be found in the {@link paulscode.sound.SoundSystemConfig
- * SoundSystemConfig} class.
- *
- * @param type Type of channel (normal or streaming).
- */
- public Channel(int type) {
- // grab a handle to the message logger:
- logger = SoundSystemConfig.getLogger();
-
- channelType = type;
- }
-
- /**
- * Shuts the channel down and removes references to all instantiated objects.
- */
- public void cleanup() {
- logger = null;
- }
-
- /**
- * Queues up the initial byte[] buffers of data to be streamed.
- *
- * @param bufferList List of the first buffers to be played for a streaming
- * source.
- * @return False if an error occurred or if end of stream was reached.
- */
- public boolean preLoadBuffers(LinkedList bufferList) {
- return true;
- }
-
- /**
- * Queues up a byte[] buffer of data to be streamed.
- *
- * @param buffer The next buffer to be played for a streaming source.
- * @return False if an error occurred or if the channel is shutting down.
- */
- public boolean queueBuffer(byte[] buffer) {
- return false;
- }
-
- /**
- * Feeds raw data to the stream.
- *
- * @param buffer Buffer containing raw audio data to stream.
- * @return Number of prior buffers that have been processed.
- */
- public int feedRawAudioData(byte[] buffer) {
- return 1;
- }
-
- /**
- * Returns the number of queued byte[] buffers that have finished playing.
- *
- * @return Number of buffers processed.
- */
- public int buffersProcessed() {
- return 0;
- }
-
- /**
- * Calculates the number of milliseconds since the channel began playing.
- *
- * @return Milliseconds, or -1 if unable to calculate.
- */
- public float millisecondsPlayed() {
- return -1;
- }
-
- /**
- * Plays the next queued byte[] buffer. This method is run from the seperate
- * {@link paulscode.sound.StreamThread StreamThread}.
- *
- * @return False when no more buffers are left to process.
- */
- public boolean processBuffer() {
- return false;
- }
-
- /**
- * Sets the channel up to receive the specified audio format.
- */
- public void setAudioFormat(AudioFormat audioFormat) {
- }
-
- /**
- * Dequeues all previously queued data.
- */
- public void flush() {
- }
-
- /**
- * Stops the channel, dequeues any queued data, and closes the channel.
- */
- public void close() {
- }
-
- /**
- * Plays the currently attached normal source, opens this channel up for
- * streaming, or resumes playback if this channel was paused.
- */
- public void play() {
- }
-
- /**
- * Temporarily stops playback for this channel.
- */
- public void pause() {
- }
-
- /**
- * Stops playback for this channel and rewinds the attached source to the
- * beginning.
- */
- public void stop() {
- }
-
- /**
- * Rewinds the attached source to the beginning. Stops the source if it was
- * paused.
- */
- public void rewind() {
- }
-
- /**
- * Used to determine if a channel is actively playing a source. This method will
- * return false if the channel is paused or stopped and when no data is queued
- * to be streamed.
- *
- * @return True if this channel is playing a source.
- */
- public boolean playing() {
- return false;
- }
-
- /**
- * Returns the name of the class.
- *
- * @return "Channel" + library title.
- */
- public String getClassName() {
- String libTitle = SoundSystemConfig.getLibraryTitle(libraryType);
-
- if (libTitle.equals("No Sound"))
- return "Channel";
- else
- return "Channel" + libTitle;
- }
-
- /**
- * Prints a message.
- *
- * @param message Message to print.
- */
- protected void message(String message) {
- logger.message(message, 0);
- }
-
- /**
- * Prints an important message.
- *
- * @param message Message to print.
- */
- protected void importantMessage(String message) {
- logger.importantMessage(message, 0);
- }
-
- /**
- * Prints the specified message if error is true.
- *
- * @param error True or False.
- * @param message Message to print if error is true.
- * @return True if error is true.
- */
- protected boolean errorCheck(boolean error, String message) {
- return logger.errorCheck(error, getClassName(), message, 0);
- }
-
- /**
- * Prints an error message.
- *
- * @param message Message to print.
- */
- protected void errorMessage(String message) {
- logger.errorMessage(getClassName(), message, 0);
- }
-
- /**
- * Prints an exception's error message followed by the stack trace.
- *
- * @param e Exception containing the information to print.
- */
- protected void printStackTrace(Exception e) {
- logger.printStackTrace(e, 1);
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/CommandObject.java b/src/lwjgl/java/paulscode/sound/CommandObject.java
deleted file mode 100644
index 2fda3f0..0000000
--- a/src/lwjgl/java/paulscode/sound/CommandObject.java
+++ /dev/null
@@ -1,599 +0,0 @@
-package paulscode.sound;
-
-/**
- * The CommandObject class is used to store arguments in the SoundSystem's
- * Command Queue. Queued CommandObjects are then processed by the
- * {@link paulscode.sound.CommandThread CommandThread}. Commands are queued and
- * executed in the background, so it is unlikely that the user will ever need to
- * use this class.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class CommandObject {
- /**
- * Global identifier for the command to initialize the current sound library.
- */
- public static final int INITIALIZE = 1;
- /**
- * Global identifier for the command to pre-load a sound file.
- */
- public static final int LOAD_SOUND = 2;
- /**
- * Global identifier for the command to pre-load a sound file.
- */
- public static final int LOAD_DATA = 3;
- /**
- * Global identifier for the command to remove a sound file from memory.
- */
- public static final int UNLOAD_SOUND = 4;
- /**
- * Global identifier for the command to queue a sound file.
- */
- public static final int QUEUE_SOUND = 5;
- /**
- * Global identifier for the command to dequeue a sound file.
- */
- public static final int DEQUEUE_SOUND = 6;
- /**
- * Global identifier for the command to fade-out transition a source.
- */
- public static final int FADE_OUT = 7;
- /**
- * Global identifier for the command to fade-out/in transition a source.
- */
- public static final int FADE_OUT_IN = 8;
- /**
- * Global identifier for the command to check volume levels of fading sources.
- */
- public static final int CHECK_FADE_VOLUMES = 9;
- /**
- * Global identifier for the command to create a new source.
- */
- public static final int NEW_SOURCE = 10;
- /**
- * Global identifier for the command to create a new raw data stream.
- */
- public static final int RAW_DATA_STREAM = 11;
- /**
- * Global identifier for the command to create a source and immediately play it.
- */
- public static final int QUICK_PLAY = 12;
- /**
- * Global identifier for the command to set a source's position in 3D space.
- */
- public static final int SET_POSITION = 13;
- /**
- * Global identifier for the command to change a source's volume.
- */
- public static final int SET_VOLUME = 14;
- /**
- * Global identifier for the command to change a source's pitch.
- */
- public static final int SET_PITCH = 15;
- /**
- * Global identifier for the command to change a source's priority.
- */
- public static final int SET_PRIORITY = 16;
- /**
- * Global identifier for the command to tell a source whether or not to loop.
- */
- public static final int SET_LOOPING = 17;
- /**
- * Global identifier for the command to set a source's attenuation model.
- */
- public static final int SET_ATTENUATION = 18;
- /**
- * Global identifier for the command to set a source's fade distance or rolloff
- * factor.
- */
- public static final int SET_DIST_OR_ROLL = 19;
- /**
- * Global identifier for the command to change the Doppler factor.
- */
- public static final int CHANGE_DOPPLER_FACTOR = 20;
- /**
- * Global identifier for the command to change the Doppler velocity.
- */
- public static final int CHANGE_DOPPLER_VELOCITY = 21;
- /**
- * Global identifier for the command to set a source's velocity.
- */
- public static final int SET_VELOCITY = 22;
- /**
- * Global identifier for the command to set a source's velocity.
- */
- public static final int SET_LISTENER_VELOCITY = 23;
- /**
- * Global identifier for the command to play a source.
- */
- public static final int PLAY = 24;
- /**
- * Global identifier for the command to play a source.
- */
- public static final int FEED_RAW_AUDIO_DATA = 25;
- /**
- * Global identifier for the command to pause a source.
- */
- public static final int PAUSE = 26;
- /**
- * Global identifier for the command to stop a source.
- */
- public static final int STOP = 27;
- /**
- * Global identifier for the command to rewind a source.
- */
- public static final int REWIND = 28;
- /**
- * Global identifier for the command to flush all queued data.
- */
- public static final int FLUSH = 29;
- /**
- * Global identifier for the command to cull a source.
- */
- public static final int CULL = 30;
- /**
- * Global identifier for the command to activate a source.
- */
- public static final int ACTIVATE = 31;
- /**
- * Global identifier for the command to set a source as permanant or temporary.
- */
- public static final int SET_TEMPORARY = 32;
- /**
- * Global identifier for the command to delete a source.
- */
- public static final int REMOVE_SOURCE = 33;
- /**
- * Global identifier for the command to move the listner.
- */
- public static final int MOVE_LISTENER = 34;
- /**
- * Global identifier for the command to set the listener's position.
- */
- public static final int SET_LISTENER_POSITION = 35;
- /**
- * Global identifier for the command to turn the listener.
- */
- public static final int TURN_LISTENER = 36;
- /**
- * Global identifier for the command to set the listener's turn angle.
- */
- public static final int SET_LISTENER_ANGLE = 37;
- /**
- * Global identifier for the command to change the listener's orientation.
- */
- public static final int SET_LISTENER_ORIENTATION = 38;
- /**
- * Global identifier for the command to change the master volume.
- */
- public static final int SET_MASTER_VOLUME = 39;
- /**
- * Global identifier for the command to create a new library.
- */
- public static final int NEW_LIBRARY = 40;
-
- /**
- * Any buffer required for a command.
- */
- public byte[] buffer;
- /**
- * Any int arguments required for a command.
- */
- public int[] intArgs;
- /**
- * Any float arguments required for a command.
- */
- public float[] floatArgs;
- /**
- * Any long arguments required for a command.
- */
- public long[] longArgs;
- /**
- * Any boolean arguments required for a command.
- */
- public boolean[] boolArgs;
- /**
- * Any String arguments required for a command.
- */
- public String[] stringArgs;
-
- /**
- * Any Class arguments required for a command.
- */
- public Class[] classArgs;
-
- /**
- * Any Object arguments required for a command.
- */
- public Object[] objectArgs;
-
- /**
- * Which command to execute.
- */
- public int Command;
-
- /**
- * Constructor used to create a command which doesn't require any arguments.
- *
- * @param cmd Which command to execute.
- */
- public CommandObject(int cmd) {
- Command = cmd;
- }
-
- /**
- * Constructor used to create a command which requires one integer argument.
- *
- * @param cmd Which command to execute.
- * @param i The integer argument needed to execute this command.
- */
- public CommandObject(int cmd, int i) {
- Command = cmd;
- intArgs = new int[1];
- intArgs[0] = i;
- }
-
- /**
- * Constructor used to create a command which requires one Library Class
- * argument.
- *
- * @param cmd Which command to execute.
- * @param c The Library Class argument needed to execute this command.
- */
- public CommandObject(int cmd, Class c) {
- Command = cmd;
- classArgs = new Class[1];
- classArgs[0] = c;
- }
-
- /**
- * Constructor used to create a command which requires one float argument.
- *
- * @param cmd Which command to execute.
- * @param f The float argument needed to execute this command.
- */
- public CommandObject(int cmd, float f) {
- Command = cmd;
- floatArgs = new float[1];
- floatArgs[0] = f;
- }
-
- /**
- * Constructor used to create a command which requires one String argument.
- *
- * @param cmd Which command to execute.
- * @param s The String argument needed to execute this command.
- */
- public CommandObject(int cmd, String s) {
- Command = cmd;
- stringArgs = new String[1];
- stringArgs[0] = s;
- }
-
- /**
- * Constructor used to create a command which requires one Object argument.
- *
- * @param cmd Which command to execute.
- * @param o The Object argument needed to execute this command.
- */
- public CommandObject(int cmd, Object o) {
- Command = cmd;
- objectArgs = new Object[1];
- objectArgs[0] = o;
- }
-
- /**
- * Constructor used to create a command which requires one String argument and
- * one Object argument.
- *
- * @param cmd Which command to execute.
- * @param s The String argument needed to execute this command.
- * @param o The Object argument needed to execute this command.
- */
- public CommandObject(int cmd, String s, Object o) {
- Command = cmd;
- stringArgs = new String[1];
- stringArgs[0] = s;
- objectArgs = new Object[1];
- objectArgs[0] = o;
- }
-
- /**
- * Constructor used to create a command which requires one String argument and
- * one byte buffer argument.
- *
- * @param cmd Which command to execute.
- * @param s The String argument needed to execute this command.
- * @param buff The byte buffer argument needed to execute this command.
- */
- public CommandObject(int cmd, String s, byte[] buff) {
- Command = cmd;
- stringArgs = new String[1];
- stringArgs[0] = s;
- buffer = buff;
- }
-
- /**
- * Constructor used to create a command which requires one String argument, one
- * Object argument, and one long argument.
- *
- * @param cmd Which command to execute.
- * @param s The String argument needed to execute this command.
- * @param o The Object argument needed to execute this command.
- * @param l The long argument needed to execute this command.
- */
- public CommandObject(int cmd, String s, Object o, long l) {
- Command = cmd;
- stringArgs = new String[1];
- stringArgs[0] = s;
- objectArgs = new Object[1];
- objectArgs[0] = o;
- longArgs = new long[1];
- longArgs[0] = l;
- }
-
- /**
- * Constructor used to create a command which requires one String argument, one
- * Object argument, and two long arguments.
- *
- * @param cmd Which command to execute.
- * @param s The String argument needed to execute this command.
- * @param o The Object argument needed to execute this command.
- * @param l1 The first long argument needed to execute this command.
- * @param l2 The second long argument needed to execute this command.
- */
- public CommandObject(int cmd, String s, Object o, long l1, long l2) {
- Command = cmd;
- stringArgs = new String[1];
- stringArgs[0] = s;
- objectArgs = new Object[1];
- objectArgs[0] = o;
- longArgs = new long[2];
- longArgs[0] = l1;
- longArgs[1] = l2;
- }
-
- /**
- * Constructor used to create a command which requires two String arguments.
- *
- * @param cmd Which command to execute.
- * @param s1 The first String argument needed to execute this command.
- * @param s2 The second String argument needed to execute this command.
- */
- public CommandObject(int cmd, String s1, String s2) {
- Command = cmd;
- stringArgs = new String[2];
- stringArgs[0] = s1;
- stringArgs[1] = s2;
- }
-
- /**
- * Constructor used to create a command which requires a String and an int as
- * arguments.
- *
- * @param cmd Which command to execute.
- * @param s The String argument needed to execute this command.
- * @param i The integer argument needed to execute this command.
- */
- public CommandObject(int cmd, String s, int i) {
- Command = cmd;
- intArgs = new int[1];
- stringArgs = new String[1];
- intArgs[0] = i;
- stringArgs[0] = s;
- }
-
- /**
- * Constructor used to create a command which requires a String and a float as
- * arguments.
- *
- * @param cmd Which command to execute.
- * @param s The String argument needed to execute this command.
- * @param f The float argument needed to execute this command.
- */
- public CommandObject(int cmd, String s, float f) {
- Command = cmd;
- floatArgs = new float[1];
- stringArgs = new String[1];
- floatArgs[0] = f;
- stringArgs[0] = s;
- }
-
- /**
- * Constructor used to create a command which requires a String and a boolean as
- * arguments.
- *
- * @param cmd Which command to execute.
- * @param s The String argument needed to execute this command.
- * @param b The boolean argument needed to execute this command.
- */
- public CommandObject(int cmd, String s, boolean b) {
- Command = cmd;
- boolArgs = new boolean[1];
- stringArgs = new String[1];
- boolArgs[0] = b;
- stringArgs[0] = s;
- }
-
- /**
- * Constructor used to create a command which requires three float arguments.
- *
- * @param cmd Which command to execute.
- * @param f1 The first float argument needed to execute this command.
- * @param f2 The second float argument needed to execute this command.
- * @param f3 The third float argument needed to execute this command.
- */
- public CommandObject(int cmd, float f1, float f2, float f3) {
- Command = cmd;
- floatArgs = new float[3];
- floatArgs[0] = f1;
- floatArgs[1] = f2;
- floatArgs[2] = f3;
- }
-
- /**
- * Constructor used to create a command which a String and three float
- * arguments.
- *
- * @param cmd Which command to execute.
- * @param s The String argument needed to execute this command.
- * @param f1 The first float argument needed to execute this command.
- * @param f2 The second float argument needed to execute this command.
- * @param f3 The third float argument needed to execute this command.
- */
- public CommandObject(int cmd, String s, float f1, float f2, float f3) {
- Command = cmd;
- floatArgs = new float[3];
- stringArgs = new String[1];
- floatArgs[0] = f1;
- floatArgs[1] = f2;
- floatArgs[2] = f3;
- stringArgs[0] = s;
- }
-
- /**
- * Constructor used to create a command which requires six float arguments.
- *
- * @param cmd Which command to execute.
- * @param f1 The first float argument needed to execute this command.
- * @param f2 The second float argument needed to execute this command.
- * @param f3 The third float argument needed to execute this command.
- * @param f4 The fourth float argument needed to execute this command.
- * @param f5 The fifth float argument needed to execute this command.
- * @param f6 The sixth float argument needed to execute this command.
- */
- public CommandObject(int cmd, float f1, float f2, float f3, float f4, float f5, float f6) {
- Command = cmd;
- floatArgs = new float[6];
- floatArgs[0] = f1;
- floatArgs[1] = f2;
- floatArgs[2] = f3;
- floatArgs[3] = f4;
- floatArgs[4] = f5;
- floatArgs[5] = f6;
- }
-
- /**
- * Constructor used to create a command which requires several arguments.
- *
- * @param cmd Which command to execute.
- * @param b1 The first boolean argument needed to execute this command.
- * @param b2 The second boolean argument needed to execute this command.
- * @param b3 The third boolean argument needed to execute this command.
- * @param s The String argument needed to execute this command.
- * @param o The Object argument needed to execute this command.
- * @param f1 The first float argument needed to execute this command.
- * @param f2 The second float argument needed to execute this command.
- * @param f3 The third float argument needed to execute this command.
- * @param i The integer argument needed to execute this command.
- * @param f4 The fourth float argument needed to execute this command.
- */
- public CommandObject(int cmd, boolean b1, boolean b2, boolean b3, String s, Object o, float f1, float f2, float f3,
- int i, float f4) {
- Command = cmd;
- intArgs = new int[1];
- floatArgs = new float[4];
- boolArgs = new boolean[3];
- stringArgs = new String[1];
- objectArgs = new Object[1];
- intArgs[0] = i;
- floatArgs[0] = f1;
- floatArgs[1] = f2;
- floatArgs[2] = f3;
- floatArgs[3] = f4;
- boolArgs[0] = b1;
- boolArgs[1] = b2;
- boolArgs[2] = b3;
- stringArgs[0] = s;
- objectArgs[0] = o;
- }
-
- /**
- * Constructor used to create a command which requires several arguments.
- *
- * @param cmd Which command to execute.
- * @param b1 The first boolean argument needed to execute this command.
- * @param b2 The second boolean argument needed to execute this command.
- * @param b3 The third boolean argument needed to execute this command.
- * @param s The String argument needed to execute this command.
- * @param o The Object argument needed to execute this command.
- * @param f1 The first float argument needed to execute this command.
- * @param f2 The second float argument needed to execute this command.
- * @param f3 The third float argument needed to execute this command.
- * @param i The integer argument needed to execute this command.
- * @param f4 The fourth float argument needed to execute this command.
- * @param b4 The fourth boolean argument needed to execute this command.
- */
- public CommandObject(int cmd, boolean b1, boolean b2, boolean b3, String s, Object o, float f1, float f2, float f3,
- int i, float f4, boolean b4) {
- Command = cmd;
- intArgs = new int[1];
- floatArgs = new float[4];
- boolArgs = new boolean[4];
- stringArgs = new String[1];
- objectArgs = new Object[1];
- intArgs[0] = i;
- floatArgs[0] = f1;
- floatArgs[1] = f2;
- floatArgs[2] = f3;
- floatArgs[3] = f4;
- boolArgs[0] = b1;
- boolArgs[1] = b2;
- boolArgs[2] = b3;
- boolArgs[3] = b4;
- stringArgs[0] = s;
- objectArgs[0] = o;
- }
-
- /**
- * Constructor used to create a command which requires several arguments.
- *
- * @param cmd Which command to execute.
- * @param o The Object argument needed to execute this command.
- * @param b The first boolean argument needed to execute this command.
- * @param s The String argument needed to execute this command.
- * @param f1 The first float argument needed to execute this command.
- * @param f2 The second float argument needed to execute this command.
- * @param f3 The third float argument needed to execute this command.
- * @param i The integer argument needed to execute this command.
- * @param f4 The fourth float argument needed to execute this command.
- */
- public CommandObject(int cmd, Object o, boolean b, String s, float f1, float f2, float f3, int i, float f4) {
- Command = cmd;
- intArgs = new int[1];
- floatArgs = new float[4];
- boolArgs = new boolean[1];
- stringArgs = new String[1];
- objectArgs = new Object[1];
- intArgs[0] = i;
- floatArgs[0] = f1;
- floatArgs[1] = f2;
- floatArgs[2] = f3;
- floatArgs[3] = f4;
- boolArgs[0] = b;
- stringArgs[0] = s;
- objectArgs[0] = o;
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/CommandThread.java b/src/lwjgl/java/paulscode/sound/CommandThread.java
deleted file mode 100644
index 9e874a4..0000000
--- a/src/lwjgl/java/paulscode/sound/CommandThread.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package paulscode.sound;
-
-/**
- * The CommandThread class is designed to move all command processing into a
- * single thread to be run in the background and avoid conflicts between
- * threads. Commands are processed in the order that they were queued. The
- * arguements for each command are stored in a
- * {@link paulscode.sound.CommandObject CommandObject}. The Command Queue is
- * located in the {@link paulscode.sound.SoundSystem SoundSystem} class. Calling
- * kill() stops the thread, and this should be immediatly followed by a call to
- * interrupt() to wake up the thread so it may end. This class also checks for
- * temporary sources that are finished playing, and removes them.
- *
- * NOTE: The command thread is created automatically by the sound system, so it
- * is unlikely that the user would ever need to use this class.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class CommandThread extends SimpleThread {
- /**
- * Processes status messages, warnings, and error messages.
- */
- protected SoundSystemLogger logger;
-
- /**
- * Handle to the Sound System. This is where the Command Queue is located.
- */
- private SoundSystem soundSystem;
-
- /**
- * Name of this class.
- */
- protected String className = "CommandThread";
-
- /**
- * Constructor: Takes a handle to the SoundSystem object as a parameter.
- *
- * @param s Handle to the SoundSystem.
- */
- public CommandThread(SoundSystem s) {
- // grab a handle to the message logger:
- logger = SoundSystemConfig.getLogger();
-
- soundSystem = s;
- }
-
- /**
- * Shuts the thread down and removes references to all instantiated objects.
- * NOTE: Method alive() will return false when cleanup() has finished.
- */
- @Override
- protected void cleanup() {
- kill();
-
- logger = null;
- soundSystem = null;
-
- super.cleanup(); // Important!
- }
-
- /**
- * The main loop for processing commands. The Command Thread starts out asleep,
- * and it sleeps again after it finishes processing commands, so it must be
- * interrupted when commands are queued for processing.
- */
- @Override
- public void run() {
- long previousTime = System.currentTimeMillis();
- long currentTime = previousTime;
-
- if (soundSystem == null) {
- errorMessage("SoundSystem was null in method run().", 0);
- cleanup();
- return;
- }
-
- // Start out asleep:
- snooze(3600000);
-
- while (!dying()) {
- // Perform user-specific source management:
- soundSystem.ManageSources();
-
- // Process all queued commands:
- soundSystem.CommandQueue(null);
-
- // Remove temporary sources every ten seconds:
- currentTime = System.currentTimeMillis();
- if ((!dying()) && ((currentTime - previousTime) > 10000)) {
- previousTime = currentTime;
- soundSystem.removeTemporarySources();
- }
-
- // Wait for more commands:
- if (!dying())
- snooze(3600000);
- }
-
- cleanup(); // Important!
- }
-
- /**
- * Prints a message.
- *
- * @param message Message to print.
- */
- protected void message(String message, int indent) {
- logger.message(message, indent);
- }
-
- /**
- * Prints an important message.
- *
- * @param message Message to print.
- */
- protected void importantMessage(String message, int indent) {
- logger.importantMessage(message, indent);
- }
-
- /**
- * Prints the specified message if error is true.
- *
- * @param error True or False.
- * @param message Message to print if error is true.
- * @return True if error is true.
- */
- protected boolean errorCheck(boolean error, String message) {
- return logger.errorCheck(error, className, message, 0);
- }
-
- /**
- * Prints an error message.
- *
- * @param message Message to print.
- */
- protected void errorMessage(String message, int indent) {
- logger.errorMessage(className, message, indent);
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/FilenameURL.java b/src/lwjgl/java/paulscode/sound/FilenameURL.java
deleted file mode 100644
index 0b2bb00..0000000
--- a/src/lwjgl/java/paulscode/sound/FilenameURL.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package paulscode.sound;
-
-import java.net.URL;
-
-/**
- * The FilenameURL class is designed to associate a String filename/identifier
- * with a URL. Handles either case where user supplies a String path or user
- * supplies a URL instance.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class FilenameURL {
- /**
- * Processes status messages, warnings, and error messages.
- */
- private SoundSystemLogger logger;
-
- /**
- * Filename or identifier for the file.
- */
- private String filename = null;
-
- /**
- * URL interface to the file.
- */
- private URL url = null;
-
- /**
- * Constructor: Saves handles to the url and identifier. The identifier should
- * look like a filename, and it must have the correct extension so SoundSystem
- * knows what format to use for the file referenced by the URL instance.
- *
- * @param url URL interface to a file.
- * @param identifier Identifier (filename) for the file.
- */
- public FilenameURL(URL url, String identifier) {
- // grab a handle to the message logger:
- logger = SoundSystemConfig.getLogger();
-
- filename = identifier;
- this.url = url;
- }
-
- /**
- * Constructor: Saves a handle to the filename (used later to generate a URL
- * instance). The file may either be located within the JAR or at an online
- * location. If the file is online, filename must begin with "http://", since
- * that is how SoundSystem recognizes URL names.
- *
- * @param filename Name of the file.
- */
- public FilenameURL(String filename) {
- // grab a handle to the message logger:
- logger = SoundSystemConfig.getLogger();
-
- this.filename = filename;
- url = null;
- }
-
- /**
- * Returns the filename/identifier.
- *
- * @return Filename or identifier for the file.
- */
- public String getFilename() {
- return filename;
- }
-
- /**
- * Returns the URL interface to the file. If a URL was not originally specified
- * in the constructor, then the first time this method is called it creates a
- * URL instance using the previously specified filename.
- *
- * @return URL interface to the file.
- */
- public URL getURL() {
- if (url == null) {
- // Check if the file is online or inside the JAR:
- if (filename.matches(SoundSystemConfig.PREFIX_URL)) {
- // Online
- try {
- url = new URL(filename);
- } catch (Exception e) {
- errorMessage("Unable to access online URL in " + "method 'getURL'");
- printStackTrace(e);
- return null;
- }
- } else {
- // Inside the JAR
- url = getClass().getClassLoader().getResource(SoundSystemConfig.getSoundFilesPackage() + filename);
- }
- }
- return url;
- }
-
- /**
- * Prints an error message.
- *
- * @param message Message to print.
- */
- private void errorMessage(String message) {
- logger.errorMessage("MidiChannel", message, 0);
- }
-
- /**
- * Prints an exception's error message followed by the stack trace.
- *
- * @param e Exception containing the information to print.
- */
- private void printStackTrace(Exception e) {
- logger.printStackTrace(e, 1);
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/ICodec.java b/src/lwjgl/java/paulscode/sound/ICodec.java
deleted file mode 100644
index e988acf..0000000
--- a/src/lwjgl/java/paulscode/sound/ICodec.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package paulscode.sound;
-
-import java.net.URL;
-import javax.sound.sampled.AudioFormat;
-
-/**
- * The ICodec interface provides a common interface for SoundSystem to use for
- * accessing external codec libraries.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public interface ICodec {
- /**
- * Should tell derived classes when they may need to reverse the byte order of
- * the data before returning it in the read() and readAll() methods. The reason
- * for the reversBytOrder method is because some external codec libraries
- * produce audio data in a format that some external audio libraries require to
- * be reversed. Derivatives of the Library and Source classes for audio
- * libraries which require this type of data to be reversed should call the
- * reverseByteOrder() method for all instances of ICodec that they use.
- * Derivatives of the ICodec interface for codec libraries which which produce
- * this type of data should use the reverseByteOrder() method to know when the
- * data needs to be reversed before returning it in the read() and readAll()
- * methods. If a particular codec library does not produce this type of data,
- * its derived ICodec class may disregard any calls to the reverseByteOrder()
- * method.
- *
- * @param b True if the calling audio library requires byte-reversal by some
- * codec libraries.
- */
- public void reverseByteOrder(boolean b);
-
- /**
- * Should make any preperations required before reading from the audio stream.
- * If another stream is already opened, it should be closed and a new audio
- * stream opened in its place. This method is used internally by SoundSystem not
- * only to initialize a stream, but also to rewind streams and to switch stream
- * sources on the fly.
- *
- * @return False if an error occurred or if end of stream was reached.
- */
- public boolean initialize(URL url);
-
- /**
- * Should return false if the stream is busy initializing. To prevent bad data
- * from being returned by this method, derived classes should internally
- * synchronize with any elements used by both the initialized() and initialize()
- * methods.
- *
- * @return True if steam is initialized.
- */
- public boolean initialized();
-
- /**
- * Should read in one stream buffer worth of audio data. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about accessing and changing default settings.
- *
- * @return The audio data wrapped into a SoundBuffer context.
- */
- public SoundBuffer read();
-
- /**
- * Should read in all the audio data from the stream (up to the default "maximum
- * file size". See {@link paulscode.sound.SoundSystemConfig SoundSystemConfig}
- * for more information about accessing and changing default settings.
- *
- * @return the audio data wrapped into a SoundBuffer context.
- */
- public SoundBuffer readAll();
-
- /**
- * Should return false if there is still more data available to be read in. To
- * prevent bad data from being returned by this method, derived classes should
- * internally synchronize with any elements used in both the endOfStream() and
- * the read() or readAll() methods.
- *
- * @return True if end of stream was reached.
- */
- public boolean endOfStream();
-
- /**
- * Should close any open streams and remove references to all instantiated
- * objects.
- */
- public void cleanup();
-
- /**
- * Should return the audio format of the data being returned by the read() and
- * readAll() methods.
- *
- * @return Information wrapped into an AudioFormat context.
- */
- public AudioFormat getAudioFormat();
-}
diff --git a/src/lwjgl/java/paulscode/sound/IStreamListener.java b/src/lwjgl/java/paulscode/sound/IStreamListener.java
deleted file mode 100644
index e9e6538..0000000
--- a/src/lwjgl/java/paulscode/sound/IStreamListener.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package paulscode.sound;
-
-public interface IStreamListener {
- /**
- * Notifies implementation that an End Of Stream was reached.
- *
- * @param sourcename String identifier of the source which reached the EOS.
- * @param queueSize Number of items left the the stream's play queue, or zero
- * if none.
- */
- public void endOfStream(String sourcename, int queueSize);
-}
diff --git a/src/lwjgl/java/paulscode/sound/Library.java b/src/lwjgl/java/paulscode/sound/Library.java
deleted file mode 100644
index 945d620..0000000
--- a/src/lwjgl/java/paulscode/sound/Library.java
+++ /dev/null
@@ -1,1479 +0,0 @@
-package paulscode.sound;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import javax.sound.sampled.AudioFormat;
-
-/**
- * The Library class is the class from which all library types are extended. It
- * provides generic methods for interfacing with the audio libraries supported
- * by the SoundSystem. Specific libraries should extend this class and override
- * the necessary methods. For consistant naming conventions, each sub-class
- * should have the name prefix "Library".
- *
- * This class may also be used as the "No Sound Library" (i.e. silent mode) if
- * no other audio libraries are supported by the host machine, or to mute all
- * sound.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class Library {
- /**
- * Processes status messages, warnings, and error messages.
- */
- private SoundSystemLogger logger;
-
- /**
- * Position and orientation of the listener.
- */
- protected ListenerData listener;
-
- /**
- * Map containing sound file data for easy lookup by filename / identifier.
- */
- protected HashMap bufferMap = null;
-
- /**
- * Map containing all created sources for easy look-up by name.
- */
- protected HashMap sourceMap; // (name, source data) pairs
-
- /**
- * Interface through which MIDI files can be played.
- */
- private MidiChannel midiChannel;
-
- /**
- * Array containing maximum number of non-streaming audio channels.
- */
- protected List streamingChannels;
-
- /**
- * Array containing maximum number of non-streaming audio channels.
- */
- protected List normalChannels;
-
- /**
- * Source name last played on each streaming channel.
- */
- private String[] streamingChannelSourceNames;
-
- /**
- * Source name last played on each non-streaming channel.
- */
- private String[] normalChannelSourceNames;
-
- /**
- * Increments through the steaming channel list as new sources are played.
- */
- private int nextStreamingChannel = 0;
-
- /**
- * Increments through the non-steaming channel list as new sources are played.
- */
- private int nextNormalChannel = 0;
-
- /**
- * Handles processing for all streaming sources.
- */
- protected StreamThread streamThread;
-
- /**
- * Whether or not the library requires reversal of audio data byte order.
- */
- protected boolean reverseByteOrder = false;
-
- /**
- * Constructor: Instantiates the source map and listener information. NOTES: The
- * 'super()' method should be at the top of constructors for all extended
- * classes. The varriable 'libraryType' should be given a new value in the
- * constructors for all extended classes.
- */
- public Library() throws SoundSystemException {
- // grab a handle to the message logger:
- logger = SoundSystemConfig.getLogger();
-
- // instantiate the buffer map:
- bufferMap = new HashMap();
-
- // instantiate the source map:
- sourceMap = new HashMap();
-
- listener = new ListenerData(0.0f, 0.0f, 0.0f, // position
- 0.0f, 0.0f, -1.0f, // look-at direction
- 0.0f, 1.0f, 0.0f, // up direction
- 0.0f); // angle
-
- streamingChannels = new LinkedList();
- normalChannels = new LinkedList();
- streamingChannelSourceNames = new String[SoundSystemConfig.getNumberStreamingChannels()];
- normalChannelSourceNames = new String[SoundSystemConfig.getNumberNormalChannels()];
-
- streamThread = new StreamThread();
- streamThread.start();
- }
-
- /* ########################################################################## */
- /* BEGIN OVERRIDE METHODS */
- /* */
- /* The following methods should be overrided as required */
- /* ########################################################################## */
-
- /**
- * Stops all sources, shuts down sound library, and removes references to all
- * instantiated objects.
- */
- public void cleanup() {
- streamThread.kill();
- streamThread.interrupt();
-
- // wait up to 5 seconds for stream thread to end:
- for (int i = 0; i < 50; i++) {
- if (!streamThread.alive())
- break;
- try {
- Thread.sleep(100);
- } catch (Exception e) {
- }
- }
-
- if (streamThread.alive()) {
- errorMessage("Stream thread did not die!");
- message("Ignoring errors... continuing clean-up.");
- }
-
- if (midiChannel != null) {
- midiChannel.cleanup();
- midiChannel = null;
- }
-
- Channel channel = null;
- if (streamingChannels != null) {
- while (!streamingChannels.isEmpty()) {
- channel = streamingChannels.remove(0);
- channel.close();
- channel.cleanup();
- channel = null;
- }
- streamingChannels.clear();
- streamingChannels = null;
- }
- if (normalChannels != null) {
- while (!normalChannels.isEmpty()) {
- channel = normalChannels.remove(0);
- channel.close();
- channel.cleanup();
- channel = null;
- }
- normalChannels.clear();
- normalChannels = null;
- }
-
- Set keys = sourceMap.keySet();
- Iterator iter = keys.iterator();
- String sourcename;
- Source source;
-
- // loop through and cleanup all the sources:
- while (iter.hasNext()) {
- sourcename = iter.next();
- source = sourceMap.get(sourcename);
- if (source != null)
- source.cleanup();
- }
- sourceMap.clear();
- sourceMap = null;
-
- listener = null;
- streamThread = null;
- }
-
- /**
- * Initializes the sound library.
- */
- public void init() throws SoundSystemException {
- Channel channel = null;
-
- // create the streaming channels:
- for (int x = 0; x < SoundSystemConfig.getNumberStreamingChannels(); x++) {
- channel = createChannel(SoundSystemConfig.TYPE_STREAMING);
- if (channel == null)
- break;
- streamingChannels.add(channel);
- }
- // create the non-streaming channels:
- for (int x = 0; x < SoundSystemConfig.getNumberNormalChannels(); x++) {
- channel = createChannel(SoundSystemConfig.TYPE_NORMAL);
- if (channel == null)
- break;
- normalChannels.add(channel);
- }
- }
-
- /**
- * Checks if the no-sound library type is compatible.
- *
- * @return True or false.
- */
- public static boolean libraryCompatible() {
- return true; // the no-sound library is always compatible.
- }
-
- /**
- * Creates a new channel of the specified type (normal or streaming). Possible
- * values for channel type can be found in the
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} class.
- *
- * @param type Type of channel.
- * @return The new channel.
- */
- protected Channel createChannel(int type) {
- return new Channel(type);
- }
-
- /**
- * Pre-loads a sound into memory.
- *
- * @param filenameURL Filename/URL of the sound file to load.
- * @return True if the sound loaded properly.
- */
- public boolean loadSound(FilenameURL filenameURL) {
- return true;
- }
-
- /**
- * Saves the specified sample data, under the specified identifier. This
- * identifier can be later used in place of 'filename' parameters to reference
- * the sample data.
- *
- * @param buffer the sample data and audio format to save.
- * @param identifier What to call the sample.
- * @return True if there weren't any problems.
- */
- public boolean loadSound(SoundBuffer buffer, String identifier) {
- return true;
- }
-
- /**
- * Returns the filenames of all previously loaded sounds.
- *
- * @return LinkedList of String filenames.
- */
- public LinkedList getAllLoadedFilenames() {
- LinkedList filenames = new LinkedList();
- Set keys = bufferMap.keySet();
- Iterator iter = keys.iterator();
-
- // loop through and update the volume of all sources:
- while (iter.hasNext()) {
- filenames.add(iter.next());
- }
-
- return filenames;
- }
-
- /**
- * Returns the sourcenames of all sources.
- *
- * @return LinkedList of String sourcenames.
- */
- public LinkedList getAllSourcenames() {
- LinkedList sourcenames = new LinkedList();
- Set keys = sourceMap.keySet();
- Iterator iter = keys.iterator();
-
- if (midiChannel != null)
- sourcenames.add(midiChannel.getSourcename());
-
- // loop through and update the volume of all sources:
- while (iter.hasNext()) {
- sourcenames.add(iter.next());
- }
-
- return sourcenames;
- }
-
- /**
- * Removes a pre-loaded sound from memory. This is a good method to use for
- * freeing up memory after a large sound file is no longer needed. NOTE: the
- * source will remain in memory after this method has been called, for as long
- * as the sound is attached to an existing source.
- *
- * @param filename Filename/identifier of the sound file to unload.
- */
- public void unloadSound(String filename) {
- bufferMap.remove(filename);
- }
-
- /**
- * Opens a direct line for streaming audio data.
- *
- * @param audioFormat Format that the data will be in.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param posX X position for this source.
- * @param posY Y position for this source.
- * @param posZ Z position for this source.
- * @param attModel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- */
- public void rawDataStream(AudioFormat audioFormat, boolean priority, String sourcename, float posX, float posY,
- float posZ, int attModel, float distOrRoll) {
- sourceMap.put(sourcename,
- new Source(audioFormat, priority, sourcename, posX, posY, posZ, attModel, distOrRoll));
- }
-
- /**
- * Creates a new source using the specified information.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param toStream Setting this to true will load the sound in pieces rather
- * than all at once.
- * @param toLoop Should this source loop, or play only once.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param filenameURL Filename/URL of the sound file to play at this source.
- * @param posX X position for this source.
- * @param posY Y position for this source.
- * @param posZ Z position for this source.
- * @param attModel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- */
- public void newSource(boolean priority, boolean toStream, boolean toLoop, String sourcename,
- FilenameURL filenameURL, float posX, float posY, float posZ, int attModel, float distOrRoll) {
- sourceMap.put(sourcename, new Source(priority, toStream, toLoop, sourcename, filenameURL, null, posX, posY,
- posZ, attModel, distOrRoll, false));
- }
-
- /**
- * Creates and immediately plays a new source that will be removed when it
- * finishes playing.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param toStream Setting this to true will load the sound in pieces rather
- * than all at once.
- * @param toLoop Should this source loop, or play only once.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param filenameURL The filename/URL of the sound file to play at this source.
- * @param posX X position for this source.
- * @param posY Y position for this source.
- * @param posZ Z position for this source.
- * @param attModel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- */
- public void quickPlay(boolean priority, boolean toStream, boolean toLoop, String sourcename,
- FilenameURL filenameURL, float posX, float posY, float posZ, int attModel, float distOrRoll, boolean tmp) {
- sourceMap.put(sourcename, new Source(priority, toStream, toLoop, sourcename, filenameURL, null, posX, posY,
- posZ, attModel, distOrRoll, tmp));
- }
-
- /**
- *
- * Defines whether or not the source should be removed after it finishes
- * playing.
- *
- * @param sourcename The source's name.
- * @param temporary True or False.
- */
- public void setTemporary(String sourcename, boolean temporary) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.setTemporary(temporary);
- }
-
- /**
- * Changes the specified source's position.
- *
- * @param sourcename The source's name.
- * @param x Destination X coordinate.
- * @param y Destination Y coordinate.
- * @param z Destination Z coordinate.
- */
- public void setPosition(String sourcename, float x, float y, float z) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.setPosition(x, y, z);
- }
-
- /**
- * Sets the specified source's priority factor. A priority source will not be
- * overriden if there are too many sources playing at once.
- *
- * @param sourcename The source's name.
- * @param pri True or False.
- */
- public void setPriority(String sourcename, boolean pri) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.setPriority(pri);
- }
-
- /**
- * Sets the specified source's looping parameter. If parameter lp is false, the
- * source will play once and stop.
- *
- * @param sourcename The source's name.
- * @param lp True or False.
- */
- public void setLooping(String sourcename, boolean lp) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.setLooping(lp);
- }
-
- /**
- * Sets the specified source's attenuation model.
- *
- * @param sourcename The source's name.
- * @param model Attenuation model to use.
- */
- public void setAttenuation(String sourcename, int model) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.setAttenuation(model);
- }
-
- /**
- * Sets the specified source's fade distance or rolloff factor.
- *
- * @param sourcename The source's name.
- * @param dr Fade distance or rolloff factor.
- */
- public void setDistOrRoll(String sourcename, float dr) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.setDistOrRoll(dr);
- }
-
- /**
- * Sets the specified source's velocity, for use in Doppler effect.
- *
- * @param sourcename The source's name.
- * @param x Velocity along world x-axis.
- * @param y Velocity along world y-axis.
- * @param z Velocity along world z-axis.
- */
- public void setVelocity(String sourcename, float x, float y, float z) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.setVelocity(x, y, z);
- }
-
- /**
- * Sets the listener's velocity, for use in Doppler effect.
- *
- * @param x Velocity along world x-axis.
- * @param y Velocity along world y-axis.
- * @param z Velocity along world z-axis.
- */
- public void setListenerVelocity(float x, float y, float z) {
- listener.setVelocity(x, y, z);
- }
-
- /**
- * Notifies the underlying library that the Doppler parameters have changed.
- */
- public void dopplerChanged() {
- }
-
- /**
- * Returns the number of miliseconds since the specified source began playing.
- *
- * @return miliseconds, or -1 if not playing or unable to calculate
- */
- public float millisecondsPlayed(String sourcename) {
- if (sourcename == null || sourcename.equals("")) {
- errorMessage("Sourcename not specified in method " + "'millisecondsPlayed'");
- return -1;
- }
-
- if (midiSourcename(sourcename)) {
- errorMessage("Unable to calculate milliseconds for MIDI source.");
- return -1;
- } else {
- Source source = sourceMap.get(sourcename);
- if (source == null) {
- errorMessage("Source '" + sourcename + "' not found in " + "method 'millisecondsPlayed'");
- }
- return source.millisecondsPlayed();
- }
- }
-
- /**
- * Feeds raw data through the specified source. The source must be a streaming
- * source and it can not be already associated with a file or URL to stream
- * from.
- *
- * @param sourcename Name of the streaming source to play from.
- * @param buffer Byte buffer containing raw audio data to stream.
- * @return Number of prior buffers that have been processed, or -1 if unable to
- * queue the buffer (if the source was culled, for example).
- */
- public int feedRawAudioData(String sourcename, byte[] buffer) {
- if (sourcename == null || sourcename.equals("")) {
- errorMessage("Sourcename not specified in method " + "'feedRawAudioData'");
- return -1;
- }
-
- if (midiSourcename(sourcename)) {
- errorMessage("Raw audio data can not be fed to the " + "MIDI channel.");
- return -1;
- } else {
- Source source = sourceMap.get(sourcename);
- if (source == null) {
- errorMessage("Source '" + sourcename + "' not found in " + "method 'feedRawAudioData'");
- }
- return feedRawAudioData(source, buffer);
- }
- }
-
- /**
- * Feeds raw data through the specified source. The source must be a streaming
- * source and it can not be already associated with a file or URL to stream
- * from.
- *
- * @param source Streaming source to play from.
- * @param buffer Byte buffer containing raw audio data to stream.
- * @return Number of prior buffers that have been processed, or -1 if unable to
- * queue the buffer (if the source was culled, for example).
- */
- public int feedRawAudioData(Source source, byte[] buffer) {
- if (source == null) {
- errorMessage("Source parameter null in method " + "'feedRawAudioData'");
- return -1;
- }
- if (!source.toStream) {
- errorMessage("Only a streaming source may be specified in " + "method 'feedRawAudioData'");
- return -1;
- }
- if (!source.rawDataStream) {
- errorMessage("Streaming source already associated with a " + "file or URL in method'feedRawAudioData'");
- return -1;
- }
-
- if (!source.playing() || source.channel == null) {
- Channel channel;
- if (source.channel != null && (source.channel.attachedSource == source))
- channel = source.channel;
- else
- channel = getNextChannel(source);
-
- int processed = source.feedRawAudioData(channel, buffer);
- channel.attachedSource = source;
- streamThread.watch(source);
- streamThread.interrupt();
- return processed;
- }
-
- return (source.feedRawAudioData(source.channel, buffer));
- }
-
- /**
- * Looks up the specified source and plays it.
- *
- * @param sourcename Name of the source to play.
- */
- public void play(String sourcename) {
- if (sourcename == null || sourcename.equals("")) {
- errorMessage("Sourcename not specified in method 'play'");
- return;
- }
-
- if (midiSourcename(sourcename)) {
- midiChannel.play();
- } else {
- Source source = sourceMap.get(sourcename);
- if (source == null) {
- errorMessage("Source '" + sourcename + "' not found in " + "method 'play'");
- }
- play(source);
- }
- }
-
- /**
- * Plays the specified source.
- *
- * @param source The source to play.
- */
- public void play(Source source) {
- if (source == null)
- return;
-
- // raw data streams will automatically play when data is sent to them,
- // so no need to do anything here.
- if (source.rawDataStream)
- return;
-
- if (!source.active())
- return;
-
- if (!source.playing()) {
- Channel channel = getNextChannel(source);
-
- if (source != null && channel != null) {
- if (source.channel != null && source.channel.attachedSource != source)
- source.channel = null;
- channel.attachedSource = source;
- source.play(channel);
- if (source.toStream) {
- streamThread.watch(source);
- streamThread.interrupt();
- }
- }
- }
- }
-
- /**
- * Stops the specified source.
- *
- * @param sourcename The source's name.
- */
- public void stop(String sourcename) {
- if (sourcename == null || sourcename.equals("")) {
- errorMessage("Sourcename not specified in method 'stop'");
- return;
- }
- if (midiSourcename(sourcename)) {
- midiChannel.stop();
- } else {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.stop();
- }
- }
-
- /**
- * Pauses the specified source.
- *
- * @param sourcename The source's name.
- */
- public void pause(String sourcename) {
- if (sourcename == null || sourcename.equals("")) {
- errorMessage("Sourcename not specified in method 'stop'");
- return;
- }
- if (midiSourcename(sourcename)) {
- midiChannel.pause();
- } else {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.pause();
- }
- }
-
- /**
- * Rewinds the specified source.
- *
- * @param sourcename The source's name.
- */
- public void rewind(String sourcename) {
- if (midiSourcename(sourcename)) {
- midiChannel.rewind();
- } else {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.rewind();
- }
- }
-
- /**
- * Clears all previously queued data from a stream.
- *
- * @param sourcename The source's name.
- */
- public void flush(String sourcename) {
- if (midiSourcename(sourcename))
- errorMessage("You can not flush the MIDI channel");
- else {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.flush();
- }
- }
-
- /**
- * Culls the specified source. A culled source will not play until it has been
- * activated again.
- *
- * @param sourcename The source's name.
- */
- public void cull(String sourcename) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.cull();
- }
-
- /**
- * Activates a previously culled source, so it can be played again.
- *
- * @param sourcename The source's name.
- */
- public void activate(String sourcename) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null) {
- mySource.activate();
- if (mySource.toPlay)
- play(mySource);
- }
- }
-
- /**
- * Sets the overall volume to the specified value, affecting all sources.
- *
- * @param value New volume, float value ( 0.0f - 1.0f ).
- */
- public void setMasterVolume(float value) {
- SoundSystemConfig.setMasterGain(value);
- if (midiChannel != null)
- midiChannel.resetGain();
- }
-
- /**
- * Manually sets the specified source's volume.
- *
- * @param sourcename The source's name.
- * @param value A float value ( 0.0f - 1.0f ).
- */
- public void setVolume(String sourcename, float value) {
- if (midiSourcename(sourcename)) {
- midiChannel.setVolume(value);
- } else {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null) {
- float newVolume = value;
- if (newVolume < 0.0f)
- newVolume = 0.0f;
- else if (newVolume > 1.0f)
- newVolume = 1.0f;
-
- mySource.sourceVolume = newVolume;
- mySource.positionChanged();
- }
- }
- }
-
- /**
- * Returns the current volume of the specified source, or zero if the specified
- * source was not found.
- *
- * @param sourcename Source to read volume from.
- * @return Float value representing the source volume (0.0f - 1.0f).
- */
- public float getVolume(String sourcename) {
- if (midiSourcename(sourcename)) {
- return midiChannel.getVolume();
- } else {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- return mySource.sourceVolume;
- else
- return 0.0f;
- }
- }
-
- /**
- * Manually sets the specified source's pitch.
- *
- * @param sourcename The source's name.
- * @param value A float value ( 0.5f - 2.0f ).
- */
- public void setPitch(String sourcename, float value) {
- if (!midiSourcename(sourcename)) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null) {
- float newPitch = value;
- if (newPitch < 0.5f)
- newPitch = 0.5f;
- else if (newPitch > 2.0f)
- newPitch = 2.0f;
-
- mySource.setPitch(newPitch);
- mySource.positionChanged();
- }
- }
- }
-
- /**
- * Returns the pitch of the specified source.
- *
- * @param sourcename The source's name.
- * @return Float value representing the source pitch (0.5f - 2.0f).
- */
- public float getPitch(String sourcename) {
- if (!midiSourcename(sourcename)) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- return mySource.getPitch();
- }
- return 1.0f;
- }
-
- /**
- * Moves the listener relative to the current position.
- *
- * @param x X offset.
- * @param y Y offset.
- * @param z Z offset.
- */
- public void moveListener(float x, float y, float z) {
- setListenerPosition(listener.position.x + x, listener.position.y + y, listener.position.z + z);
- }
-
- /**
- * Changes the listener's position.
- *
- * @param x Destination X coordinate.
- * @param y Destination Y coordinate.
- * @param z Destination Z coordinate.
- */
- public void setListenerPosition(float x, float y, float z) {
- // update listener's position
- listener.setPosition(x, y, z);
-
- Set keys = sourceMap.keySet();
- Iterator iter = keys.iterator();
- String sourcename;
- Source source;
-
- // loop through and update the volume of all sources:
- while (iter.hasNext()) {
- sourcename = iter.next();
- source = sourceMap.get(sourcename);
- if (source != null)
- source.positionChanged();
- }
- }
-
- /**
- * Turn the listener 'angle' radians counterclockwise around the y-Axis,
- * relative to the current angle.
- *
- * @param angle Angle in radians.
- */
- public void turnListener(float angle) {
- setListenerAngle(listener.angle + angle);
-
- Set keys = sourceMap.keySet();
- Iterator iter = keys.iterator();
- String sourcename;
- Source source;
-
- // loop through and update the volume of all sources:
- while (iter.hasNext()) {
- sourcename = iter.next();
- source = sourceMap.get(sourcename);
- if (source != null)
- source.positionChanged();
- }
- }
-
- /**
- * Changes the listeners orientation to the specified 'angle' radians
- * counterclockwise around the y-Axis.
- *
- * @param angle Angle in radians.
- */
- public void setListenerAngle(float angle) {
- listener.setAngle(angle);
-
- Set keys = sourceMap.keySet();
- Iterator iter = keys.iterator();
- String sourcename;
- Source source;
-
- // loop through and update the volume of all sources:
- while (iter.hasNext()) {
- sourcename = iter.next();
- source = sourceMap.get(sourcename);
- if (source != null)
- source.positionChanged();
- }
- }
-
- /**
- * Changes the listeners orientation using the specified coordinates.
- *
- * @param lookX X element of the look-at direction.
- * @param lookY Y element of the look-at direction.
- * @param lookZ Z element of the look-at direction.
- * @param upX X element of the up direction.
- * @param upY Y element of the up direction.
- * @param upZ Z element of the up direction.
- */
- public void setListenerOrientation(float lookX, float lookY, float lookZ, float upX, float upY, float upZ) {
- listener.setOrientation(lookX, lookY, lookZ, upX, upY, upZ);
-
- Set keys = sourceMap.keySet();
- Iterator iter = keys.iterator();
- String sourcename;
- Source source;
-
- // loop through and update the volume of all sources:
- while (iter.hasNext()) {
- sourcename = iter.next();
- source = sourceMap.get(sourcename);
- if (source != null)
- source.positionChanged();
- }
- }
-
- /**
- * Changes the listeners position and orientation using the specified listener
- * data.
- *
- * @param l Listener data to use.
- */
- public void setListenerData(ListenerData l) {
- listener.setData(l);
- }
-
- /**
- * Creates sources based on the source map provided.
- *
- * @param srcMap Sources to copy.
- */
- public void copySources(HashMap srcMap) {
- if (srcMap == null)
- return;
- Set keys = srcMap.keySet();
- Iterator iter = keys.iterator();
- String sourcename;
- Source srcData;
-
- // remove any existing sources before starting:
- sourceMap.clear();
-
- // loop through and copy all the sources:
- while (iter.hasNext()) {
- sourcename = iter.next();
- srcData = srcMap.get(sourcename);
- if (srcData != null) {
- loadSound(srcData.filenameURL);
- sourceMap.put(sourcename, new Source(srcData, null));
- }
- }
- }
-
- /**
- * Stops and deletes the specified source.
- *
- * @param sourcename The source's name.
- */
- public void removeSource(String sourcename) {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null) {
- // if this is a streaming source just mark it removed -
- // https://github.com/MinecraftForge/MinecraftForge/pull/4765
- if (mySource.toStream)
- mySource.removed = true;
- else
- mySource.cleanup(); // end the source, free memory
- }
- sourceMap.remove(sourcename);
- }
-
- /**
- * Searches for and removes all temporary sources that have finished playing.
- */
- public void removeTemporarySources() {
- Set keys = sourceMap.keySet();
- Iterator iter = keys.iterator();
- String sourcename;
- Source srcData;
-
- // loop through and cleanup all the sources:
- while (iter.hasNext()) {
- sourcename = iter.next();
- srcData = sourceMap.get(sourcename);
- if ((srcData != null) && (srcData.temporary) && (!srcData.playing())) {
- srcData.cleanup(); // end the source, free memory
- iter.remove();
- }
- }
- }
-
- /* ########################################################################## */
- /* END OVERRIDE METHODS */
- /* ########################################################################## */
-
- /**
- * Returns a handle to the next available channel. If the specified source is a
- * normal source, a normal channel is returned, and if it is a streaming source,
- * then a streaming channel is returned. If all channels of the required type
- * are currently playing, then the next channel playing a non-priority source is
- * returned. If no channels are available (i.e. they are all playing priority
- * sources) then getNextChannel returns null.
- *
- * @param source Source to find a channel for.
- * @return The next available channel, or null.
- */
- private Channel getNextChannel(Source source) {
- if (source == null)
- return null;
-
- String sourcename = source.sourcename;
- if (sourcename == null)
- return null;
-
- int x;
- int channels;
- int nextChannel;
- List channelList;
- String[] sourceNames;
- String name;
-
- if (source.toStream) {
- nextChannel = nextStreamingChannel;
- channelList = streamingChannels;
- sourceNames = streamingChannelSourceNames;
- } else {
- nextChannel = nextNormalChannel;
- channelList = normalChannels;
- sourceNames = normalChannelSourceNames;
- }
-
- channels = channelList.size();
-
- // Check if this source is already on a channel:
- for (x = 0; x < channels; x++) {
- if (sourcename.equals(sourceNames[x]))
- return channelList.get(x);
- }
-
- int n = nextChannel;
- Source src;
- // Play on the next new or non-playing channel:
- for (x = 0; x < channels; x++) {
- name = sourceNames[n];
- if (name == null)
- src = null;
- else
- src = sourceMap.get(name);
-
- if (src == null || !src.playing()) {
- if (source.toStream) {
- nextStreamingChannel = n + 1;
- if (nextStreamingChannel >= channels)
- nextStreamingChannel = 0;
- } else {
- nextNormalChannel = n + 1;
- if (nextNormalChannel >= channels)
- nextNormalChannel = 0;
- }
- sourceNames[n] = sourcename;
- return channelList.get(n);
- }
- n++;
- if (n >= channels)
- n = 0;
- }
-
- n = nextChannel;
- // Play on the next non-priority channel:
- for (x = 0; x < channels; x++) {
- name = sourceNames[n];
- if (name == null)
- src = null;
- else
- src = sourceMap.get(name);
-
- if (src == null || !src.playing() || !src.priority) {
- if (source.toStream) {
- nextStreamingChannel = n + 1;
- if (nextStreamingChannel >= channels)
- nextStreamingChannel = 0;
- } else {
- nextNormalChannel = n + 1;
- if (nextNormalChannel >= channels)
- nextNormalChannel = 0;
- }
- sourceNames[n] = sourcename;
- return channelList.get(n);
- }
- n++;
- if (n >= channels)
- n = 0;
- }
-
- return null;
- }
-
- /**
- * Plays all sources whose 'toPlay' varriable is true but are not currently
- * playing (such as sources which were culled while looping and then
- * reactivated).
- */
- public void replaySources() {
- Set keys = sourceMap.keySet();
- Iterator iter = keys.iterator();
- String sourcename;
- Source source;
-
- // loop through and cleanup all the sources:
- while (iter.hasNext()) {
- sourcename = iter.next();
- source = sourceMap.get(sourcename);
- if (source != null) {
- if (source.toPlay && !source.playing()) {
- play(sourcename);
- source.toPlay = false;
- }
- }
- }
- }
-
- /**
- * If the specified source is a streaming source or MIDI source, this method
- * queues up the next sound to play when the previous playback ends. This method
- * has no effect on non-streaming sources.
- *
- * @param sourcename Source identifier.
- * @param filenameURL Filename/URL of the sound file to play next.
- */
- public void queueSound(String sourcename, FilenameURL filenameURL) {
- if (midiSourcename(sourcename)) {
- midiChannel.queueSound(filenameURL);
- } else {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.queueSound(filenameURL);
- }
- }
-
- /**
- * Removes the first occurrence of the specified filename from the specified
- * source's list of sounds to play when previous playback ends. This method has
- * no effect on non-streaming sources.
- *
- * @param sourcename Source identifier.
- * @param filename Filename/identifier of the sound file to remove from the
- * queue.
- */
- public void dequeueSound(String sourcename, String filename) {
- if (midiSourcename(sourcename)) {
- midiChannel.dequeueSound(filename);
- } else {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.dequeueSound(filename);
- }
- }
-
- /**
- * Fades out the volume of whatever the specified source is currently playing,
- * then begins playing the specified file at the source's previously assigned
- * volume level. If the filenameURL parameter is null or empty, the specified
- * source will simply fade out and stop. The miliseconds parameter must be
- * non-negative or zero. This method will remove anything that is currently in
- * the specified source's list of queued sounds that would have played next when
- * the current sound finished playing. This method may only be used for
- * streaming and MIDI sources.
- *
- * @param sourcename Name of the source to fade out.
- * @param filenameURL Filename/URL of the sound file to play next, or null for
- * none.
- * @param milis Number of miliseconds the fadeout should take.
- */
- public void fadeOut(String sourcename, FilenameURL filenameURL, long milis) {
- if (midiSourcename(sourcename)) {
- midiChannel.fadeOut(filenameURL, milis);
- } else {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.fadeOut(filenameURL, milis);
- }
- }
-
- /**
- * Fades out the volume of whatever the specified source is currently playing,
- * then fades the volume back in playing the specified file. Final volume after
- * fade-in completes will be equal to the source's previously assigned volume
- * level. The filenameURL parameter may not be null or empty. The miliseconds
- * parameters must be non-negative or zero. This method will remove anything
- * that is currently in the specified source's list of queued sounds that would
- * have played next when the current sound finished playing. This method may
- * only be used for streaming and MIDI sources.
- *
- * @param sourcename Name of the source to fade out/in.
- * @param filenameURL Filename/URL of the sound file to play next, or null for
- * none.
- * @param milisOut Number of miliseconds the fadeout should take.
- * @param milisIn Number of miliseconds the fadein should take.
- */
- public void fadeOutIn(String sourcename, FilenameURL filenameURL, long milisOut, long milisIn) {
- if (midiSourcename(sourcename)) {
- midiChannel.fadeOutIn(filenameURL, milisOut, milisIn);
- } else {
- Source mySource = sourceMap.get(sourcename);
- if (mySource != null)
- mySource.fadeOutIn(filenameURL, milisOut, milisIn);
- }
- }
-
- /**
- * Makes sure the current volume levels of streaming sources and MIDI are
- * correct. This method is designed to help reduce the "jerky" fading behavior
- * that happens when using some library and codec pluggins (such as
- * LibraryJavaSound and CodecJOrbis). This method has no effect on normal
- * "non-streaming" sources. It would normally be called somewhere in the main
- * "game loop". IMPORTANT: To optimize frame-rates, do not call this method for
- * every frame. It is better to just call this method at some acceptable
- * "granularity" (play around with different granularities to find what sounds
- * acceptable for a particular situation).
- */
- public void checkFadeVolumes() {
- if (midiChannel != null)
- midiChannel.resetGain();
- Channel c;
- Source s;
- for (int x = 0; x < streamingChannels.size(); x++) {
- c = streamingChannels.get(x);
- if (c != null) {
- s = c.attachedSource;
- if (s != null)
- s.checkFadeOut();
- }
- }
- c = null;
- s = null;
- }
-
- /**
- * Loads the specified MIDI file, and saves the source information about it.
- *
- * @param toLoop Midi file should loop or play once.
- * @param sourcename Source identifier.
- * @param filenameURL Filename/URL of the MIDI file to load.
- */
- public void loadMidi(boolean toLoop, String sourcename, FilenameURL filenameURL) {
- if (filenameURL == null) {
- errorMessage("Filename/URL not specified in method 'loadMidi'.");
- return;
- }
-
- if (!filenameURL.getFilename().matches(SoundSystemConfig.EXTENSION_MIDI)) {
- errorMessage("Filename/identifier doesn't end in '.mid' or" + "'.midi' in method loadMidi.");
- return;
- }
-
- if (midiChannel == null) {
- midiChannel = new MidiChannel(toLoop, sourcename, filenameURL);
- } else {
- midiChannel.switchSource(toLoop, sourcename, filenameURL);
- }
- }
-
- /**
- * Unloads the current Midi file.
- */
- public void unloadMidi() {
- if (midiChannel != null)
- midiChannel.cleanup();
- midiChannel = null;
- }
-
- /**
- * Checks if the sourcename matches the midi source.
- *
- * @param sourcename Source identifier.
- * @return True if sourcename and midi sourcename match.
- */
- public boolean midiSourcename(String sourcename) {
- if (midiChannel == null || sourcename == null)
- return false;
-
- if (midiChannel.getSourcename() == null || sourcename.equals(""))
- return false;
-
- if (sourcename.equals(midiChannel.getSourcename()))
- return true;
-
- return false;
- }
-
- /**
- *
- * Returns the Source object identified by the specified name.
- *
- * @param sourcename The source's name.
- * @return The source, or null if not found.
- */
- public Source getSource(String sourcename) {
- return sourceMap.get(sourcename);
- }
-
- /**
- *
- * Returns a handle to the MIDI channel, or null if one does not exist.
- *
- * @return The MIDI channel.
- */
- public MidiChannel getMidiChannel() {
- return midiChannel;
- }
-
- /**
- *
- * Specifies the MIDI channel to use.
- *
- * @param c New MIDI channel.
- */
- public void setMidiChannel(MidiChannel c) {
- if (midiChannel != null && midiChannel != c)
- midiChannel.cleanup();
-
- midiChannel = c;
- }
-
- /**
- * Tells all the sources that the listener has moved.
- */
- public void listenerMoved() {
- Set keys = sourceMap.keySet();
- Iterator iter = keys.iterator();
- String sourcename;
- Source srcData;
-
- // loop through and copy all the sources:
- while (iter.hasNext()) {
- sourcename = iter.next();
- srcData = sourceMap.get(sourcename);
- if (srcData != null) {
- srcData.listenerMoved();
- }
- }
- }
-
- /**
- * Returns the sources map.
- *
- * @return Map of all sources.
- */
- public HashMap getSources() {
- return sourceMap;
- }
-
- /**
- * Returns information about the listener.
- *
- * @return A ListenerData object.
- */
- public ListenerData getListenerData() {
- return listener;
- }
-
- /**
- * Indicates whether or not this library requires some codecs to reverse-order
- * the audio data they generate.
- *
- * @return True if audio data should be reverse-ordered.
- */
- public boolean reverseByteOrder() {
- return reverseByteOrder;
- }
-
- /**
- * Returns the short title of this library type.
- *
- * @return A short title.
- */
- public static String getTitle() {
- return "No Sound";
- }
-
- /**
- * Returns a longer description of this library type.
- *
- * @return A longer description.
- */
- public static String getDescription() {
- return "Silent Mode";
- }
-
- /**
- * Returns the name of the class.
- *
- * @return "Library" + library title.
- */
- public String getClassName() {
- return "Library";
- }
-
- /**
- * Prints a message.
- *
- * @param message Message to print.
- */
- protected void message(String message) {
- logger.message(message, 0);
- }
-
- /**
- * Prints an important message.
- *
- * @param message Message to print.
- */
- protected void importantMessage(String message) {
- logger.importantMessage(message, 0);
- }
-
- /**
- * Prints the specified message if error is true.
- *
- * @param error True or False.
- * @param message Message to print if error is true.
- * @return True if error is true.
- */
- protected boolean errorCheck(boolean error, String message) {
- return logger.errorCheck(error, getClassName(), message, 0);
- }
-
- /**
- * Prints an error message.
- *
- * @param message Message to print.
- */
- protected void errorMessage(String message) {
- logger.errorMessage(getClassName(), message, 0);
- }
-
- /**
- * Prints an exception's error message followed by the stack trace.
- *
- * @param e Exception containing the information to print.
- */
- protected void printStackTrace(Exception e) {
- logger.printStackTrace(e, 1);
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/ListenerData.java b/src/lwjgl/java/paulscode/sound/ListenerData.java
deleted file mode 100644
index e2033b4..0000000
--- a/src/lwjgl/java/paulscode/sound/ListenerData.java
+++ /dev/null
@@ -1,276 +0,0 @@
-package paulscode.sound;
-
-/**
- * The listenerData class is used to store information about the listener's
- * position and orientation. A ListenerData object can be obtained using
- * SoundSystem's getListenerData() method. See {@link paulscode.sound.Vector3D
- * Vector3D} for more information about 3D coordinates and vectors.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class ListenerData {
- /**
- * Listener's position in 3D space
- */
- public Vector3D position;
- /**
- * A normalized vector indicating the direction the listener is facing
- */
- public Vector3D lookAt;
- /**
- * A normalized vector indicating the up direction
- */
- public Vector3D up;
- /**
- * Listener's velocity in world-space
- */
- public Vector3D velocity;
-
- /**
- * Used for easy rotation along the x/z plane (for use in a first-person shooter
- * type of application).
- */
- public float angle = 0.0f;
-
- /**
- * Constructor: Set this listener data to the origin facing along the z-axis
- */
- public ListenerData() {
- position = new Vector3D(0.0f, 0.0f, 0.0f);
- lookAt = new Vector3D(0.0f, 0.0f, -1.0f);
- up = new Vector3D(0.0f, 1.0f, 0.0f);
- velocity = new Vector3D(0.0f, 0.0f, 0.0f);
- angle = 0.0f;
- }
-
- /**
- * Constructor: Set this listener data to the specified values for position and
- * orientation.
- *
- * @param pX Listener's X coordinate.
- * @param pY Listener's Y coordinate.
- * @param pZ Listener's Z coordinate.
- * @param lX X element of the look-at direction.
- * @param lY Y element of the look-at direction.
- * @param lZ Z element of the look-at direction.
- * @param uX X element of the up direction.
- * @param uY Y element of the up direction.
- * @param uZ Z element of the up direction.
- * @param a Angle in radians that the listener is turned counterclockwise
- * around the y-axis.
- */
- public ListenerData(float pX, float pY, float pZ, float lX, float lY, float lZ, float uX, float uY, float uZ,
- float a) {
- position = new Vector3D(pX, pY, pZ);
- lookAt = new Vector3D(lX, lY, lZ);
- up = new Vector3D(uX, uY, uZ);
- velocity = new Vector3D(0.0f, 0.0f, 0.0f);
- angle = a;
- }
-
- /**
- * Constructor: Set this listener data to the specified values for position and
- * orientation.
- *
- * @param p Position of the listener in 3D space.
- * @param l Normalized vector indicating the direction which the listener is
- * facing.
- * @param u Normalized vector indicating the up direction.
- * @param a Angle in radians that the listener is turned counterclockwise around
- * the y-axis.
- */
- public ListenerData(Vector3D p, Vector3D l, Vector3D u, float a) {
- position = p.clone();
- lookAt = l.clone();
- up = u.clone();
- velocity = new Vector3D(0.0f, 0.0f, 0.0f);
- angle = a;
- }
-
- /**
- * Change this listener data using the specified coordinates for position and
- * orientation.
- *
- * @param pX Listener's X coordinate.
- * @param pY Listener's Y coordinate.
- * @param pZ Listener's Z coordinate.
- * @param lX X element of the look-at direction.
- * @param lY Y element of the look-at direction.
- * @param lZ Z element of the look-at direction.
- * @param uX X element of the up direction.
- * @param uY Y element of the up direction.
- * @param uZ Z element of the up direction.
- * @param a Angle in radians that the listener is turned counterclockwise
- * around the y-axis.
- */
- public void setData(float pX, float pY, float pZ, float lX, float lY, float lZ, float uX, float uY, float uZ,
- float a) {
- position.x = pX;
- position.y = pY;
- position.z = pZ;
- lookAt.x = lX;
- lookAt.y = lY;
- lookAt.z = lZ;
- up.x = uX;
- up.y = uY;
- up.z = uZ;
- angle = a;
- }
-
- /**
- * Change this listener data using the specified 3D vectors for position and
- * orientation.
- *
- * @param p Position of the listener in 3D space.
- * @param l Normalized vector indicating the direction which the listener is
- * facing.
- * @param u Normalized vector indicating the up direction.
- * @param a Angle in radians that the listener is turned counterclockwise around
- * the y-axis.
- */
- public void setData(Vector3D p, Vector3D l, Vector3D u, float a) {
- position.x = p.x;
- position.y = p.y;
- position.z = p.z;
- lookAt.x = l.x;
- lookAt.y = l.y;
- lookAt.z = l.z;
- up.x = u.x;
- up.y = u.y;
- up.z = u.z;
- angle = a;
- }
-
- /**
- * Change this listener data to match the specified listener data.
- *
- * @param l Listener data to use.
- */
- public void setData(ListenerData l) {
- position.x = l.position.x;
- position.y = l.position.y;
- position.z = l.position.z;
- lookAt.x = l.lookAt.x;
- lookAt.y = l.lookAt.y;
- lookAt.z = l.lookAt.z;
- up.x = l.up.x;
- up.y = l.up.y;
- up.z = l.up.z;
- angle = l.angle;
- }
-
- /**
- * Change this listener's position using the specified coordinates.
- *
- * @param x Listener's X coordinate.
- * @param y Listener's Y coordinate.
- * @param z Listener's Z coordinate.
- */
- public void setPosition(float x, float y, float z) {
- position.x = x;
- position.y = y;
- position.z = z;
- }
-
- /**
- * Change this listener's position using the specified vector.
- *
- * @param p New position.
- */
- public void setPosition(Vector3D p) {
- position.x = p.x;
- position.y = p.y;
- position.z = p.z;
- }
-
- /**
- * Changes the listeners orientation using the specified coordinates.
- *
- * @param lX X element of the look-at direction.
- * @param lY Y element of the look-at direction.
- * @param lZ Z element of the look-at direction.
- * @param uX X element of the up direction.
- * @param uY Y element of the up direction.
- * @param uZ Z element of the up direction.
- */
- public void setOrientation(float lX, float lY, float lZ, float uX, float uY, float uZ) {
- lookAt.x = lX;
- lookAt.y = lY;
- lookAt.z = lZ;
- up.x = uX;
- up.y = uY;
- up.z = uZ;
- }
-
- /**
- * Changes the listeners orientation using the specified vectors.
- *
- * @param l Normalized vector representing the look-at direction.
- * @param u Normalized vector representing the up direction.
- */
- public void setOrientation(Vector3D l, Vector3D u) {
- lookAt.x = l.x;
- lookAt.y = l.y;
- lookAt.z = l.z;
- up.x = u.x;
- up.y = u.y;
- up.z = u.z;
- }
-
- /**
- * Change this listener's velocity in world-space.
- *
- * @param v New velocity.
- */
- public void setVelocity(Vector3D v) {
- velocity.x = v.x;
- velocity.y = v.y;
- velocity.z = v.z;
- }
-
- /**
- * Change this listener's velocity in world-space.
- *
- * @param x New velocity along world x-axis.
- * @param y New velocity along world y-axis.
- * @param z New velocity along world z-axis.
- */
- public void setVelocity(float x, float y, float z) {
- velocity.x = x;
- velocity.y = y;
- velocity.z = z;
- }
-
- /**
- * Sets the listener's angle counterclockwise around the y-axis.
- *
- * @param a Angle in radians.
- */
- public void setAngle(float a) {
- angle = a;
- lookAt.x = -1.0f * (float) Math.sin(angle);
- lookAt.z = -1.0f * (float) Math.cos(angle);
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/MidiChannel.java b/src/lwjgl/java/paulscode/sound/MidiChannel.java
deleted file mode 100644
index 7da7ba8..0000000
--- a/src/lwjgl/java/paulscode/sound/MidiChannel.java
+++ /dev/null
@@ -1,1370 +0,0 @@
-package paulscode.sound;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import javax.sound.midi.InvalidMidiDataException;
-import javax.sound.midi.MetaEventListener;
-import javax.sound.midi.MetaMessage;
-import javax.sound.midi.MidiDevice;
-import javax.sound.midi.MidiSystem;
-import javax.sound.midi.MidiUnavailableException;
-import javax.sound.midi.Receiver;
-import javax.sound.midi.Sequence;
-import javax.sound.midi.Sequencer;
-import javax.sound.midi.ShortMessage;
-import javax.sound.midi.Synthesizer;
-
-/**
- * The MidiChannel class provides an interface for playing MIDI files, using the
- * JavaSound API. For more information about the JavaSound API, visit
- * http://java.sun.com/products/java-media/sound/
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class MidiChannel implements MetaEventListener {
- /**
- * Processes status messages, warnings, and error messages.
- */
- private SoundSystemLogger logger;
-
- /**
- * Filename/URL to the file:
- */
- private FilenameURL filenameURL;
-
- /**
- * Unique source identifier for this MIDI source.
- */
- private String sourcename;
-
- /**
- * Global identifier for the MIDI "change volume" event.
- */
- private static final int CHANGE_VOLUME = 7;
-
- /**
- * Global identifier for the MIDI "end of track" event.
- */
- private static final int END_OF_TRACK = 47;
-
- /**
- * Used to return a current value from one of the synchronized boolean-interface
- * methods.
- */
- private static final boolean GET = false;
-
- /**
- * Used to set the value in one of the synchronized boolean-interface methods.
- */
- private static final boolean SET = true;
-
- /**
- * Used when a parameter for one of the synchronized boolean-interface methods
- * is not aplicable.
- */
- private static final boolean XXX = false;
-
- /**
- * Runs the assigned sequence, passing information on to the synthesizer for
- * playback.
- */
- private Sequencer sequencer = null;
-
- /**
- * Converts MIDI events into audio.
- */
- private Synthesizer synthesizer = null;
-
- /**
- * Converts MIDI events into audio if there is no default Synthesizer.
- */
- private MidiDevice synthDevice = null;
-
- /**
- * Sequence of MIDI events defining sound.
- */
- private Sequence sequence = null;
-
- /**
- * Should playback loop or play only once.
- */
- private boolean toLoop = true;
-
- /**
- * Playback volume, float value (0.0f - 1.0f).
- */
- private float gain = 1.0f;
-
- /**
- * True while sequencer is busy being set up.
- */
- private boolean loading = true;
-
- /**
- * The list of MIDI files to play when the current sequence finishes.
- */
- private LinkedList sequenceQueue = null;
-
- /**
- * Ensures that only one thread accesses the sequenceQueue at a time.
- */
- private final Object sequenceQueueLock = new Object();
-
- /**
- * Specifies the gain factor used for the fade-out effect, or -1 when playback
- * is not currently fading out.
- */
- protected float fadeOutGain = -1.0f;
-
- /**
- * Specifies the gain factor used for the fade-in effect, or 1 when playback is
- * not currently fading in.
- */
- protected float fadeInGain = 1.0f;
-
- /**
- * Specifies the number of miliseconds it should take to fade out.
- */
- protected long fadeOutMilis = 0;
-
- /**
- * Specifies the number of miliseconds it should take to fade in.
- */
- protected long fadeInMilis = 0;
-
- /**
- * System time in miliseconds when the last fade in/out volume check occurred.
- */
- protected long lastFadeCheck = 0;
-
- /**
- * Used for fading in and out effects.
- */
- private FadeThread fadeThread = null;
-
- /**
- * Constructor: Defines the basic source information.
- *
- * @param toLoop Should playback loop or play only once?
- * @param sourcename Unique identifier for this source.
- * @param filename Name of the MIDI file to play.
- */
- public MidiChannel(boolean toLoop, String sourcename, String filename) {
- // let others know we are busy loading:
- loading(SET, true);
-
- // grab a handle to the message logger:
- logger = SoundSystemConfig.getLogger();
-
- // save information about the source:
- filenameURL(SET, new FilenameURL(filename));
- sourcename(SET, sourcename);
- setLooping(toLoop);
-
- // initialize the MIDI channel:
- init();
-
- // finished loading:
- loading(SET, false);
- }
-
- /**
- * Constructor: Defines the basic source information. The fourth parameter,
- * 'identifier' should look like a filename, and it must have the correct
- * extension (.mid or .midi).
- *
- * @param toLoop Should playback loop or play only once?
- * @param sourcename Unique identifier for this source.
- * @param midiFile URL to the MIDI file to play.
- * @param identifier Filename/identifier for the MIDI file.
- */
- public MidiChannel(boolean toLoop, String sourcename, URL midiFile, String identifier) {
- // let others know we are busy loading
- loading(SET, true);
-
- // grab a handle to the message logger:
- logger = SoundSystemConfig.getLogger();
-
- // save information about the source:
- filenameURL(SET, new FilenameURL(midiFile, identifier));
- sourcename(SET, sourcename);
- setLooping(toLoop);
-
- // initialize the MIDI channel:
- init();
-
- // finished loading:
- loading(SET, false);
- }
-
- /**
- * Constructor: Defines the basic source information.
- *
- * @param toLoop Should playback loop or play only once?
- * @param sourcename Unique identifier for this source.
- * @param midiFilenameURL Filename/URL to the MIDI file to play.
- */
- public MidiChannel(boolean toLoop, String sourcename, FilenameURL midiFilenameURL) {
- // let others know we are busy loading
- loading(SET, true);
-
- // grab a handle to the message logger:
- logger = SoundSystemConfig.getLogger();
-
- // save information about the source:
- filenameURL(SET, midiFilenameURL);
- sourcename(SET, sourcename);
- setLooping(toLoop);
-
- // initialize the MIDI channel:
- init();
-
- // finished loading:
- loading(SET, false);
- }
-
- /**
- * Initializes the sequencer, loads the sequence, and sets up the synthesizer.
- */
- private void init() {
- // Load a sequencer:
- getSequencer();
-
- // Load the sequence to play:
- setSequence(filenameURL(GET, null).getURL());
-
- // Load a synthesizer to play the sequence on:
- getSynthesizer();
-
- // Ensure the initial volume is correct:
- // (TODO: doesn't always work??)
- resetGain();
- }
-
- /**
- * Shuts the channel down and removes references to all instantiated objects.
- */
- public void cleanup() {
- loading(SET, true);
- setLooping(true);
-
- if (sequencer != null) {
- try {
- sequencer.stop();
- sequencer.close();
- sequencer.removeMetaEventListener(this);
- } catch (Exception e) {
- }
- }
-
- logger = null;
- sequencer = null;
- synthesizer = null;
- sequence = null;
-
- synchronized (sequenceQueueLock) {
- if (sequenceQueue != null)
- sequenceQueue.clear();
- sequenceQueue = null;
- }
-
- // End the fade effects thread if it exists:
- if (fadeThread != null) {
- boolean killException = false;
- try {
- fadeThread.kill(); // end the fade effects thread.
- fadeThread.interrupt(); // wake the thread up so it can end.
- } catch (Exception e) {
- killException = true;
- }
-
- if (!killException) {
- // wait up to 5 seconds for fade effects thread to end:
- for (int i = 0; i < 50; i++) {
- if (!fadeThread.alive())
- break;
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- }
- }
- }
-
- // Let user know if there was a problem ending the fade thread
- if (killException || fadeThread.alive()) {
- errorMessage("MIDI fade effects thread did not die!");
- message("Ignoring errors... continuing clean-up.");
- }
- }
-
- fadeThread = null;
-
- loading(SET, false);
- }
-
- /**
- * Queues up the next MIDI sequence to play when the previous sequence ends.
- *
- * @param filenameURL MIDI sequence to play next.
- */
- public void queueSound(FilenameURL filenameURL) {
- if (filenameURL == null) {
- errorMessage("Filename/URL not specified in method 'queueSound'");
- return;
- }
-
- synchronized (sequenceQueueLock) {
- if (sequenceQueue == null)
- sequenceQueue = new LinkedList();
- sequenceQueue.add(filenameURL);
- }
- }
-
- /**
- * Removes the first occurrence of the specified filename/identifier from the
- * list of MIDI sequences to play when the previous sequence ends.
- *
- * @param filename Filename or identifier of a MIDI sequence to remove from the
- * queue.
- */
- public void dequeueSound(String filename) {
- if (filename == null || filename.equals("")) {
- errorMessage("Filename not specified in method 'dequeueSound'");
- return;
- }
-
- synchronized (sequenceQueueLock) {
- if (sequenceQueue != null) {
- ListIterator i = sequenceQueue.listIterator();
- while (i.hasNext()) {
- if (i.next().getFilename().equals(filename)) {
- i.remove();
- break;
- }
- }
- }
- }
- }
-
- /**
- * Fades out the volume of whatever sequence is currently playing, then begins
- * playing the specified MIDI file at the previously assigned volume level. If
- * the filenameURL parameter is null or empty, playback will simply fade out and
- * stop. The miliseconds parameter must be non-negative or zero. This method
- * will remove anything that is currently in the list of queued MIDI sequences
- * that would have played next when current playback finished.
- *
- * @param filenameURL MIDI file to play next, or null for none.
- * @param milis Number of miliseconds the fadeout should take.
- */
- public void fadeOut(FilenameURL filenameURL, long milis) {
- if (milis < 0) {
- errorMessage("Miliseconds may not be negative in method " + "'fadeOut'.");
- return;
- }
-
- fadeOutMilis = milis;
- fadeInMilis = 0;
- fadeOutGain = 1.0f;
- lastFadeCheck = System.currentTimeMillis();
-
- synchronized (sequenceQueueLock) {
- if (sequenceQueue != null)
- sequenceQueue.clear();
-
- if (filenameURL != null) {
- if (sequenceQueue == null)
- sequenceQueue = new LinkedList();
- sequenceQueue.add(filenameURL);
- }
- }
- if (fadeThread == null) {
- fadeThread = new FadeThread();
- fadeThread.start();
- }
- fadeThread.interrupt();
- }
-
- /**
- * Fades out the volume of whatever sequence is currently playing, then fades
- * the volume back in playing the specified MIDI file. Final volume after
- * fade-in completes will be equal to the previously assigned volume level. The
- * filenameURL parameter may not be null or empty. The miliseconds parameters
- * must be non-negative or zero. This method will remove anything that is
- * currently in the list of queued MIDI sequences that would have played next
- * when current playback finished.
- *
- * @param filenameURL MIDI file to play next, or null for none.
- * @param milisOut Number of miliseconds the fadeout should take.
- * @param milisIn Number of miliseconds the fadein should take.
- */
- public void fadeOutIn(FilenameURL filenameURL, long milisOut, long milisIn) {
- if (filenameURL == null) {
- errorMessage("Filename/URL not specified in method 'fadeOutIn'.");
- return;
- }
- if (milisOut < 0 || milisIn < 0) {
- errorMessage("Miliseconds may not be negative in method " + "'fadeOutIn'.");
- return;
- }
-
- fadeOutMilis = milisOut;
- fadeInMilis = milisIn;
- fadeOutGain = 1.0f;
- lastFadeCheck = System.currentTimeMillis();
-
- synchronized (sequenceQueueLock) {
- if (sequenceQueue == null)
- sequenceQueue = new LinkedList();
- sequenceQueue.clear();
- sequenceQueue.add(filenameURL);
- }
- if (fadeThread == null) {
- fadeThread = new FadeThread();
- fadeThread.start();
- }
- fadeThread.interrupt();
- }
-
- /**
- * Resets this source's volume if it is fading out or in. Returns true if this
- * source is currently in the process of fading out. When fade-out completes,
- * this method transitions the source to the next sound in the sound sequence
- * queue if there is one. This method has no effect on non-streaming sources.
- *
- * @return True if this source is in the process of fading out.
- */
- private synchronized boolean checkFadeOut() {
- if (fadeOutGain == -1.0f && fadeInGain == 1.0f)
- return false;
-
- long currentTime = System.currentTimeMillis();
- long milisPast = currentTime - lastFadeCheck;
- lastFadeCheck = currentTime;
-
- if (fadeOutGain >= 0.0f) {
- if (fadeOutMilis == 0) {
- fadeOutGain = 0.0f;
- fadeInGain = 0.0f;
- if (!incrementSequence())
- stop();
- rewind();
- resetGain();
- return false;
- } else {
- float fadeOutReduction = ((float) milisPast) / ((float) fadeOutMilis);
-
- fadeOutGain -= fadeOutReduction;
- if (fadeOutGain <= 0.0f) {
- fadeOutGain = -1.0f;
- fadeInGain = 0.0f;
- if (!incrementSequence())
- stop();
- rewind();
- resetGain();
- return false;
- }
- }
- resetGain();
- return true;
- }
-
- if (fadeInGain < 1.0f) {
- fadeOutGain = -1.0f;
- if (fadeInMilis == 0) {
- fadeOutGain = -1.0f;
- fadeInGain = 1.0f;
- } else {
- float fadeInIncrease = ((float) milisPast) / ((float) fadeInMilis);
- fadeInGain += fadeInIncrease;
- if (fadeInGain >= 1.0f) {
- fadeOutGain = -1.0f;
- fadeInGain = 1.0f;
- }
- }
- resetGain();
- }
-
- return false;
- }
-
- /**
- * Removes the next sequence from the queue and assigns it to the sequencer.
- *
- * @return True if there was something in the queue.
- */
- private boolean incrementSequence() {
- synchronized (sequenceQueueLock) {
- // Is there a queue, and if so, is there anything in it:
- if (sequenceQueue != null && sequenceQueue.size() > 0) {
- // grab the next filename/URL from the queue:
- filenameURL(SET, sequenceQueue.remove(0));
-
- // Let everyone know we are busy loading:
- loading(SET, true);
-
- // Check if we have a sequencer:
- if (sequencer == null) {
- // nope, try and get one now:
- getSequencer();
- } else {
- // We have a sequencer. Stop it now:
- sequencer.stop();
- // rewind to the beginning:
- sequencer.setMicrosecondPosition(0);
- // Stop listening for a moment:
- sequencer.removeMetaEventListener(this);
- // wait a bit for the sequencer to shut down and rewind:
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- }
- }
- // We need to have a sequencer at this point:
- if (sequencer == null) {
- errorMessage("Unable to set the sequence in method " + "'incrementSequence', because there wasn't "
- + "a sequencer to use.");
-
- // Finished loading:
- loading(SET, false);
-
- // failure:
- return false;
- }
- // set the new sequence to be played:
- setSequence(filenameURL(GET, null).getURL());
- // start playing again:
- sequencer.start();
- // make sure we play at the correct volume:
- // (TODO: This doesn't always work??)
- resetGain();
- // start listening for end of track event again:
- sequencer.addMetaEventListener(this);
-
- // Finished loading:
- loading(SET, false);
-
- // We successfully moved to the next sequence:
- return true;
- }
- }
-
- // Nothing left to load
- return false;
- }
-
- /**
- * Plays the MIDI file from the beginning, or from where it left off if it was
- * paused.
- */
- public void play() {
- if (!loading()) {
- // Make sure there is a sequencer:
- if (sequencer == null)
- return;
-
- try {
- // start playing:
- sequencer.start();
- // event will be sent when end of track is reached:
- sequencer.addMetaEventListener(this);
- } catch (Exception e) {
- errorMessage("Exception in method 'play'");
- printStackTrace(e);
- SoundSystemException sse = new SoundSystemException(e.getMessage());
- SoundSystem.setException(sse);
- }
- }
- }
-
- /**
- * Stops playback and rewinds to the beginning.
- */
- public void stop() {
- if (!loading()) {
- // Make sure there is a sequencer:
- if (sequencer == null)
- return;
-
- try {
- // stop playback:
- sequencer.stop();
- // rewind to the beginning:
- sequencer.setMicrosecondPosition(0);
- // No need to listen any more:
- sequencer.removeMetaEventListener(this);
- } catch (Exception e) {
- errorMessage("Exception in method 'stop'");
- printStackTrace(e);
- SoundSystemException sse = new SoundSystemException(e.getMessage());
- SoundSystem.setException(sse);
- }
- }
- }
-
- /**
- * Temporarily stops playback without rewinding.
- */
- public void pause() {
- if (!loading()) {
- // Make sure there is a sequencer:
- if (sequencer == null)
- return;
-
- try {
- // stop playback. Will resume from this location next play.
- sequencer.stop();
- } catch (Exception e) {
- errorMessage("Exception in method 'pause'");
- printStackTrace(e);
- SoundSystemException sse = new SoundSystemException(e.getMessage());
- SoundSystem.setException(sse);
- }
- }
- }
-
- /**
- * Returns playback to the beginning.
- */
- public void rewind() {
- if (!loading()) {
- // Make sure there is a sequencer:
- if (sequencer == null)
- return;
-
- try {
- // rewind to the beginning:
- sequencer.setMicrosecondPosition(0);
- } catch (Exception e) {
- errorMessage("Exception in method 'rewind'");
- printStackTrace(e);
- SoundSystemException sse = new SoundSystemException(e.getMessage());
- SoundSystem.setException(sse);
- }
- }
- }
-
- /**
- * Changes the volume of MIDI playback.
- *
- * @param value Float value (0.0f - 1.0f).
- */
- public void setVolume(float value) {
- gain = value;
- resetGain();
- }
-
- /**
- * Returns the current volume for the MIDI source.
- *
- * @return Float value (0.0f - 1.0f).
- */
- public float getVolume() {
- return gain;
- }
-
- /**
- * Changes the basic information about the MIDI source. This method removes any
- * queued filenames/URLs from the list of MIDI sequences that would have played
- * after the current sequence ended.
- *
- * @param toLoop Should playback loop or play only once?
- * @param sourcename Unique identifier for this source.
- * @param filename Name of the MIDI file to play.
- */
- public void switchSource(boolean toLoop, String sourcename, String filename) {
- // Let everyone know we are busy loading:
- loading(SET, true);
-
- // save information about the source:
- filenameURL(SET, new FilenameURL(filename));
- sourcename(SET, sourcename);
- setLooping(toLoop);
-
- reset();
-
- // Finished loading:
- loading(SET, false);
- }
-
- /**
- * Changes the basic information about the MIDI source. This method removes any
- * queued filenames/URLs from the list of MIDI sequences that would have played
- * after the current sequence ended. The fourth parameter, 'identifier' should
- * look like a filename, and it must have the correct extension (.mid or .midi).
- *
- * @param toLoop Should playback loop or play only once?
- * @param sourcename Unique identifier for this source.
- * @param midiFile URL to the MIDI file to play.
- * @param identifier Filename/identifier for the MIDI file.
- */
- public void switchSource(boolean toLoop, String sourcename, URL midiFile, String identifier) {
- // Let everyone know we are busy loading:
- loading(SET, true);
-
- // save information about the source:
- filenameURL(SET, new FilenameURL(midiFile, identifier));
- sourcename(SET, sourcename);
- setLooping(toLoop);
-
- reset();
-
- // Finished loading:
- loading(SET, false);
- }
-
- /**
- * Changes the basic information about the MIDI source. This method removes any
- * queued filenames/URLs from the list of MIDI sequences that would have played
- * after the current sequence ended.
- *
- * @param toLoop Should playback loop or play only once?
- * @param sourcename Unique identifier for this source.
- * @param filenameURL Filename/URL of the MIDI file to play.
- */
- public void switchSource(boolean toLoop, String sourcename, FilenameURL filenameURL) {
- // Let everyone know we are busy loading:
- loading(SET, true);
-
- // save information about the source:
- filenameURL(SET, filenameURL);
- sourcename(SET, sourcename);
- setLooping(toLoop);
-
- reset();
-
- // Finished loading:
- loading(SET, false);
- }
-
- /**
- * Stops and rewinds the sequencer, and resets the sequence.
- */
- private void reset() {
- synchronized (sequenceQueueLock) {
- if (sequenceQueue != null)
- sequenceQueue.clear();
- }
-
- // Check if we have a sequencer:
- if (sequencer == null) {
- // nope, try and get one now:
- getSequencer();
- } else {
- // We have a sequencer. Stop it now:
- sequencer.stop();
- // rewind to the beginning:
- sequencer.setMicrosecondPosition(0);
- // Stop listening for a moment:
- sequencer.removeMetaEventListener(this);
- // wait a bit for the sequencer to shut down and rewind:
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- }
- }
- // We need to have a sequencer at this point:
- if (sequencer == null) {
- errorMessage(
- "Unable to set the sequence in method " + "'reset', because there wasn't " + "a sequencer to use.");
- return;
- }
-
- // set the new sequence to be played:
- setSequence(filenameURL(GET, null).getURL());
- // start playing again:
- sequencer.start();
- // make sure we play at the correct volume:
- // (TODO: This doesn't always work??)
- resetGain();
- // start listening for end of track event again:
- sequencer.addMetaEventListener(this);
- }
-
- /**
- * Sets the value of boolean 'toLoop'.
- *
- * @param value True or False.
- */
- public void setLooping(boolean value) {
- toLoop(SET, value);
- }
-
- /**
- * Returns the value of boolean 'toLoop'.
- *
- * @return True while looping.
- */
- public boolean getLooping() {
- return toLoop(GET, XXX);
- }
-
- /**
- * Sets or returns the value of boolean 'toLoop'.
- *
- * @param action GET or SET.
- * @param value New value if action == SET, or XXX if action == GET.
- * @return True while looping.
- */
- private synchronized boolean toLoop(boolean action, boolean value) {
- if (action == SET)
- toLoop = value;
- return toLoop;
- }
-
- /**
- * Check if a MIDI file is in the process of loading.
- */
- public boolean loading() {
- return (loading(GET, XXX));
- }
-
- /**
- * Sets or returns the value of boolean 'loading'.
- *
- * @param action GET or SET.
- * @param value New value if action == SET, or XXX if action == GET.
- * @return True while a MIDI file is in the process of loading.
- */
- private synchronized boolean loading(boolean action, boolean value) {
- if (action == SET)
- loading = value;
- return loading;
- }
-
- /**
- * Defines the unique identifier for this source
- *
- * @param value New source name.
- */
- public void setSourcename(String value) {
- sourcename(SET, value);
- }
-
- /**
- * Returns the unique identifier for this source.
- *
- * @return The source's name.
- */
- public String getSourcename() {
- return sourcename(GET, null);
- }
-
- /**
- * Sets or returns the value of String 'sourcename'.
- *
- * @param action GET or SET.
- * @param value New value if action == SET, or null if action == GET.
- * @return The source's name.
- */
- private synchronized String sourcename(boolean action, String value) {
- if (action == SET)
- sourcename = value;
- return sourcename;
- }
-
- /**
- * Defines which MIDI file to play.
- *
- * @param value Path to the MIDI file.
- */
- public void setFilenameURL(FilenameURL value) {
- filenameURL(SET, value);
- }
-
- /**
- * Returns the filename/identifier of the MIDI file being played.
- *
- * @return Filename of identifier of the MIDI file.
- */
- public String getFilename() {
- return filenameURL(GET, null).getFilename();
- }
-
- /**
- * Returns the MIDI file being played.
- *
- * @return Filename/URL of the MIDI file.
- */
- public FilenameURL getFilenameURL() {
- return filenameURL(GET, null);
- }
-
- /**
- * Sets or returns the value of filenameURL.
- *
- * @param action GET or SET.
- * @param value New value if action == SET, or null if action == GET.
- * @return Path to the MIDI file.
- */
- private synchronized FilenameURL filenameURL(boolean action, FilenameURL value) {
- if (action == SET)
- filenameURL = value;
- return filenameURL;
- }
-
- /**
- * Called when MIDI events occur.
- *
- * @param message Meta mssage describing the MIDI event.
- */
- public void meta(MetaMessage message) {
- if (message.getType() == END_OF_TRACK) {
- // Generate an EOS event:
- SoundSystemConfig.notifyEOS(sourcename, sequenceQueue.size());
-
- // check if we should loop or not:
- if (toLoop) {
- // looping
- // Check if playback is in the process of fading out.
- if (!checkFadeOut()) {
- // Not fading out, progress to the next MIDI sequence if
- // any are queued.
- if (!incrementSequence()) {
- try {
- // Rewind to the beginning.
- sequencer.setMicrosecondPosition(0);
- sequencer.start();
- // Make sure playback volume is correct.
- resetGain();
- } catch (Exception e) {
- }
- }
- } else if (sequencer != null) {
- try {
- // Rewind to the beginning.
- sequencer.setMicrosecondPosition(0);
- sequencer.start();
- // Make sure playback volume is correct.
- resetGain();
- } catch (Exception e) {
- }
- }
- } else {
- // non-looping
- if (!checkFadeOut()) {
- if (!incrementSequence()) {
- try {
- // stop playback:
- sequencer.stop();
- // rewind to the beginning:
- sequencer.setMicrosecondPosition(0);
- // stop looping:
- sequencer.removeMetaEventListener(this);
- } catch (Exception e) {
- }
- }
- } else {
- try {
- // stop playback:
- sequencer.stop();
- // rewind to the beginning:
- sequencer.setMicrosecondPosition(0);
- // stop looping:
- sequencer.removeMetaEventListener(this);
- } catch (Exception e) {
- }
- }
- }
- }
- }
-
- /**
- * Resets playback volume to the correct level.
- */
- public void resetGain() {
- // make sure the value for gain is valid (between 0 and 1)
- if (gain < 0.0f)
- gain = 0.0f;
- if (gain > 1.0f)
- gain = 1.0f;
-
- int midiVolume = (int) (gain * SoundSystemConfig.getMasterGain() * (float) Math.abs(fadeOutGain) * fadeInGain
- * 127.0f);
- if (synthesizer != null) {
- javax.sound.midi.MidiChannel[] channels = synthesizer.getChannels();
- for (int c = 0; channels != null && c < channels.length; c++) {
- channels[c].controlChange(CHANGE_VOLUME, midiVolume);
- }
- } else if (synthDevice != null) {
- try {
- ShortMessage volumeMessage = new ShortMessage();
- for (int i = 0; i < 16; i++) {
- volumeMessage.setMessage(ShortMessage.CONTROL_CHANGE, i, CHANGE_VOLUME, midiVolume);
- synthDevice.getReceiver().send(volumeMessage, -1);
- }
- } catch (Exception e) {
- errorMessage("Error resetting gain on MIDI device");
- printStackTrace(e);
- }
- } else if (sequencer != null && sequencer instanceof Synthesizer) {
- synthesizer = (Synthesizer) sequencer;
- javax.sound.midi.MidiChannel[] channels = synthesizer.getChannels();
- for (int c = 0; channels != null && c < channels.length; c++) {
- channels[c].controlChange(CHANGE_VOLUME, midiVolume);
- }
- } else {
- try {
- Receiver receiver = MidiSystem.getReceiver();
- ShortMessage volumeMessage = new ShortMessage();
- for (int c = 0; c < 16; c++) {
- volumeMessage.setMessage(ShortMessage.CONTROL_CHANGE, c, CHANGE_VOLUME, midiVolume);
- receiver.send(volumeMessage, -1);
- }
- } catch (Exception e) {
- errorMessage("Error resetting gain on default receiver");
- printStackTrace(e);
- }
- }
- }
-
- /**
- * Attempts to load the default sequencer. If it fails, then other common
- * sequencers are tried. If none can be loaded, then variable 'sequencer'
- * remains null.
- */
- private void getSequencer() {
- try {
- sequencer = MidiSystem.getSequencer();
- if (sequencer != null) {
- try {
- sequencer.getTransmitter();
- } catch (MidiUnavailableException mue) {
- message("Unable to get a transmitter from the " + "default MIDI sequencer");
- }
- sequencer.open();
- }
- } catch (MidiUnavailableException mue) {
- message("Unable to open the default MIDI sequencer");
- sequencer = null;
- } catch (Exception e) {
- if (e instanceof InterruptedException) {
- message("Caught InterruptedException while attempting to "
- + "open the default MIDI sequencer. Trying again.");
- sequencer = null;
- }
- try {
- sequencer = MidiSystem.getSequencer();
- if (sequencer != null) {
- try {
- sequencer.getTransmitter();
- } catch (MidiUnavailableException mue) {
- message("Unable to get a transmitter from the " + "default MIDI sequencer");
- }
- sequencer.open();
- }
- } catch (MidiUnavailableException mue) {
- message("Unable to open the default MIDI sequencer");
- sequencer = null;
- } catch (Exception e2) {
- message("Unknown error opening the default MIDI sequencer");
- sequencer = null;
- }
- }
-
- if (sequencer == null)
- sequencer = openSequencer("Real Time Sequencer");
- if (sequencer == null)
- sequencer = openSequencer("Java Sound Sequencer");
- if (sequencer == null) {
- errorMessage("Failed to find an available MIDI sequencer");
- return;
- }
- }
-
- /**
- * Loads the MIDI sequence form the specified URL, and sets the sequence. If
- * variable 'sequencer' is null or an error occurs, then variable 'sequence'
- * remains null.
- *
- * @param midiSource URL to a MIDI file.
- */
- private void setSequence(URL midiSource) {
- if (sequencer == null) {
- errorMessage("Unable to update the sequence in method " + "'setSequence', because variable 'sequencer' "
- + "is null");
- return;
- }
-
- if (midiSource == null) {
- errorMessage("Unable to load Midi file in method 'setSequence'.");
- return;
- }
-
- try {
- sequence = MidiSystem.getSequence(midiSource);
- } catch (IOException ioe) {
- errorMessage("Input failed while reading from MIDI file in " + "method 'setSequence'.");
- printStackTrace(ioe);
- return;
- } catch (InvalidMidiDataException imde) {
- errorMessage("Invalid MIDI data encountered, or not a MIDI " + "file in method 'setSequence' (1).");
- printStackTrace(imde);
- return;
- }
- if (sequence == null) {
- errorMessage("MidiSystem 'getSequence' method returned null " + "in method 'setSequence'.");
- } else {
- try {
- sequencer.setSequence(sequence);
- } catch (InvalidMidiDataException imde) {
- errorMessage("Invalid MIDI data encountered, or not a MIDI " + "file in method 'setSequence' (2).");
- printStackTrace(imde);
- return;
- } catch (Exception e) {
- errorMessage("Problem setting sequence from MIDI file in " + "method 'setSequence'.");
- printStackTrace(e);
- return;
- }
- }
- }
-
- /**
- * First attempts to load the specified "override MIDI synthesizer" if one was
- * defined. If none was defined or unable to use it, then attempts to load the
- * default synthesizer. If that fails, then other common synthesizers are
- * attempted. If none can be loaded, then MIDI is not possible on this system.
- */
- private void getSynthesizer() {
- if (sequencer == null) {
- errorMessage("Unable to load a Synthesizer in method " + "'getSynthesizer', because variable 'sequencer' "
- + "is null");
- return;
- }
-
- // Check if an alternate MIDI synthesizer was specified to use
- String overrideMIDISynthesizer = SoundSystemConfig.getOverrideMIDISynthesizer();
- if (overrideMIDISynthesizer != null && !overrideMIDISynthesizer.equals("")) {
- // Try and open the specified device:
- synthDevice = openMidiDevice(overrideMIDISynthesizer);
- // See if we got it:
- if (synthDevice != null) {
- // Got it, try and link it to the sequencer:
- try {
- sequencer.getTransmitter().setReceiver(synthDevice.getReceiver());
- // Success!
- return;
- } catch (MidiUnavailableException mue) {
- // Problem linking the two, let the user know
- errorMessage("Unable to link sequencer transmitter " + "with receiver for MIDI device '"
- + overrideMIDISynthesizer + "'");
- }
- }
- }
-
- // No alternate MIDI synthesizer was specified, or unable to use it.
-
- // If the squencer were also a synthesizer, that would make things easy:
- if (sequencer instanceof Synthesizer) {
- synthesizer = (Synthesizer) sequencer;
- } else {
- // Try getting the default synthesizer first:
- try {
- synthesizer = MidiSystem.getSynthesizer();
- synthesizer.open();
- } catch (MidiUnavailableException mue) {
- message("Unable to open the default synthesizer");
- synthesizer = null;
- }
-
- // See if we were sucessful:
- if (synthesizer == null) {
- // Try for the common MIDI synthesizers:
- synthDevice = openMidiDevice("Java Sound Synthesizer");
- if (synthDevice == null)
- synthDevice = openMidiDevice("Microsoft GS Wavetable");
- if (synthDevice == null)
- synthDevice = openMidiDevice("Gervill");
- if (synthDevice == null) {
- // Still nothing, MIDI is not going to work
- errorMessage("Failed to find an available MIDI " + "synthesizer");
- return;
- }
- }
-
- // Are we using the default synthesizer or something else?
- if (synthesizer == null) {
- // Link the sequencer and synthesizer:
- try {
- sequencer.getTransmitter().setReceiver(synthDevice.getReceiver());
- } catch (MidiUnavailableException mue) {
- errorMessage("Unable to link sequencer transmitter " + "with MIDI device receiver");
- }
- } else {
- // Bug-fix for multiple-receivers playing simultaneously
- if (synthesizer.getDefaultSoundbank() == null) {
- // Link the sequencer to the default receiver:
- try {
- sequencer.getTransmitter().setReceiver(MidiSystem.getReceiver());
- } catch (MidiUnavailableException mue) {
- errorMessage("Unable to link sequencer transmitter " + "with default receiver");
- }
- } else {
- // Link the sequencer to the default synthesizer:
- try {
- sequencer.getTransmitter().setReceiver(synthesizer.getReceiver());
- } catch (MidiUnavailableException mue) {
- errorMessage("Unable to link sequencer transmitter " + "with synthesizer receiver");
- }
- }
- // End bug-fix
- }
- }
- }
-
- /**
- * Attempts to open the Sequencer with a name containing the specified string.
- *
- * @param containsString Part or all of a Sequencer's name.
- * @return Handle to the Sequencer, or null if not found or error.
- */
- private Sequencer openSequencer(String containsString) {
- Sequencer s = null;
- s = (Sequencer) openMidiDevice(containsString);
- if (s == null)
- return null;
- try {
- s.getTransmitter();
- } catch (MidiUnavailableException mue) {
- message(" Unable to get a transmitter from this sequencer");
- s = null;
- return null;
- }
-
- return s;
- }
-
- /**
- * Attempts to open the MIDI device with a name containing the specified string.
- *
- * @param containsString Part or all of a MIDI device's name.
- * @return Handle to the MIDI device, or null if not found or error.
- */
- private MidiDevice openMidiDevice(String containsString) {
- message("Searching for MIDI device with name containing '" + containsString + "'");
- MidiDevice device = null;
- MidiDevice.Info[] midiDevices = MidiSystem.getMidiDeviceInfo();
- for (int i = 0; i < midiDevices.length; i++) {
- device = null;
- try {
- device = MidiSystem.getMidiDevice(midiDevices[i]);
- } catch (MidiUnavailableException e) {
- message(" Problem in method 'getMidiDevice': " + "MIDIUnavailableException was thrown");
- device = null;
- }
- if (device != null && midiDevices[i].getName().contains(containsString)) {
- message(" Found MIDI device named '" + midiDevices[i].getName() + "'");
- if (device instanceof Synthesizer)
- message(" *this is a Synthesizer instance");
- if (device instanceof Sequencer)
- message(" *this is a Sequencer instance");
- try {
- device.open();
- } catch (MidiUnavailableException mue) {
- message(" Unable to open this MIDI device");
- device = null;
- }
- return device;
- }
- }
- message(" MIDI device not found");
- return null;
- }
-
- /**
- * Prints a message.
- *
- * @param message Message to print.
- */
- protected void message(String message) {
- logger.message(message, 0);
- }
-
- /**
- * Prints an important message.
- *
- * @param message Message to print.
- */
- protected void importantMessage(String message) {
- logger.importantMessage(message, 0);
- }
-
- /**
- * Prints the specified message if error is true.
- *
- * @param error True or False.
- * @param message Message to print if error is true.
- * @return True if error is true.
- */
- protected boolean errorCheck(boolean error, String message) {
- return logger.errorCheck(error, "MidiChannel", message, 0);
- }
-
- /**
- * Prints an error message.
- *
- * @param message Message to print.
- */
- protected void errorMessage(String message) {
- logger.errorMessage("MidiChannel", message, 0);
- }
-
- /**
- * Prints an exception's error message followed by the stack trace.
- *
- * @param e Exception containing the information to print.
- */
- protected void printStackTrace(Exception e) {
- logger.printStackTrace(e, 1);
- }
-
- /**
- * The FadeThread class handles sequence changing, timing, and volume change
- * messages in the background.
- */
- private class FadeThread extends SimpleThread {
- @Override
- /**
- * Runs in the background, timing fade in and fade out, changing the sequence,
- * and issuing the appropriate volume change messages.
- */
- public void run() {
- while (!dying()) {
- // if not currently fading in or out, put the thread to sleep
- if (fadeOutGain == -1.0f && fadeInGain == 1.0f)
- snooze(3600000);
- checkFadeOut();
- // only update every 50 miliseconds (no need to peg the cpu)
- snooze(50);
- }
- // Important!
- cleanup();
- }
- }
-
-}
diff --git a/src/lwjgl/java/paulscode/sound/SimpleThread.java b/src/lwjgl/java/paulscode/sound/SimpleThread.java
deleted file mode 100644
index 1d808cc..0000000
--- a/src/lwjgl/java/paulscode/sound/SimpleThread.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package paulscode.sound;
-
-/**
- * The SimpleThread class is the template used to create all thread classes used
- * by in the SoundSystem library. It provides methods for common actions like
- * sleeping, killing, and checking liveness. NOTE: super.cleanup() must be
- * called at the bottom of overriden cleanup() methods, and cleanup() must be
- * called at the bottom of the run() method for all extended classes.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class SimpleThread extends Thread {
- /**
- * Used to return a current value from one of the synchronized boolean-interface
- * methods.
- */
- private static final boolean GET = false;
-
- /**
- * Used to set the value in one of the synchronized boolean-interface methods.
- */
- private static final boolean SET = true;
-
- /**
- * Used when a parameter for one of the synchronized boolean-interface methods
- * is not aplicable.
- */
- private static final boolean XXX = false;
-
- /**
- * True when thread is running.
- */
- private boolean alive = true;
-
- /**
- * True when thread should end.
- */
- private boolean kill = false;
-
- /**
- * Removes all references to instantiated objects, and changes the thread's
- * state to "not alive". Method alive() returns false when this method has
- * completed. NOTE: super.cleanup() must be called at the bottom of overriden
- * cleanup() methods, and cleanup() must be called at the bottom of the run()
- * method for all extended classes.
- */
- protected void cleanup() {
- kill(SET, true); // tread needs to shut down
- alive(SET, false); // thread has ended
- }
-
- /**
- * Executes the thread's main loop. NOTES: Extended classes should check method
- * dying() often to know when the user wants the thread to shut down. Method
- * cleanup() must be called at the bottom of the run() method for all extended
- * classes.
- */
- @Override
- public void run() {
- /* How the run() method should be set up: */
-
- // Do your stuff here. Remember to check dying() often to know when
- // the user wants the thread to shut down.
-
- // MUST call cleanup() at the bottom of Overridden run() method!!!!!
- cleanup(); // clears memory and sets status to dead.
- }
-
- /**
- * Calls the rerun() method on a seperate thread, which calls run() when the
- * previous thread finishes.
- */
- public void restart() {
- new Thread() {
- @Override
- public void run() {
- rerun();
- }
- }.start();
- }
-
- /**
- * Kills the previous thread, waits for it to die, then calls run().
- */
- private void rerun() {
- kill(SET, true);
- while (alive(GET, XXX)) {
- snooze(100);
- }
- alive(SET, true);
- kill(SET, false);
- run();
- }
-
- /**
- * Returns false when the cleanup() method has finished. This method should be
- * used to know when the thread has been safely shut down.
- *
- * @return True while the thread is alive.
- */
- public boolean alive() {
- return alive(GET, XXX);
- }
-
- /**
- * Causes method dying() to return true, letting the thread know it needs to
- * shut down.
- */
- public void kill() {
- kill(SET, true);
- }
-
- /**
- * Returns true when the thread is supposed to shut down.
- *
- * @return True if the thread should die.
- */
- protected boolean dying() {
- return kill(GET, XXX);
- }
-
- /**
- * Sets or returns the value of boolean 'alive'.
- *
- * @param action GET or SET.
- * @param value New value if action == SET, or XXX if action == GET.
- * @return True while the thread is alive.
- */
- private synchronized boolean alive(boolean action, boolean value) {
- if (action == SET)
- alive = value;
- return alive;
- }
-
- /**
- * Sets or returns the value of boolean 'kill'.
- *
- * @param action GET or SET.
- * @param value New value if action == SET, or XXX if action == GET.
- * @return True if the thread should die.
- */
- private synchronized boolean kill(boolean action, boolean value) {
- if (action == SET)
- kill = value;
- return kill;
- }
-
- /**
- * Sleeps for the specified number of milliseconds.
- */
- protected void snooze(long milliseconds) {
- try {
- Thread.sleep(milliseconds);
- } catch (InterruptedException e) {
- }
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/SoundBuffer.java b/src/lwjgl/java/paulscode/sound/SoundBuffer.java
deleted file mode 100644
index 98ad33d..0000000
--- a/src/lwjgl/java/paulscode/sound/SoundBuffer.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package paulscode.sound;
-
-import javax.sound.sampled.AudioFormat;
-
-/**
- * The SoundBuffer class is used to wrap audio data along with the format in
- * which the data is stored.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class SoundBuffer {
- /**
- * The actual audio data.
- */
- public byte[] audioData;
- /**
- * The audio format in which the data is stored.
- */
- public AudioFormat audioFormat;
-
- /**
- * Constructor: Wraps the specified data with the specified audio format.
- *
- * @param audioData The actual audio data.
- * @param audioFormat The audio format in which the data is stored.
- */
- public SoundBuffer(byte[] audioData, AudioFormat audioFormat) {
- this.audioData = audioData;
- this.audioFormat = audioFormat;
- }
-
- /**
- * Removes handles to all instantiated objects.
- */
- public void cleanup() {
- audioData = null;
- audioFormat = null;
- }
-
- /**
- * Trims down the size of the audio data if it is larger than the specified
- * maximum length.
- *
- * @param maxLength Maximum size this buffer may be.
- */
- public void trimData(int maxLength) {
- if (audioData == null || maxLength == 0)
- audioData = null;
- else if (audioData.length > maxLength) {
- byte[] trimmedArray = new byte[maxLength];
- System.arraycopy(audioData, 0, trimmedArray, 0, maxLength);
- audioData = trimmedArray;
- }
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/SoundSystem.java b/src/lwjgl/java/paulscode/sound/SoundSystem.java
deleted file mode 100644
index 1861234..0000000
--- a/src/lwjgl/java/paulscode/sound/SoundSystem.java
+++ /dev/null
@@ -1,2632 +0,0 @@
-package paulscode.sound;
-
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import net.PeytonPlayz585.EaglercraftRandom;
-import java.util.Set;
-import javax.sound.sampled.AudioFormat;
-
-/**
- * The SoundSystem class is the core class for the SoundSystem library. It is
- * capable of interfacing with external sound library and codec library
- * pluggins. This core class is stripped down to give it a smaller memory
- * footprint and to make it more customizable. This library was created to
- * provide a simple, common interface to a variety of 3rd-party sound and codec
- * libraries, and to simplify switching between them on the fly. If no external
- * pluggins are loaded, this core class by itself is only capable of playing
- * MIDI files. Specific implementations (such as SoundSystemJPCT) will extend
- * this core class. They will automatically link with popular external pluggins
- * and provide extra methods for ease of use. There should be only one instance
- * of this class in any program! The SoundSystem can be constructed by defining
- * which sound library to use, or by allowing SoundSystem to perform its own
- * library compatibility checking. See {@link paulscode.sound.SoundSystemConfig
- * SoundSystemConfig} for information about changing default settings and
- * linking with external pluggins.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class SoundSystem {
- /**
- * Used to return a current value from one of the synchronized boolean-interface
- * methods.
- */
- private static final boolean GET = false;
- /**
- * Used to set the value in one of the synchronized boolean-interface methods.
- */
- private static final boolean SET = true;
- /**
- * Used when a parameter for one of the synchronized boolean-interface methods
- * is not aplicable.
- */
- private static final boolean XXX = false;
-
- /**
- * Processes status messages, warnings, and error messages.
- */
- protected SoundSystemLogger logger;
-
- /**
- * Handle to the active sound library.
- */
- protected Library soundLibrary;
-
- /**
- * List of queued commands to perform.
- */
- protected List commandQueue;
-
- /**
- * Used internally by SoundSystem to keep track of play/pause/stop/rewind
- * commands. This prevents source management (culling and activating) from being
- * adversely affected by the quickPlay, quickStream, and backgroundMusic
- * methods.
- */
- private List sourcePlayList;
-
- /**
- * Processes queued commands in the background.
- */
- protected CommandThread commandThread;
-
- /**
- * Generates random numbers.
- */
- public EaglercraftRandom randomNumberGenerator;
-
- /**
- * Name of this class.
- */
- protected String className = "SoundSystem";
-
- /**
- * Indicates the currently loaded sound-library, or null if none.
- */
- private static Class currentLibrary = null;
-
- /**
- * Becomes true when the sound library has been initialized.
- */
- private static boolean initialized = false;
-
- /**
- * Indicates the last exception that was thrown.
- */
- private static SoundSystemException lastException = null;
-
- /**
- * Constructor: Create the sound system using the default library. If the
- * default library is not compatible, another library type will be loaded
- * instead, in the order of library preference. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for information
- * about sound library types.
- */
- public SoundSystem() {
- // create the message logger:
- logger = SoundSystemConfig.getLogger();
- // if the user didn't create one, then do it now:
- if (logger == null) {
- logger = new SoundSystemLogger();
- SoundSystemConfig.setLogger(logger);
- }
-
- linkDefaultLibrariesAndCodecs();
-
- LinkedList libraries = SoundSystemConfig.getLibraries();
-
- if (libraries != null) {
- ListIterator i = libraries.listIterator();
- Class c;
- while (i.hasNext()) {
- c = i.next();
- try {
- init(c);
- return;
- } catch (SoundSystemException sse) {
- logger.printExceptionMessage(sse, 1);
- }
- }
- }
- try {
- init(Library.class);
- return;
- } catch (SoundSystemException sse) {
- logger.printExceptionMessage(sse, 1);
- }
- }
-
- /**
- * Constructor: Create the sound system using the specified library.
- *
- * @param libraryClass Library to use. See
- * {@link paulscode.sound.SoundSystemConfig
- * SoundSystemConfig} for information about chosing a sound
- * library.
- */
- public SoundSystem(Class libraryClass) throws SoundSystemException {
- // create the message logger:
- logger = SoundSystemConfig.getLogger();
- // if the user didn't create one, then do it now:
- if (logger == null) {
- logger = new SoundSystemLogger();
- SoundSystemConfig.setLogger(logger);
- }
- linkDefaultLibrariesAndCodecs();
-
- init(libraryClass);
- }
-
- /**
- * Links with any default libraries or codecs should be made in this method.
- * This method is empty in the core SoundSystem class, and should be overriden
- * by classes which extend SoundSystem. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for information
- * about linking with sound libraries and codecs.
- */
- protected void linkDefaultLibrariesAndCodecs() {
- }
-
- /**
- * Loads the message logger, initializes the specified sound library, and starts
- * the command thread. Also instantiates the random number generator and the
- * command queue.
- *
- * @param libraryClass Library to initialize. See
- * {@link paulscode.sound.SoundSystemConfig
- * SoundSystemConfig} for information about chosing a sound
- * library.
- */
- protected void init(Class libraryClass) throws SoundSystemException {
- message("", 0);
- message("Starting up " + className + " version " + SoundSystem.class.getPackage().getImplementationVersion()
- + "...", 0);
-
- // create the random number generator:
- randomNumberGenerator = new EaglercraftRandom();
- // create the command queue:
- commandQueue = new LinkedList();
- // create the working source playlist:
- sourcePlayList = new LinkedList();
-
- // Instantiate and start the Command Processer thread:
- commandThread = new CommandThread(this); // Gets a SoundSystem handle
- commandThread.start();
-
- snooze(200);
-
- newLibrary(libraryClass);
- message("", 0);
- }
-
- /**
- * Ends the command thread, shuts down the sound system, and removes references
- * to all instantiated objects.
- */
- public void cleanup() {
- boolean killException = false;
- message("", 0);
- message(className + " shutting down...", 0);
-
- // End the command thread:
- try {
- commandThread.kill(); // end the command processor loop.
- commandThread.interrupt(); // wake the thread up so it can end.
- } catch (Exception e) {
- killException = true;
- }
-
- if (!killException) {
- // wait up to 5 seconds for command thread to end:
- for (int i = 0; i < 50; i++) {
- if (!commandThread.alive())
- break;
- snooze(100);
- }
- }
-
- // Let user know if there was a problem ending the command thread
- if (killException || commandThread.alive()) {
- errorMessage("Command thread did not die!", 0);
- message("Ignoring errors... continuing clean-up.", 0);
- }
-
- initialized(SET, false);
- currentLibrary(SET, null);
- try {
- // Stop all sources and shut down the sound library:
- if (soundLibrary != null)
- soundLibrary.cleanup();
- } catch (Exception e) {
- errorMessage("Problem during Library.cleanup()!", 0);
- message("Ignoring errors... continuing clean-up.", 0);
- }
-
- try {
- // remove any queued commands:
- if (commandQueue != null)
- commandQueue.clear();
- } catch (Exception e) {
- errorMessage("Unable to clear the command queue!", 0);
- message("Ignoring errors... continuing clean-up.", 0);
- }
-
- try {
- // empty the source management list:
- if (sourcePlayList != null)
- sourcePlayList.clear();
- } catch (Exception e) {
- errorMessage("Unable to clear the source management list!", 0);
- message("Ignoring errors... continuing clean-up.", 0);
- }
-
- // Remove references to all instantiated objects:
- randomNumberGenerator = null;
- soundLibrary = null;
- commandQueue = null;
- sourcePlayList = null;
- commandThread = null;
-
- importantMessage("Author: Paul Lamb, www.paulscode.com", 1);
- message("", 0);
- }
-
- /**
- * Wakes up the Command Thread to process commands. This method should be used
- * if there is a need to call methods 'ManageSources' and 'CommandQueue'
- * externally. In most cases, this method will not be needed, since SoundSystem
- * automatically wakes the Command Thread every time commands are placed into
- * either the ManageSources queue or CommandQueue to be processed.
- */
- public void interruptCommandThread() {
- if (commandThread == null) {
- errorMessage("Command Thread null in method " + "'interruptCommandThread'", 0);
- return;
- }
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * Pre-loads a sound into memory. The file may either be located within the JAR
- * or at an online location. If the file is online, filename must begin with
- * "http://", since that is how SoundSystem recognizes URL's. If the file is
- * located within the compiled JAR, the package in which sound files are located
- * may be set by calling SoundSystemConfig.setSoundFilesPackage().
- *
- * @param filename Filename of the sound file to load.
- */
- public void loadSound(String filename) {
- // Queue a command to load the sound file:
- CommandQueue(new CommandObject(CommandObject.LOAD_SOUND, new FilenameURL(filename)));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * Pre-loads a sound specified by the given URL into memory. The second
- * parameter 'identifier' should look like a filename, and it must have the
- * correct extension so SoundSystem knows what codec to use for the file
- * referenced by the URL instance.
- *
- * @param url URL handle to the sound file to load.
- * @param identifier Filename/identifier of the file referenced by the URL.
- */
- public void loadSound(URL url, String identifier) {
- // Queue a command to load the sound file from a URL:
- CommandQueue(new CommandObject(CommandObject.LOAD_SOUND, new FilenameURL(url, identifier)));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * Saves raw PCM audio data in the specified audio format, under the specified
- * identifier. This identifier can be later used in place of 'filename'
- * parameters to reference the sample data.
- *
- * @param data The sample data
- * @param format Format the sample data is stored in
- * @param identifier What to call the sample.
- */
- public void loadSound(byte[] data, AudioFormat format, String identifier) {
- // Queue a command to load the sound file from a URL:
- CommandQueue(new CommandObject(CommandObject.LOAD_DATA, identifier, new SoundBuffer(data, format)));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * Removes a pre-loaded sound from memory. This is a good method to use for
- * freeing up memory after a large sound file is no longer needed. NOTE: the
- * source will remain in memory after calling this method as long as the sound
- * is attached to an existing source. When calling this method, calls should
- * also be made to method removeSource( String ) for all sources which this
- * sound is bound to.
- *
- * @param filename Filename/identifier of the sound file to unload.
- */
- public void unloadSound(String filename) {
- // Queue a command to unload the sound file:
- CommandQueue(new CommandObject(CommandObject.UNLOAD_SOUND, filename));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * If the specified source is a streaming source or MIDI source, this method
- * queues up the next sound to play when the previous playback ends. The file
- * may either be located within the JAR or at an online location. If the file is
- * online, filename must begin with "http://", since that is how SoundSystem
- * recognizes URL paths. If the file is located within the compiled JAR, the
- * package in which sound files are located may be set by calling
- * SoundSystemConfig.setSoundFilesPackage(). This method has no effect on
- * non-streaming sources.
- *
- * @param sourcename Source identifier.
- * @param filename Name of the sound file to play next.
- */
- public void queueSound(String sourcename, String filename) {
- // Queue a command to queue the sound:
- CommandQueue(new CommandObject(CommandObject.QUEUE_SOUND, sourcename, new FilenameURL(filename)));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * If the specified source is a streaming source or MIDI source, this method
- * queues up the next sound to play when the previous playback ends. The third
- * parameter 'identifier' should look like a filename, and it must have the
- * correct extension so SoundSystem knows what codec to use for the file
- * referenced by the URL instance. This method has no effect on non-streaming
- * sources.
- *
- * @param sourcename Source identifier.
- * @param url URL handle to the sound file to load.
- * @param identifier Filename/identifier of the file referenced by the URL.
- */
- public void queueSound(String sourcename, URL url, String identifier) {
- // Queue a command to queue the sound:
- CommandQueue(new CommandObject(CommandObject.QUEUE_SOUND, sourcename, new FilenameURL(url, identifier)));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * Removes the first occurrence of the specified filename/identifier from the
- * specified source's list of sounds to play when previous playback ends. This
- * method has no effect on non-streaming sources.
- *
- * @param sourcename Source identifier.
- * @param filename Filename/identifier of the sound file to play next.
- */
- public void dequeueSound(String sourcename, String filename) {
- // Queue a command to dequeue the sound:
- CommandQueue(new CommandObject(CommandObject.DEQUEUE_SOUND, sourcename, filename));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * Fades out the volume of whatever the specified source is currently playing,
- * then begins playing the specified file at the source's previously assigned
- * volume level. The file may either be located within the JAR or at an online
- * location. If the file is online, filename must begin with "http://", since
- * that is how SoundSystem recognizes URL paths. If the file is located within
- * the compiled JAR, the package in which sound files are located may be set by
- * calling SoundSystemConfig.setSoundFilesPackage(). If the filename parameter
- * is null or empty, the specified source will simply fade out and stop. The
- * miliseconds parameter must be non-negative or zero. This method will remove
- * anything that is currently in the specified source's list of queued sounds
- * that would have played next when the current sound finished playing. This
- * method may only be used for streaming and MIDI sources.
- *
- * @param sourcename Name of the source to fade out.
- * @param filename Name of a sound file to play next, or null for none.
- * @param milis Number of miliseconds the fadeout should take.
- */
- public void fadeOut(String sourcename, String filename, long milis) {
- FilenameURL fu = null;
- if (filename != null)
- fu = new FilenameURL(filename);
- // Queue a command to fade out:
- CommandQueue(new CommandObject(CommandObject.FADE_OUT, sourcename, fu, milis));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * Fades out the volume of whatever the specified source is currently playing,
- * then begins playing the specified file at the source's previously assigned
- * volume level. If the url parameter is null or empty, the specified source
- * will simply fade out and stop. The third parameter 'identifier' should look
- * like a filename, and it must have the correct extension so SoundSystem knows
- * what codec to use for the file referenced by the URL instance. The
- * miliseconds parameter must be non-negative or zero. This method will remove
- * anything that is currently in the specified source's list of queued sounds
- * that would have played next when the current sound finished playing. This
- * method may only be used for streaming and MIDI sources.
- *
- * @param sourcename Name of the source to fade out.
- * @param url URL handle to the sound file to play next, or null for
- * none.
- * @param identifier Filename/identifier of the file referenced by the URL.
- * @param milis Number of miliseconds the fadeout should take.
- */
- public void fadeOut(String sourcename, URL url, String identifier, long milis) {
- FilenameURL fu = null;
- if (url != null && identifier != null)
- fu = new FilenameURL(url, identifier);
- // Queue a command to fade out:
- CommandQueue(new CommandObject(CommandObject.FADE_OUT, sourcename, fu, milis));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * Fades out the volume of whatever the specified source is currently playing,
- * then fades the volume back in playing the specified filename. Final volume
- * after fade-in completes will be equal to the source's previously assigned
- * volume level. The filename parameter may not be null or empty. The file may
- * either be located within the JAR or at an online location. If the file is
- * online, filename must begin with "http://", since that is how SoundSystem
- * recognizes URL paths. If the file is located within the compiled JAR, the
- * package in which sound files are located may be set by calling
- * SoundSystemConfig.setSoundFilesPackage(). The miliseconds parameters must be
- * non-negative or zero. This method will remove anything that is currently in
- * the specified source's list of queued sounds that would have played next when
- * the current sound finished playing. This method may only be used for
- * streaming and MIDI sources.
- *
- * @param sourcename Name of the source to fade out/in.
- * @param filename Name of a sound file to play next, or null for none.
- * @param milisOut Number of miliseconds the fadeout should take.
- * @param milisIn Number of miliseconds the fadein should take.
- */
- public void fadeOutIn(String sourcename, String filename, long milisOut, long milisIn) {
- // Queue a command to load the sound file:
- CommandQueue(
- new CommandObject(CommandObject.FADE_OUT_IN, sourcename, new FilenameURL(filename), milisOut, milisIn));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * Fades out the volume of whatever the specified source is currently playing,
- * then fades the volume back in playing the specified file. Final volume after
- * fade-in completes will be equal to the source's previously assigned volume
- * level. The url parameter may not be null or empty. The third parameter
- * 'identifier' should look like a filename, and it must have the correct
- * extension so SoundSystem knows what codec to use for the file referenced by
- * the URL instance. The miliseconds parameters must be non-negative or zero.
- * This method will remove anything that is currently in the specified source's
- * list of queued sounds that would have played next when the current sound
- * finished playing. This method may only be used for streaming and MIDI
- * sources.
- *
- * @param sourcename Name of the source to fade out/in.
- * @param url URL handle to the sound file to play next.
- * @param identifier Filename/identifier of the file referenced by the URL.
- * @param milisOut Number of miliseconds the fadeout should take.
- * @param milisIn Number of miliseconds the fadein should take.
- */
- public void fadeOutIn(String sourcename, URL url, String identifier, long milisOut, long milisIn) {
- // Queue a command to load the sound file:
- CommandQueue(new CommandObject(CommandObject.FADE_OUT_IN, sourcename, new FilenameURL(url, identifier),
- milisOut, milisIn));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * Makes sure the current volume levels of streaming sources and MIDI are
- * correct. This method is designed to help reduce the "jerky" fading behavior
- * that happens when using some library and codec pluggins (such as
- * LibraryJavaSound and CodecJOrbis). This method has no effect on normal
- * "non-streaming" sources. It would normally be called somewhere in the main
- * "game loop". IMPORTANT: To optimize frame-rates, do not call this method for
- * every frame. It is better to just call this method at some acceptable
- * "granularity" (play around with different granularities to find what sounds
- * acceptable for a particular situation).
- */
- public void checkFadeVolumes() {
- // Queue a command to load check fading source volumes:
- CommandQueue(new CommandObject(CommandObject.CHECK_FADE_VOLUMES));
- // Wake the command thread to process commands:
- commandThread.interrupt();
- }
-
- /**
- * Creates a new permanant, streaming, priority source with zero attenuation.
- * The file may either be located within the JAR or at an online location. If
- * the file is online, filename must begin with "http://", since that is how
- * SoundSystem recognizes URL paths. If the file is located within the compiled
- * JAR, the package in which sound files are located may be set by calling
- * SoundSystemConfig.setSoundFilesPackage().
- *
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param filename Filename of the sound file to stream at this source.
- * @param toLoop Should this source loop, or play only once.
- */
- public void backgroundMusic(String sourcename, String filename, boolean toLoop) {
- // Queue a command to quick stream a new source:
- CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, true, true, toLoop, sourcename,
- new FilenameURL(filename), 0, 0, 0, SoundSystemConfig.ATTENUATION_NONE, 0, false));
- CommandQueue(new CommandObject(CommandObject.PLAY, sourcename));
-
- commandThread.interrupt();
- }
-
- /**
- * Creates a new permanant, streaming, priority source with zero attenuation.
- * The third parameter 'identifier' should look like a filename, and it must
- * have the correct extension so SoundSystem knows what codec to use for the
- * file referenced by the URL instance.
- *
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param url URL handle to the sound file to stream at this source.
- * @param identifier Filename/identifier of the file referenced by the URL.
- * @param toLoop Should this source loop, or play only once.
- */
- public void backgroundMusic(String sourcename, URL url, String identifier, boolean toLoop) {
- // Queue a command to quick stream a new source:
- CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, true, true, toLoop, sourcename,
- new FilenameURL(url, identifier), 0, 0, 0, SoundSystemConfig.ATTENUATION_NONE, 0, false));
- CommandQueue(new CommandObject(CommandObject.PLAY, sourcename));
-
- commandThread.interrupt();
- }
-
- /**
- * Creates a new non-streaming source. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Attenuation, fade distance, and rolloff factor.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param filename Filename/identifier of the sound file to play at this
- * source.
- * @param toLoop Should this source loop, or play only once.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attmodel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- */
- public void newSource(boolean priority, String sourcename, String filename, boolean toLoop, float x, float y,
- float z, int attmodel, float distOrRoll) {
- CommandQueue(new CommandObject(CommandObject.NEW_SOURCE, priority, false, toLoop, sourcename,
- new FilenameURL(filename), x, y, z, attmodel, distOrRoll));
- commandThread.interrupt();
- }
-
- /**
- * Creates a new non-streaming source. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Attenuation, fade distance, and rolloff factor.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param url URL handle to the sound file to stream at this source.
- * @param identifier Filename/identifier of the file referenced by the URL.
- * @param toLoop Should this source loop, or play only once.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attmodel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- */
- public void newSource(boolean priority, String sourcename, URL url, String identifier, boolean toLoop, float x,
- float y, float z, int attmodel, float distOrRoll) {
- CommandQueue(new CommandObject(CommandObject.NEW_SOURCE, priority, false, toLoop, sourcename,
- new FilenameURL(url, identifier), x, y, z, attmodel, distOrRoll));
- commandThread.interrupt();
- }
-
- /**
- * Creates a new streaming source. The file may either be located within the JAR
- * or at an online location. If the file is online, filename must begin with
- * "http://", since that is how SoundSystem recognizes URL paths. If the file is
- * located within the compiled JAR, the package in which sound files are located
- * may be set by calling SoundSystemConfig.setSoundFilesPackage().
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param filename The filename of the sound file to play at this source.
- * @param toLoop Should this source loop, or play only once.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attmodel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- */
- public void newStreamingSource(boolean priority, String sourcename, String filename, boolean toLoop, float x,
- float y, float z, int attmodel, float distOrRoll) {
- CommandQueue(new CommandObject(CommandObject.NEW_SOURCE, priority, true, toLoop, sourcename,
- new FilenameURL(filename), x, y, z, attmodel, distOrRoll));
- commandThread.interrupt();
- }
-
- /**
- * Creates a new streaming source. The fourth parameter 'identifier' should look
- * like a filename, and it must have the correct extension so SoundSystem knows
- * what codec to use for the file referenced by the URL instance.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param url URL handle to the sound file to stream at this source.
- * @param identifier Filename/identifier of the file referenced by the URL.
- * @param toLoop Should this source loop, or play only once.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attmodel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- */
- public void newStreamingSource(boolean priority, String sourcename, URL url, String identifier, boolean toLoop,
- float x, float y, float z, int attmodel, float distOrRoll) {
- CommandQueue(new CommandObject(CommandObject.NEW_SOURCE, priority, true, toLoop, sourcename,
- new FilenameURL(url, identifier), x, y, z, attmodel, distOrRoll));
- commandThread.interrupt();
- }
-
- /**
- * Opens a direct line for streaming audio data. This method creates a new
- * streaming source to play the data at. The resulting streaming source can be
- * manipulated the same as any other streaming source. Raw data can be sent to
- * the new streaming source using the feedRawAudioData() method.
- *
- * @param audioFormat Format that the data will be in.
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attModel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- */
- public void rawDataStream(AudioFormat audioFormat, boolean priority, String sourcename, float x, float y, float z,
- int attModel, float distOrRoll) {
- CommandQueue(new CommandObject(CommandObject.RAW_DATA_STREAM, audioFormat, priority, sourcename, x, y, z,
- attModel, distOrRoll));
- commandThread.interrupt();
- }
-
- /**
- * Creates a temporary source and plays it. After the source finishes playing,
- * it is removed. Returns a randomly generated name for the new source. NOTE: to
- * make a source created by this method permanant, call the setActive() method
- * using the return value for sourcename.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param filename Filename/identifier of the sound file to play at this
- * source.
- * @param toLoop Should this source loop, or play only once.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attmodel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- * @return The new sorce's name.
- */
- public String quickPlay(boolean priority, String filename, boolean toLoop, float x, float y, float z, int attmodel,
- float distOrRoll) {
- // generate a random name for this source:
- String sourcename = "Source_" + randomNumberGenerator.nextInt() + "_" + randomNumberGenerator.nextInt();
-
- // Queue a command to quick play this new source:
- CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, priority, false, toLoop, sourcename,
- new FilenameURL(filename), x, y, z, attmodel, distOrRoll, true));
- CommandQueue(new CommandObject(CommandObject.PLAY, sourcename));
- // Wake the command thread to process commands:
- commandThread.interrupt();
-
- // return the new source name.
- return sourcename;
- }
-
- /**
- * Creates a temporary source and plays it. After the source finishes playing,
- * it is removed. Returns a randomly generated name for the new source. NOTE: to
- * make a source created by this method permanant, call the setActive() method
- * using the return value for sourcename.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param url URL handle to the sound file to stream at this source.
- * @param identifier Filename/identifier of the file referenced by the URL.
- * @param toLoop Should this source loop, or play only once.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attmodel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- * @return The new sorce's name.
- */
- public String quickPlay(boolean priority, URL url, String identifier, boolean toLoop, float x, float y, float z,
- int attmodel, float distOrRoll) {
- // generate a random name for this source:
- String sourcename = "Source_" + randomNumberGenerator.nextInt() + "_" + randomNumberGenerator.nextInt();
-
- // Queue a command to quick play this new source:
- CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, priority, false, toLoop, sourcename,
- new FilenameURL(url, identifier), x, y, z, attmodel, distOrRoll, true));
- CommandQueue(new CommandObject(CommandObject.PLAY, sourcename));
- // Wake the command thread to process commands:
- commandThread.interrupt();
-
- // return the new source name.
- return sourcename;
- }
-
- /**
- * Creates a temporary source and streams it. After the source finishes playing,
- * it is removed. The file may either be located within the JAR or at an online
- * location. If the file is online, filename must begin with "http://", since
- * that is how SoundSystem recognizes URL paths. If the file is located within
- * the compiled JAR, the package in which sound files are located may be set by
- * calling SoundSystemConfig.setSoundFilesPackage(). Returns a randomly
- * generated name for the new source. NOTE: to make a source created by this
- * method permanant, call the setActive() method using the return value for
- * sourcename.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param filename Filename of the sound file to stream at this source.
- * @param toLoop Should this source loop, or play only once.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attmodel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- * @return The new sorce's name.
- */
- public String quickStream(boolean priority, String filename, boolean toLoop, float x, float y, float z,
- int attmodel, float distOrRoll) {
- // generate a random name for this source:
- String sourcename = "Source_" + randomNumberGenerator.nextInt() + "_" + randomNumberGenerator.nextInt();
-
- // Queue a command to quick stream this new source:
- CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, priority, true, toLoop, sourcename,
- new FilenameURL(filename), x, y, z, attmodel, distOrRoll, true));
- CommandQueue(new CommandObject(CommandObject.PLAY, sourcename));
- // Wake the command thread to process commands:
- commandThread.interrupt();
-
- // return the new source name.
- return sourcename;
- }
-
- /**
- * Creates a temporary source and streams it. After the source finishes playing,
- * it is removed. The third parameter 'identifier' should look like a filename,
- * and it must have the correct extension so SoundSystem knows what codec to use
- * for the file referenced by the URL instance. Returns a randomly generated
- * name for the new source. NOTE: to make a source created by this method
- * permanant, call the setActive() method using the return value for sourcename.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param url URL handle to the sound file to stream at this source.
- * @param identifier Filename/identifier of the file referenced by the URL.
- * @param toLoop Should this source loop, or play only once.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attmodel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- * @return The new sorce's name.
- */
- public String quickStream(boolean priority, URL url, String identifier, boolean toLoop, float x, float y, float z,
- int attmodel, float distOrRoll) {
- // generate a random name for this source:
- String sourcename = "Source_" + randomNumberGenerator.nextInt() + "_" + randomNumberGenerator.nextInt();
-
- // Queue a command to quick stream this new source:
- CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, priority, true, toLoop, sourcename,
- new FilenameURL(url, identifier), x, y, z, attmodel, distOrRoll, true));
- CommandQueue(new CommandObject(CommandObject.PLAY, sourcename));
- // Wake the command thread to process commands:
- commandThread.interrupt();
-
- // return the new source name.
- return sourcename;
- }
-
- /**
- * Move a source to the specified location.
- *
- * @param sourcename Identifier for the source.
- * @param x destination X coordinate.
- * @param y destination Y coordinate.
- * @param z destination Z coordinate.
- */
- public void setPosition(String sourcename, float x, float y, float z) {
- CommandQueue(new CommandObject(CommandObject.SET_POSITION, sourcename, x, y, z));
- commandThread.interrupt();
- }
-
- /**
- * Manually sets the specified source's volume.
- *
- * @param sourcename Source to move.
- * @param value New volume, float value ( 0.0f - 1.0f ).
- */
- public void setVolume(String sourcename, float value) {
- CommandQueue(new CommandObject(CommandObject.SET_VOLUME, sourcename, value));
- commandThread.interrupt();
- }
-
- /**
- * Returns the current volume of the specified source, or zero if the specified
- * source was not found.
- *
- * @param sourcename Source to read volume from.
- * @return Float value representing the source volume (0.0f - 1.0f).
- */
- public float getVolume(String sourcename) {
- synchronized (SoundSystemConfig.THREAD_SYNC) {
- if (soundLibrary != null)
- return soundLibrary.getVolume(sourcename);
- else
- return 0.0f;
- }
- }
-
- /**
- * Manually sets the specified source's pitch.
- *
- * @param sourcename The source's name.
- * @param value A float value ( 0.5f - 2.0f ).
- */
- public void setPitch(String sourcename, float value) {
- CommandQueue(new CommandObject(CommandObject.SET_PITCH, sourcename, value));
- commandThread.interrupt();
- }
-
- /**
- * Returns the pitch of the specified source.
- *
- * @param sourcename The source's name.
- * @return Float value representing the source pitch (0.5f - 2.0f).
- */
- public float getPitch(String sourcename) {
- if (soundLibrary != null)
- return soundLibrary.getPitch(sourcename);
- else
- return 1.0f;
- }
-
- /**
- * Set a source's priority factor. A priority source will not be overriden when
- * too many sources are playing at once.
- *
- * @param sourcename Identifier for the source.
- * @param pri Setting this to true makes this source a priority source.
- */
- public void setPriority(String sourcename, boolean pri) {
- CommandQueue(new CommandObject(CommandObject.SET_PRIORITY, sourcename, pri));
- commandThread.interrupt();
- }
-
- /**
- * Changes a source to looping or non-looping.
- *
- * @param sourcename Identifier for the source.
- * @param lp This source should loop.
- */
- public void setLooping(String sourcename, boolean lp) {
- CommandQueue(new CommandObject(CommandObject.SET_LOOPING, sourcename, lp));
- commandThread.interrupt();
- }
-
- /**
- * Changes a source's attenuation model. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Attenuation.
- *
- * @param sourcename Identifier for the source.
- * @param model Attenuation model to use.
- */
- public void setAttenuation(String sourcename, int model) {
- CommandQueue(new CommandObject(CommandObject.SET_ATTENUATION, sourcename, model));
- commandThread.interrupt();
- }
-
- /**
- * Changes a source's fade distance or rolloff factor. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about fade distance and rolloff.
- *
- * @param sourcename Identifier for the source.
- * @param dr Either the fading distance or rolloff factor, depending on
- * the attenuation model used.
- */
- public void setDistOrRoll(String sourcename, float dr) {
- CommandQueue(new CommandObject(CommandObject.SET_DIST_OR_ROLL, sourcename, dr));
- commandThread.interrupt();
- }
-
- /**
- * Changes the Doppler factor, for determining Doppler effect scale. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Doppler effect.
- *
- * @param dopplerFactor New value for Doppler factor.
- */
- public void changeDopplerFactor(float dopplerFactor) {
- CommandQueue(new CommandObject(CommandObject.CHANGE_DOPPLER_FACTOR, dopplerFactor));
- commandThread.interrupt();
- }
-
- /**
- * Changes the Doppler velocity, for use in Doppler effect. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Doppler effect.
- *
- * @param dopplerVelocity New value for Doppler velocity.
- */
- public void changeDopplerVelocity(float dopplerVelocity) {
- CommandQueue(new CommandObject(CommandObject.CHANGE_DOPPLER_VELOCITY, dopplerVelocity));
- commandThread.interrupt();
- }
-
- /**
- * Sets the specified source's velocity, for use in Doppler effect. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Doppler effect.
- *
- * @param sourcename The source's name.
- * @param x Velocity along world x-axis.
- * @param y Velocity along world y-axis.
- * @param z Velocity along world z-axis.
- */
- public void setVelocity(String sourcename, float x, float y, float z) {
- CommandQueue(new CommandObject(CommandObject.SET_VELOCITY, sourcename, x, y, z));
- commandThread.interrupt();
- }
-
- /**
- * Sets the listener's velocity, for use in Doppler effect. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Doppler effect.
- *
- * @param x Velocity along world x-axis.
- * @param y Velocity along world y-axis.
- * @param z Velocity along world z-axis.
- */
- public void setListenerVelocity(float x, float y, float z) {
- CommandQueue(new CommandObject(CommandObject.SET_LISTENER_VELOCITY, x, y, z));
- commandThread.interrupt();
- }
-
- /**
- * Returns the number of miliseconds since the specified source began playing.
- *
- * @return miliseconds, or -1 if not playing or unable to calculate
- */
- public float millisecondsPlayed(String sourcename) {
- synchronized (SoundSystemConfig.THREAD_SYNC) {
- return soundLibrary.millisecondsPlayed(sourcename);
- }
- }
-
- /**
- * Feeds raw data through the specified source. The source must be a streaming
- * source and it can not be already associated with a file or URL to stream
- * from. Only use this for streaming sources created with the rawDataStream()
- * method. NOTE: Be carefull how much data you send to a source to stream. The
- * data will be processed at playback speed, so if you queue up 1 hour worth of
- * data, it will take 1 hour to play (not to mention hogging a ton of memory).
- * To clear out all queued data from the source, use the flush() method. Also
- * note: if there is a break in the data stream, you will hear clicks and
- * studders, so ensure that the data flow is steady.
- *
- * @param sourcename Name of the streaming source to play from.
- * @param buffer Byte buffer containing raw audio data to stream.
- */
- public void feedRawAudioData(String sourcename, byte[] buffer) {
- CommandQueue(new CommandObject(CommandObject.FEED_RAW_AUDIO_DATA, sourcename, buffer));
- commandThread.interrupt();
- }
-
- /**
- * Plays the specified source.
- *
- * @param sourcename Identifier for the source.
- */
- public void play(String sourcename) {
- CommandQueue(new CommandObject(CommandObject.PLAY, sourcename));
- commandThread.interrupt();
- }
-
- /**
- * Pauses the specified source.
- *
- * @param sourcename Identifier for the source.
- */
- public void pause(String sourcename) {
- CommandQueue(new CommandObject(CommandObject.PAUSE, sourcename));
- commandThread.interrupt();
- }
-
- /**
- * Stops the specified source.
- *
- * @param sourcename Identifier for the source.
- */
- public void stop(String sourcename) {
- CommandQueue(new CommandObject(CommandObject.STOP, sourcename));
- commandThread.interrupt();
- }
-
- /**
- * Rewinds the specified source.
- *
- * @param sourcename Identifier for the source.
- */
- public void rewind(String sourcename) {
- CommandQueue(new CommandObject(CommandObject.REWIND, sourcename));
- commandThread.interrupt();
- }
-
- /**
- * Flushes all previously queued audio data from a streaming source.
- *
- * @param sourcename Identifier for the source.
- */
- public void flush(String sourcename) {
- CommandQueue(new CommandObject(CommandObject.FLUSH, sourcename));
- commandThread.interrupt();
- }
-
- /**
- * Culls the specified source. A culled source can not be played until it has
- * been activated again.
- *
- * @param sourcename Identifier for the source.
- */
- public void cull(String sourcename) {
- CommandQueue(new CommandObject(CommandObject.CULL, sourcename));
- commandThread.interrupt();
- }
-
- /**
- * Activates the specified source after it was culled, so it can be played
- * again.
- *
- * @param sourcename Identifier for the source.
- */
- public void activate(String sourcename) {
- CommandQueue(new CommandObject(CommandObject.ACTIVATE, sourcename));
- commandThread.interrupt();
- }
-
- /**
- * Sets a flag for a source indicating whether it should be used or if it should
- * be removed after it finishes playing. One possible use for this method is to
- * make temporary sources that were created with quickPlay() permanant. Another
- * use could be to have a source automatically removed after it finishes
- * playing. NOTE: Setting a source to temporary does not stop it, and setting a
- * source to permanant does not play it. It is also important to note that a
- * looping temporary source will not be removed as long as it keeps playing.
- *
- * @param sourcename Identifier for the source.
- * @param temporary True = temporary, False = permanant.
- */
- public void setTemporary(String sourcename, boolean temporary) {
- CommandQueue(new CommandObject(CommandObject.SET_TEMPORARY, sourcename, temporary));
- commandThread.interrupt();
- }
-
- /**
- * Removes the specified source and clears up any memory it used.
- *
- * @param sourcename Identifier for the source.
- */
- public void removeSource(String sourcename) {
- CommandQueue(new CommandObject(CommandObject.REMOVE_SOURCE, sourcename));
- commandThread.interrupt();
- }
-
- /**
- * Moves the listener relative to the current location.
- *
- * @param x X offset.
- * @param y Y offset.
- * @param z Z offset.
- */
- public void moveListener(float x, float y, float z) {
- CommandQueue(new CommandObject(CommandObject.MOVE_LISTENER, x, y, z));
- commandThread.interrupt();
- }
-
- /**
- * Moves the listener to the specified location.
- *
- * @param x Destination X coordinate.
- * @param y Destination Y coordinate.
- * @param z Destination Z coordinate.
- */
- public void setListenerPosition(float x, float y, float z) {
- CommandQueue(new CommandObject(CommandObject.SET_LISTENER_POSITION, x, y, z));
- commandThread.interrupt();
- }
-
- /**
- * Turns the listener counterclockwise by "angle" radians around the y-axis,
- * relative to the current angle.
- *
- * @param angle radian offset.
- */
- public void turnListener(float angle) {
- CommandQueue(new CommandObject(CommandObject.TURN_LISTENER, angle));
- commandThread.interrupt();
- }
-
- /**
- * Sets the listener's angle in radians around the y-axis.
- *
- * @param angle radians.
- */
- public void setListenerAngle(float angle) {
- CommandQueue(new CommandObject(CommandObject.SET_LISTENER_ANGLE, angle));
- commandThread.interrupt();
- }
-
- /**
- * Sets the listener's orientation.
- *
- * @param lookX X coordinate of the (normalized) look-at vector.
- * @param lookY Y coordinate of the (normalized) look-at vector.
- * @param lookZ Z coordinate of the (normalized) look-at vector.
- * @param upX X coordinate of the (normalized) up-direction vector.
- * @param upY Y coordinate of the (normalized) up-direction vector.
- * @param upZ Z coordinate of the (normalized) up-direction vector.
- */
- public void setListenerOrientation(float lookX, float lookY, float lookZ, float upX, float upY, float upZ) {
- CommandQueue(new CommandObject(CommandObject.SET_LISTENER_ORIENTATION, lookX, lookY, lookZ, upX, upY, upZ));
- commandThread.interrupt();
- }
-
- /**
- * Sets the overall volume, affecting all sources.
- *
- * @param value New volume, float value ( 0.0f - 1.0f ).
- */
- public void setMasterVolume(float value) {
- CommandQueue(new CommandObject(CommandObject.SET_MASTER_VOLUME, value));
- commandThread.interrupt();
- }
-
- /**
- * Returns the overall volume, affecting all sources.
- *
- * @return Float value representing the master volume (0.0f - 1.0f).
- */
- public float getMasterVolume() {
- return SoundSystemConfig.getMasterGain();
- }
-
- /**
- * Method for obtaining information about the listener's position and
- * orientation.
- *
- * @return a {@link paulscode.sound.ListenerData ListenerData} object.
- */
- public ListenerData getListenerData() {
- synchronized (SoundSystemConfig.THREAD_SYNC) {
- return soundLibrary.getListenerData();
- }
- }
-
- /**
- * Switches to the specified library, and preserves all sources.
- *
- * @param libraryClass Library to use.
- * @return True if switch was successful. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for
- * information about chosing a sound library.
- */
- public boolean switchLibrary(Class libraryClass) throws SoundSystemException {
- synchronized (SoundSystemConfig.THREAD_SYNC) {
- initialized(SET, false);
-
- HashMap sourceMap = null;
- ListenerData listenerData = null;
-
- boolean wasMidiChannel = false;
- MidiChannel midiChannel = null;
- FilenameURL midiFilenameURL = null;
- String midiSourcename = "";
- boolean midiToLoop = true;
-
- if (soundLibrary != null) {
- currentLibrary(SET, null);
- sourceMap = copySources(soundLibrary.getSources());
- listenerData = soundLibrary.getListenerData();
- midiChannel = soundLibrary.getMidiChannel();
- if (midiChannel != null) {
- wasMidiChannel = true;
- midiToLoop = midiChannel.getLooping();
- midiSourcename = midiChannel.getSourcename();
- midiFilenameURL = midiChannel.getFilenameURL();
- }
-
- soundLibrary.cleanup();
- soundLibrary = null;
- }
- message("", 0);
- message("Switching to " + SoundSystemConfig.getLibraryTitle(libraryClass), 0);
- message("(" + SoundSystemConfig.getLibraryDescription(libraryClass) + ")", 1);
-
- try {
- soundLibrary = (Library) libraryClass.newInstance();
- } catch (InstantiationException ie) {
- errorMessage("The specified library did not load properly", 1);
- } catch (IllegalAccessException iae) {
- errorMessage("The specified library did not load properly", 1);
- } catch (ExceptionInInitializerError eiie) {
- errorMessage("The specified library did not load properly", 1);
- } catch (SecurityException se) {
- errorMessage("The specified library did not load properly", 1);
- }
-
- if (errorCheck(soundLibrary == null, "Library null after " + "initialization in method 'switchLibrary'",
- 1)) {
- SoundSystemException sse = new SoundSystemException(
- className + " did not load properly. " + "Library was null after initialization.",
- SoundSystemException.LIBRARY_NULL);
- lastException(SET, sse);
- initialized(SET, true);
- throw sse;
- }
-
- try {
- soundLibrary.init();
- } catch (SoundSystemException sse) {
- lastException(SET, sse);
- initialized(SET, true);
- throw sse;
- }
-
- soundLibrary.setListenerData(listenerData);
- if (wasMidiChannel) {
- if (midiChannel != null)
- midiChannel.cleanup();
- midiChannel = new MidiChannel(midiToLoop, midiSourcename, midiFilenameURL);
- soundLibrary.setMidiChannel(midiChannel);
- }
- soundLibrary.copySources(sourceMap);
-
- message("", 0);
-
- lastException(SET, null);
- initialized(SET, true);
-
- return true;
- }
- }
-
- /**
- * Switches to the specified library, loosing all sources.
- *
- * @param libraryClass Library to use. See
- * {@link paulscode.sound.SoundSystemConfig
- * SoundSystemConfig} for information about chosing a sound
- * library.
- */
- public boolean newLibrary(Class libraryClass) throws SoundSystemException {
- initialized(SET, false);
-
- CommandQueue(new CommandObject(CommandObject.NEW_LIBRARY, libraryClass));
- commandThread.interrupt();
-
- for (int x = 0; (!initialized(GET, XXX)) && (x < 100); x++) {
- snooze(400);
- commandThread.interrupt();
- }
-
- if (!initialized(GET, XXX)) {
- SoundSystemException sse = new SoundSystemException(className + " did not load after 30 seconds.",
- SoundSystemException.LIBRARY_NULL);
- lastException(SET, sse);
- throw sse;
- } else {
- SoundSystemException sse = lastException(GET, null);
- if (sse != null)
- throw sse;
- }
- return true;
- }
-
- /**
- * Switches to the specified library, loosing all sources. This method is used
- * internally by SoundSystem for thread synchronization, and it can not be
- * called directly - please use the newLibrary() method instead.
- *
- * @param libraryClass Library to use. See
- * {@link paulscode.sound.SoundSystemConfig
- * SoundSystemConfig} for information about chosing a sound
- * library.
- */
- private void CommandNewLibrary(Class libraryClass) {
- initialized(SET, false);
-
- String headerMessage = "Initializing ";
- if (soundLibrary != null) {
- currentLibrary(SET, null);
- // we are switching libraries
- headerMessage = "Switching to ";
- soundLibrary.cleanup();
- soundLibrary = null;
- }
- message(headerMessage + SoundSystemConfig.getLibraryTitle(libraryClass), 0);
- message("(" + SoundSystemConfig.getLibraryDescription(libraryClass) + ")", 1);
-
- try {
- soundLibrary = (Library) libraryClass.newInstance();
- } catch (InstantiationException ie) {
- errorMessage("The specified library did not load properly", 1);
- } catch (IllegalAccessException iae) {
- errorMessage("The specified library did not load properly", 1);
- } catch (ExceptionInInitializerError eiie) {
- errorMessage("The specified library did not load properly", 1);
- } catch (SecurityException se) {
- errorMessage("The specified library did not load properly", 1);
- }
-
- if (errorCheck(soundLibrary == null, "Library null after " + "initialization in method 'newLibrary'", 1)) {
- lastException(SET,
- new SoundSystemException(
- className + " did not load properly. " + "Library was null after initialization.",
- SoundSystemException.LIBRARY_NULL));
- importantMessage("Switching to silent mode", 1);
-
- try {
- soundLibrary = new Library();
- } catch (SoundSystemException sse) {
- lastException(SET,
- new SoundSystemException(
- "Silent mode did not load properly. " + "Library was null after initialization.",
- SoundSystemException.LIBRARY_NULL));
- initialized(SET, true);
- return;
- }
- }
-
- try {
- soundLibrary.init();
- } catch (SoundSystemException sse) {
- lastException(SET, sse);
- initialized(SET, true);
- return;
- }
-
- lastException(SET, null);
- initialized(SET, true);
-
- return;
- }
-
- /**
- * Calls the library's initialize() method. This method is used internally by
- * SoundSystem for thread synchronization, and it can not be called directly.
- */
- private void CommandInitialize() {
- try {
- if (errorCheck(soundLibrary == null, "Library null after " + "initialization in method 'CommandInitialize'",
- 1)) {
- SoundSystemException sse = new SoundSystemException(
- className + " did not load properly. " + "Library was null after initialization.",
- SoundSystemException.LIBRARY_NULL);
- lastException(SET, sse);
- throw sse;
- }
- soundLibrary.init();
- } catch (SoundSystemException sse) {
- lastException(SET, sse);
- initialized(SET, true);
- }
- }
-
- /**
- * Loads sample data from a sound file or URL into memory. This method is used
- * internally by SoundSystem for thread synchronization, and it can not be
- * called directly - please use the loadSound() method instead.
- *
- * @param filenameURL Filename/URL of the sound file to load.
- */
- private void CommandLoadSound(FilenameURL filenameURL) {
- if (soundLibrary != null)
- soundLibrary.loadSound(filenameURL);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandLoadSound'", 0);
- }
-
- /**
- * Saves the specified sample data, under the specified identifier. This
- * identifier can be later used in place of 'filename' parameters to reference
- * the sample data. This method is used internally by SoundSystem for thread
- * synchronization, and it can not be called directly - please use the
- * loadSound() method instead.
- *
- * @param buffer the sample data and audio format to save.
- * @param identifier What to call the sample.
- */
- private void CommandLoadSound(SoundBuffer buffer, String identifier) {
- if (soundLibrary != null)
- soundLibrary.loadSound(buffer, identifier);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandLoadSound'", 0);
- }
-
- /**
- * Removes previously loaded sampled data from memory. This method is used
- * internally by SoundSystem for thread synchronization, and it can not be
- * called directly - please use the unloadSound() method instead.
- *
- * @param filename Filename or string identifyer of sound to unload.
- */
- private void CommandUnloadSound(String filename) {
- if (soundLibrary != null)
- soundLibrary.unloadSound(filename);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandLoadSound'", 0);
- }
-
- /**
- * If the specified source is a streaming source or MIDI source, this method
- * queues up the next sound to play when the previous playback ends. This method
- * has no effect on non-streaming sources. This method is used internally by
- * SoundSystem for thread synchronization, and it can not be called directly -
- * please use the queueSound() method instead.
- *
- * @param sourcename Source identifier.
- * @param filenameURL Filename/URL of the sound file to play next.
- */
- private void CommandQueueSound(String sourcename, FilenameURL filenameURL) {
- if (soundLibrary != null)
- soundLibrary.queueSound(sourcename, filenameURL);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandQueueSound'", 0);
- }
-
- /**
- * Removes the first occurrence of the specified filename/identifier from the
- * specified source's list of sounds to play when previous playback ends. This
- * method has no effect on non-streaming sources. This method is used internally
- * by SoundSystem for thread synchronization, and it can not be called directly
- * - please use the dequeueSound() method instead.
- *
- * @param sourcename Source identifier.
- * @param filename Filename/identifier of the sound file to remove from the
- * queue.
- */
- private void CommandDequeueSound(String sourcename, String filename) {
- if (soundLibrary != null)
- soundLibrary.dequeueSound(sourcename, filename);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandDequeueSound'", 0);
- }
-
- /**
- * Fades out the volume of whatever the specified source is currently playing,
- * then begins playing the specified file at the source's previously assigned
- * volume level. If the filenameURL parameter is null or empty, the specified
- * source will simply fade out and stop. The miliseconds parameter must be
- * non-negative or zero. This method will remove anything that is currently in
- * the specified source's list of queued sounds that would have played next when
- * the current sound finished playing. This method may only be used for
- * streaming and MIDI sources. This method is used internally by SoundSystem for
- * thread synchronization, and it can not be called directly - please use the
- * fadeOut() method instead.
- *
- * @param sourcename Name of the source to fade out.
- * @param filenameURL Filename/URL of a sound file to play next, or null for
- * none.
- * @param milis Number of miliseconds the fadeout should take.
- */
- private void CommandFadeOut(String sourcename, FilenameURL filenameURL, long milis) {
- if (soundLibrary != null)
- soundLibrary.fadeOut(sourcename, filenameURL, milis);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandFadeOut'", 0);
- }
-
- /**
- * Fades out the volume of whatever the specified source is currently playing,
- * then fades the volume back in playing the specified file. Final volume after
- * fade-in completes will be equal to the source's previously assigned volume
- * level. The filenameURL parameter may not be null or empty. The miliseconds
- * parameters must be non-negative or zero. This method will remove anything
- * that is currently in the specified source's list of queued sounds that would
- * have played next when the current sound finished playing. This method may
- * only be used for streaming and MIDI sources. This method is used internally
- * by SoundSystem for thread synchronization, and it can not be called directly
- * - please use the fadeOutIn() method instead.
- *
- * @param sourcename Name of the source to fade out/in.
- * @param filenameURL Filename/URL of a sound file to play next, or null for
- * none.
- * @param milisOut Number of miliseconds the fadeout should take.
- * @param milisIn Number of miliseconds the fadein should take.
- */
- private void CommandFadeOutIn(String sourcename, FilenameURL filenameURL, long milisOut, long milisIn) {
- if (soundLibrary != null)
- soundLibrary.fadeOutIn(sourcename, filenameURL, milisOut, milisIn);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandFadeOutIn'", 0);
- }
-
- /**
- * Makes sure the current volume levels of streaming sources and MIDI are
- * correct. This method is designed to help reduce the "jerky" fading behavior
- * that happens when using some library and codec pluggins (such as
- * LibraryJavaSound and CodecJOrbis). This method has no effect on normal
- * "non-streaming" sources. It would normally be called somewhere in the main
- * "game loop". IMPORTANT: To optimize frame-rates, do not call this method for
- * every frame. It is better to just call this method at some acceptable
- * "granularity" (play around with different granularities to find what sounds
- * acceptable for a particular situation). This method is used internally by
- * SoundSystem for thread synchronization, and it can not be called directly -
- * please use the checkFadeVolumes() method instead.
- */
- private void CommandCheckFadeVolumes() {
- if (soundLibrary != null)
- soundLibrary.checkFadeVolumes();
- else
- errorMessage("Variable 'soundLibrary' null in method " + "'CommandCheckFadeVolumes'", 0);
- }
-
- /**
- * Loads a sound file into memory. This method is used internally by SoundSystem
- * for thread synchronization, and it can not be called directly - please use
- * the newSource() method instead.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param toStream Whether or not to stream the source.
- * @param toLoop Whether or not to loop the source.
- * @param sourcename A unique identifier for the source.
- * @param filenameURL Filename/URL of the sound file to play at this source.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attModel Attenuation model to use.
- * @param distORroll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- */
- private void CommandNewSource(boolean priority, boolean toStream, boolean toLoop, String sourcename,
- FilenameURL filenameURL, float x, float y, float z, int attModel, float distORroll) {
- if (soundLibrary != null) {
- if (filenameURL.getFilename().matches(SoundSystemConfig.EXTENSION_MIDI) && !SoundSystemConfig.midiCodec()) {
- soundLibrary.loadMidi(toLoop, sourcename, filenameURL);
- } else {
- soundLibrary.newSource(priority, toStream, toLoop, sourcename, filenameURL, x, y, z, attModel,
- distORroll);
- }
- } else
- errorMessage("Variable 'soundLibrary' null in method 'CommandNewSource'", 0);
- }
-
- /**
- * Opens a direct line for streaming audio data. This method is used internally
- * by SoundSystem, and it can not be called directly - please use the
- * rawDataStream() method instead.
- *
- * @param audioFormat Format that the data will be in.
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attModel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- */
- private void CommandRawDataStream(AudioFormat audioFormat, boolean priority, String sourcename, float x, float y,
- float z, int attModel, float distOrRoll) {
- if (soundLibrary != null)
- soundLibrary.rawDataStream(audioFormat, priority, sourcename, x, y, z, attModel, distOrRoll);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandRawDataStream'", 0);
- }
-
- /**
- * Creates a temporary source and either plays or streams it. After the source
- * finishes playing, it is removed. This method is used internally by
- * SoundSystem for thread synchronization, and it can not be called directly -
- * please use the quickPlay() method instead.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param toStream Whether or not to stream the source.
- * @param toLoop Whether or not to loop the source.
- * @param sourcename A unique identifier for the source.
- * @param filenameURL Filename/URL of the sound file to play at this source.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attModel Attenuation model to use.
- * @param distORroll Either the fading distance or rolloff factor, depending on
- * the value of "attmodel".
- * @param temporary Whether or not the source should be removed after it
- * finishes playing.
- */
- private void CommandQuickPlay(boolean priority, boolean toStream, boolean toLoop, String sourcename,
- FilenameURL filenameURL, float x, float y, float z, int attModel, float distORroll, boolean temporary) {
- if (soundLibrary != null) {
- if (filenameURL.getFilename().matches(SoundSystemConfig.EXTENSION_MIDI) && !SoundSystemConfig.midiCodec()) {
- soundLibrary.loadMidi(toLoop, sourcename, filenameURL);
- } else {
- soundLibrary.quickPlay(priority, toStream, toLoop, sourcename, filenameURL, x, y, z, attModel,
- distORroll, temporary);
- }
- } else
- errorMessage("Variable 'soundLibrary' null in method 'CommandQuickPlay'", 0);
- }
-
- /**
- * Moves a source to the specified coordinates. This method is used internally
- * by SoundSystem for thread synchronization, and it can not be called directly
- * - please use the setPosition() method instead.
- *
- * @param sourcename Source to move.
- * @param x Destination X coordinate.
- * @param y Destination Y coordinate.
- * @param z Destination Z coordinate.
- */
- private void CommandSetPosition(String sourcename, float x, float y, float z) {
- if (soundLibrary != null)
- soundLibrary.setPosition(sourcename, x, y, z);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandMoveSource'", 0);
- }
-
- /**
- * Manually sets the specified source's volume. This method is used internally
- * by SoundSystem for thread synchronization, and it can not be called directly
- * - please use the setVolume() method instead.
- *
- * @param sourcename Source to change the volume of.
- * @param value New volume, float value ( 0.0f - 1.0f ).
- */
- private void CommandSetVolume(String sourcename, float value) {
- if (soundLibrary != null)
- soundLibrary.setVolume(sourcename, value);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetVolume'", 0);
- }
-
- /**
- * Manually sets the specified source's pitch. This method is used internally by
- * SoundSystem for thread synchronization, and it can not be called directly -
- * please use the setPitch() method instead.
- *
- * @param sourcename Source to change the pitch of.
- * @param value New pitch, float value ( 0.5f - 2.0f ).
- */
- private void CommandSetPitch(String sourcename, float value) {
- if (soundLibrary != null)
- soundLibrary.setPitch(sourcename, value);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetPitch'", 0);
- }
-
- /**
- * Set a source's priority factor. A priority source will not be overriden when
- * too many sources are playing at once. This method is used internally by
- * SoundSystem for thread synchronization, and it can not be called directly -
- * please use the setPriority() method instead.
- *
- * @param sourcename Identifier for the source.
- * @param pri Setting this to true makes this source a priority source.
- */
- private void CommandSetPriority(String sourcename, boolean pri) {
- if (soundLibrary != null)
- soundLibrary.setPriority(sourcename, pri);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetPriority'", 0);
- }
-
- /**
- * Changes a source to looping or non-looping. This method is used internally by
- * SoundSystem for thread synchronization, and it can not be called directly -
- * please use the setLooping() method instead.
- *
- * @param sourcename Identifier for the source.
- * @param lp This source should loop.
- */
- private void CommandSetLooping(String sourcename, boolean lp) {
- if (soundLibrary != null)
- soundLibrary.setLooping(sourcename, lp);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetLooping'", 0);
- }
-
- /**
- * Changes a source's attenuation model. This method is used internally by
- * SoundSystem for thread synchronization, and it can not be called directly -
- * please use the setAttenuation() method instead. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Attenuation.
- *
- * @param sourcename Identifier for the source.
- * @param model Attenuation model to use.
- */
- private void CommandSetAttenuation(String sourcename, int model) {
- if (soundLibrary != null)
- soundLibrary.setAttenuation(sourcename, model);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetAttenuation'", 0);
- }
-
- /**
- * Changes a source's fade distance or rolloff factor. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about fade distance and rolloff.
- *
- * @param sourcename Identifier for the source.
- * @param dr Either the fading distance or rolloff factor, depending on
- * the attenuation model used.
- */
- private void CommandSetDistOrRoll(String sourcename, float dr) {
- if (soundLibrary != null)
- soundLibrary.setDistOrRoll(sourcename, dr);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetDistOrRoll'", 0);
- }
-
- /**
- * Changes the Doppler factor. This method is used internally by SoundSystem for
- * thread synchronization, and it can not be called directly - please use the
- * setDopplerFactor() method instead. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Doppler effect.
- *
- * @param dopplerFactor New Doppler factor, for determining Doppler effect
- * scale.
- */
- private void CommandChangeDopplerFactor(float dopplerFactor) {
- if (soundLibrary != null) {
- SoundSystemConfig.setDopplerFactor(dopplerFactor);
- soundLibrary.dopplerChanged();
- } else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetDopplerFactor'", 0);
- }
-
- /**
- * Changes the Doppler velocity. This method is used internally by SoundSystem
- * for thread synchronization, and it can not be called directly - please use
- * the setDopplerVelocity() method instead. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Doppler effect.
- *
- * @param dopplerVelocity New Doppler velocity, for use in Doppler effect.
- */
- private void CommandChangeDopplerVelocity(float dopplerVelocity) {
- if (soundLibrary != null) {
- SoundSystemConfig.setDopplerVelocity(dopplerVelocity);
- soundLibrary.dopplerChanged();
- } else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetDopplerFactor'", 0);
- }
-
- /**
- * Changes a source's velocity, for use in Doppler effect. This method is used
- * internally by SoundSystem for thread synchronization, and it can not be
- * called directly - please use the setVelocity() method instead. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Doppler effect.
- *
- * @param sourcename Identifier for the source.
- * @param x Source's velocity along the world x-axis.
- * @param y Source's velocity along the world y-axis.
- * @param z Source's velocity along the world z-axis.
- */
- private void CommandSetVelocity(String sourcename, float x, float y, float z) {
- if (soundLibrary != null)
- soundLibrary.setVelocity(sourcename, x, y, z);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandVelocity'", 0);
- }
-
- /**
- * Changes the listener's velocity, for use in Doppler effect. This method is
- * used internally by SoundSystem for thread synchronization, and it can not be
- * called directly - please use the setListenerVelocity() method instead. See
- * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more
- * information about Doppler effect.
- *
- * @param x Velocity along the world x-axis.
- * @param y Velocity along the world y-axis.
- * @param z Velocity along the world z-axis.
- */
- private void CommandSetListenerVelocity(float x, float y, float z) {
- if (soundLibrary != null)
- soundLibrary.setListenerVelocity(x, y, z);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetListenerVelocity'", 0);
- }
-
- /**
- * Plays the specified source. This method is used internally by SoundSystem for
- * thread synchronization, and it can not be called directly - please use the
- * play() method instead.
- *
- * @param sourcename Identifier for the source.
- */
- private void CommandPlay(String sourcename) {
- if (soundLibrary != null)
- soundLibrary.play(sourcename);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandPlay'", 0);
- }
-
- /**
- * Feeds raw data through the specified source. The source must be a streaming
- * source and it can not be already associated with a file or URL to stream
- * from. This method is used internally by SoundSystem for thread
- * synchronization, and it can not be called directly - please use the
- * feedRawAudioData() method instead.
- *
- * @param sourcename Name of the streaming source to play from.
- * @param buffer Byte buffer containing raw audio data to stream.
- */
- private void CommandFeedRawAudioData(String sourcename, byte[] buffer) {
- if (soundLibrary != null)
- soundLibrary.feedRawAudioData(sourcename, buffer);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandFeedRawAudioData'", 0);
- }
-
- /**
- * Pauses the specified source. This method is used internally by SoundSystem
- * for thread synchronization, and it can not be called directly - please use
- * the pause() method instead.
- *
- * @param sourcename Identifier for the source.
- */
- private void CommandPause(String sourcename) {
- if (soundLibrary != null)
- soundLibrary.pause(sourcename);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandPause'", 0);
- }
-
- /**
- * Stops the specified source. This method is used internally by SoundSystem for
- * thread synchronization, and it can not be called directly - please use the
- * stop() method instead.
- *
- * @param sourcename Identifier for the source.
- */
- private void CommandStop(String sourcename) {
- if (soundLibrary != null)
- soundLibrary.stop(sourcename);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandStop'", 0);
- }
-
- /**
- * Rewinds the specified source. This method is used internally by SoundSystem
- * for thread synchronization, and it can not be called directly - please use
- * the rewind() method instead.
- *
- * @param sourcename Identifier for the source.
- */
- private void CommandRewind(String sourcename) {
- if (soundLibrary != null)
- soundLibrary.rewind(sourcename);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandRewind'", 0);
- }
-
- /**
- * Flushes all previously queued audio data from a streaming source. This method
- * is used internally by SoundSystem for thread synchronization, and it can not
- * be called directly - please use the flush() method instead.
- *
- * @param sourcename Identifier for the source.
- */
- private void CommandFlush(String sourcename) {
- if (soundLibrary != null)
- soundLibrary.flush(sourcename);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandFlush'", 0);
- }
-
- /**
- * Sets a flag for a source indicating whether it should be used or if it should
- * be removed after it finishes playing. One possible use for this method is to
- * make temporary sources that were created with quickPlay() permanant. Another
- * use could be to have a source automatically removed after it finishes
- * playing. NOTE: Setting a source to inactive does not stop it, and setting a
- * source to active does not play it. It is also important to note that a
- * looping inactive source will not be removed as long as it keeps playing. This
- * method is used internally by SoundSystem for thread synchronization, and it
- * can not be called directly - please use the setTemporary() method instead.
- *
- * @param sourcename Identifier for the source.
- * @param temporary True or False.
- */
- private void CommandSetTemporary(String sourcename, boolean temporary) {
- if (soundLibrary != null)
- soundLibrary.setTemporary(sourcename, temporary);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetActive'", 0);
- }
-
- /**
- * Removes the specified source and clears up any memory it used. This method is
- * used internally by SoundSystem for thread synchronization, and it can not be
- * called directly - please use the removeSource() method instead.
- *
- * @param sourcename Identifier for the source.
- */
- private void CommandRemoveSource(String sourcename) {
- if (soundLibrary != null)
- soundLibrary.removeSource(sourcename);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandRemoveSource'", 0);
- }
-
- /**
- * Moves the listener relative to the current location. This method is used
- * internally by SoundSystem for thread synchronization, and it can not be
- * called directly - please use the moveListener() method instead.
- *
- * @param x X offset.
- * @param y Y offset.
- * @param z Z offset.
- */
- private void CommandMoveListener(float x, float y, float z) {
- if (soundLibrary != null)
- soundLibrary.moveListener(x, y, z);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandMoveListener'", 0);
- }
-
- /**
- * Moves the listener to the specified location. This method is used internally
- * by SoundSystem for thread synchronization, and it can not be called directly
- * - please use the setListenerPosition() method instead.
- *
- * @param x Destination X coordinate.
- * @param y Destination Y coordinate.
- * @param z Destination Z coordinate.
- */
- private void CommandSetListenerPosition(float x, float y, float z) {
- if (soundLibrary != null)
- soundLibrary.setListenerPosition(x, y, z);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetListenerPosition'", 0);
- }
-
- /**
- * Turns the listener counterclockwise by "angle" radians around the y-axis,
- * relative to the current angle. This method is used internally by SoundSystem
- * for thread synchronization, and it can not be called directly - please use
- * the turnListener() method instead.
- *
- * @param angle radian offset.
- */
- private void CommandTurnListener(float angle) {
- if (soundLibrary != null)
- soundLibrary.turnListener(angle);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandTurnListener'", 0);
- }
-
- /**
- * Sets the listener's angle in radians around the y-axis. This method is used
- * internally by SoundSystem for thread synchronization, and it can not be
- * called directly - please use the setListenerAngle() method instead.
- *
- * @param angle radians.
- */
- private void CommandSetListenerAngle(float angle) {
- if (soundLibrary != null)
- soundLibrary.setListenerAngle(angle);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetListenerAngle'", 0);
- }
-
- /**
- * Sets the listener's orientation. This method is used internally by
- * SoundSystem for thread synchronization, and it can not be called directly -
- * please use the setListenerOrientation() method instead.
- *
- * @param lookX X coordinate of the (normalized) look-at vector.
- * @param lookY Y coordinate of the (normalized) look-at vector.
- * @param lookZ Z coordinate of the (normalized) look-at vector.
- * @param upX X coordinate of the (normalized) look-at vector.
- * @param upY Y coordinate of the (normalized) look-at vector.
- * @param upZ Z coordinate of the (normalized) look-at vector.
- */
- private void CommandSetListenerOrientation(float lookX, float lookY, float lookZ, float upX, float upY, float upZ) {
- if (soundLibrary != null)
- soundLibrary.setListenerOrientation(lookX, lookY, lookZ, upX, upY, upZ);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetListenerOrientation'", 0);
- }
-
- /**
- * Culls the specified source. A culled source can not be played until it has
- * been activated again. This method is used internally by SoundSystem for
- * thread synchronization, and it can not be called directly - please use the
- * cull() method instead.
- *
- * @param sourcename Identifier for the source.
- */
- private void CommandCull(String sourcename) {
- if (soundLibrary != null)
- soundLibrary.cull(sourcename);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandCull'", 0);
- }
-
- /**
- * Activates a previously culled source, so it can be played again. This method
- * is used internally by SoundSystem for thread synchronization, and it can not
- * be called directly - please use the activate() method instead.
- *
- * @param sourcename Identifier for the source.
- */
- private void CommandActivate(String sourcename) {
- if (soundLibrary != null)
- soundLibrary.activate(sourcename);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandActivate'", 0);
- }
-
- /**
- * Sets the overall volume, affecting all sources. This method is used
- * internally by SoundSystem for thread synchronization, and it can not be
- * called directly - please use the setMasterVolume() method instead.
- *
- * @param value New volume, float value ( 0.0f - 1.0f ).
- */
- private void CommandSetMasterVolume(float value) {
- if (soundLibrary != null)
- soundLibrary.setMasterVolume(value);
- else
- errorMessage("Variable 'soundLibrary' null in method 'CommandSetMasterVolume'", 0);
- }
-
- /**
- * This method can be overridden by extended classes to be used for source
- * management (culling and activating sources based on established rules). One
- * possible use for this method is sorting sources by distance, culling the
- * furthest, and activating the closest. This method is automatically called on
- * the CommandThread before processing queued commands, so you do not need to
- * call it anywhere else. Note: use methods cull() and activate() here, NOT
- * CommandCull() and CommandActivate() (thread safety issue). IMPORTANT: Always
- * use synchronized( SoundSystemConfig.THREAD_SYNC ) when manually manipulating
- * sources from outside the Command Thread!
- */
- protected void ManageSources() {
- // OVERRIDDEN METHODS MUST USE THIS:
-
- /*******
- * synchronized( SoundSystemConfig.THREAD_SYNC ) { // TODO: Sort the sources,
- * cull and activate, etc. }
- ********/
- }
-
- /**
- * Queues a command. If newCommand is null, all commands are dequeued and
- * executed. This is automatically used by the sound system, so it is not likely
- * that a user would ever need to use this method. See
- * {@link paulscode.sound.CommandObject CommandObject} for more information
- * about commands.
- *
- * @param newCommand Command to queue, or null to execute commands.
- * @return True if more commands exist, false if queue is empty.
- */
- public boolean CommandQueue(CommandObject newCommand) {
- synchronized (SoundSystemConfig.THREAD_SYNC) {
- if (newCommand == null) {
- // New command is null - that means execute all queued commands.
- boolean activations = false;
- CommandObject commandObject;
-
- // Loop through the command queue:
- while (commandQueue != null && commandQueue.size() > 0) {
- // Grab the oldest command in the queue:
- commandObject = commandQueue.remove(0);
- // See what it is, and execute the proper Command method:
- if (commandObject != null) {
- switch (commandObject.Command) {
- case CommandObject.INITIALIZE:
- CommandInitialize();
- break;
- case CommandObject.LOAD_SOUND:
- CommandLoadSound((FilenameURL) commandObject.objectArgs[0]);
- break;
- case CommandObject.LOAD_DATA:
- CommandLoadSound((SoundBuffer) commandObject.objectArgs[0], commandObject.stringArgs[0]);
- break;
- case CommandObject.UNLOAD_SOUND:
- CommandUnloadSound(commandObject.stringArgs[0]);
- break;
- case CommandObject.QUEUE_SOUND:
- CommandQueueSound(commandObject.stringArgs[0], (FilenameURL) commandObject.objectArgs[0]);
- break;
- case CommandObject.DEQUEUE_SOUND:
- CommandDequeueSound(commandObject.stringArgs[0], commandObject.stringArgs[1]);
- break;
- case CommandObject.FADE_OUT:
- CommandFadeOut(commandObject.stringArgs[0], (FilenameURL) commandObject.objectArgs[0],
- commandObject.longArgs[0]);
- break;
- case CommandObject.FADE_OUT_IN:
- CommandFadeOutIn(commandObject.stringArgs[0], (FilenameURL) commandObject.objectArgs[0],
- commandObject.longArgs[0], commandObject.longArgs[1]);
- break;
- case CommandObject.CHECK_FADE_VOLUMES:
- CommandCheckFadeVolumes();
- break;
- case CommandObject.NEW_SOURCE:
- CommandNewSource(commandObject.boolArgs[0], commandObject.boolArgs[1],
- commandObject.boolArgs[2], commandObject.stringArgs[0],
- (FilenameURL) commandObject.objectArgs[0], commandObject.floatArgs[0],
- commandObject.floatArgs[1], commandObject.floatArgs[2], commandObject.intArgs[0],
- commandObject.floatArgs[3]);
- break;
- case CommandObject.RAW_DATA_STREAM:
- CommandRawDataStream((AudioFormat) commandObject.objectArgs[0], commandObject.boolArgs[0],
- commandObject.stringArgs[0], commandObject.floatArgs[0], commandObject.floatArgs[1],
- commandObject.floatArgs[2], commandObject.intArgs[0], commandObject.floatArgs[3]);
- break;
- case CommandObject.QUICK_PLAY:
- CommandQuickPlay(commandObject.boolArgs[0], commandObject.boolArgs[1],
- commandObject.boolArgs[2], commandObject.stringArgs[0],
- (FilenameURL) commandObject.objectArgs[0], commandObject.floatArgs[0],
- commandObject.floatArgs[1], commandObject.floatArgs[2], commandObject.intArgs[0],
- commandObject.floatArgs[3], commandObject.boolArgs[3]);
- break;
- case CommandObject.SET_POSITION:
- CommandSetPosition(commandObject.stringArgs[0], commandObject.floatArgs[0],
- commandObject.floatArgs[1], commandObject.floatArgs[2]);
- break;
- case CommandObject.SET_VOLUME:
- CommandSetVolume(commandObject.stringArgs[0], commandObject.floatArgs[0]);
- break;
- case CommandObject.SET_PITCH:
- CommandSetPitch(commandObject.stringArgs[0], commandObject.floatArgs[0]);
- break;
- case CommandObject.SET_PRIORITY:
- CommandSetPriority(commandObject.stringArgs[0], commandObject.boolArgs[0]);
- break;
- case CommandObject.SET_LOOPING:
- CommandSetLooping(commandObject.stringArgs[0], commandObject.boolArgs[0]);
- break;
- case CommandObject.SET_ATTENUATION:
- CommandSetAttenuation(commandObject.stringArgs[0], commandObject.intArgs[0]);
- break;
- case CommandObject.SET_DIST_OR_ROLL:
- CommandSetDistOrRoll(commandObject.stringArgs[0], commandObject.floatArgs[0]);
- break;
- case CommandObject.CHANGE_DOPPLER_FACTOR:
- CommandChangeDopplerFactor(commandObject.floatArgs[0]);
- break;
- case CommandObject.CHANGE_DOPPLER_VELOCITY:
- CommandChangeDopplerVelocity(commandObject.floatArgs[0]);
- break;
- case CommandObject.SET_VELOCITY:
- CommandSetVelocity(commandObject.stringArgs[0], commandObject.floatArgs[0],
- commandObject.floatArgs[1], commandObject.floatArgs[2]);
- break;
- case CommandObject.SET_LISTENER_VELOCITY:
- CommandSetListenerVelocity(commandObject.floatArgs[0], commandObject.floatArgs[1],
- commandObject.floatArgs[2]);
- break;
- // Methods related to playing sources must be processed
- // after cull/activate commands in order for source
- // management to work properly, so save them for
- // later:
- // ------------------------------------------------------
- case CommandObject.PLAY:
- sourcePlayList.add(commandObject);
- break;
- case CommandObject.FEED_RAW_AUDIO_DATA:
- sourcePlayList.add(commandObject);
- break;
- // ------------------------------------------------------
- case CommandObject.PAUSE:
- CommandPause(commandObject.stringArgs[0]);
- break;
- case CommandObject.STOP:
- CommandStop(commandObject.stringArgs[0]);
- break;
- case CommandObject.REWIND:
- CommandRewind(commandObject.stringArgs[0]);
- break;
- case CommandObject.FLUSH:
- CommandFlush(commandObject.stringArgs[0]);
- break;
- case CommandObject.CULL:
- CommandCull(commandObject.stringArgs[0]);
- break;
- case CommandObject.ACTIVATE:
- activations = true;
- CommandActivate(commandObject.stringArgs[0]);
- break;
- case CommandObject.SET_TEMPORARY:
- CommandSetTemporary(commandObject.stringArgs[0], commandObject.boolArgs[0]);
- break;
- case CommandObject.REMOVE_SOURCE:
- CommandRemoveSource(commandObject.stringArgs[0]);
- break;
- case CommandObject.MOVE_LISTENER:
- CommandMoveListener(commandObject.floatArgs[0], commandObject.floatArgs[1],
- commandObject.floatArgs[2]);
- break;
- case CommandObject.SET_LISTENER_POSITION:
- CommandSetListenerPosition(commandObject.floatArgs[0], commandObject.floatArgs[1],
- commandObject.floatArgs[2]);
- break;
- case CommandObject.TURN_LISTENER:
- CommandTurnListener(commandObject.floatArgs[0]);
- break;
- case CommandObject.SET_LISTENER_ANGLE:
- CommandSetListenerAngle(commandObject.floatArgs[0]);
- break;
- case CommandObject.SET_LISTENER_ORIENTATION:
- CommandSetListenerOrientation(commandObject.floatArgs[0], commandObject.floatArgs[1],
- commandObject.floatArgs[2], commandObject.floatArgs[3], commandObject.floatArgs[4],
- commandObject.floatArgs[5]);
- break;
- case CommandObject.SET_MASTER_VOLUME:
- CommandSetMasterVolume(commandObject.floatArgs[0]);
- break;
- case CommandObject.NEW_LIBRARY:
- CommandNewLibrary(commandObject.classArgs[0]);
- break;
- // If we don't recognize the command, just skip it:
- default:
- break;
- }
- }
- }
-
- // If any sources were reactivated, check if they need to be
- // replayed:
- if (activations)
- soundLibrary.replaySources();
-
- // Now that we have the correct sources culled and activated, we
- // can start playing sources. Loop through the playlist and
- // execute the commands:
- while (sourcePlayList != null && sourcePlayList.size() > 0) {
- // Grab the oldest command in the queue:
- commandObject = sourcePlayList.remove(0);
- if (commandObject != null) {
- // See what it is, and execute the proper Command method:
- switch (commandObject.Command) {
- case CommandObject.PLAY:
- CommandPlay(commandObject.stringArgs[0]);
- break;
- case CommandObject.FEED_RAW_AUDIO_DATA:
- CommandFeedRawAudioData(commandObject.stringArgs[0], commandObject.buffer);
- break;
- }
- }
- }
-
- return (commandQueue != null && commandQueue.size() > 0);
- } else {
- // make sure the commandQueue exists:
- if (commandQueue == null)
- return false;
- // queue a new command
- commandQueue.add(newCommand);
- // Of course there is something in the list now, since we just
- // added it:
- return true;
- }
- }
- }
-
- /**
- * Searches for and removes any temporary sources that have finished playing.
- * This method is used internally by SoundSystem, and it is unlikely that the
- * user will ever need to use it.
- */
- public void removeTemporarySources() {
- synchronized (SoundSystemConfig.THREAD_SYNC) {
- if (soundLibrary != null)
- soundLibrary.removeTemporarySources();
- }
- }
-
- /**
- * Returns true if the specified source is playing.
- *
- * @param sourcename Unique identifier of the source to check.
- * @return True or false.
- */
- public boolean playing(String sourcename) {
- synchronized (SoundSystemConfig.THREAD_SYNC) {
- if (soundLibrary == null)
- return false;
-
- Source src = soundLibrary.getSources().get(sourcename);
-
- if (src == null)
- return false;
-
- return src.playing();
- }
- }
-
- /**
- * Returns true if anything is currently playing.
- *
- * @return True or false.
- */
- public boolean playing() {
- synchronized (SoundSystemConfig.THREAD_SYNC) {
- if (soundLibrary == null)
- return false;
-
- HashMap sourceMap = soundLibrary.getSources();
- if (sourceMap == null)
- return false;
-
- Set keys = sourceMap.keySet();
- Iterator iter = keys.iterator();
- String sourcename;
- Source source;
-
- while (iter.hasNext()) {
- sourcename = iter.next();
- source = sourceMap.get(sourcename);
- if (source != null)
- if (source.playing())
- return true;
- }
-
- return false;
- }
- }
-
- /**
- * Copies and returns the peripheral information from a map of sources. This
- * method is used internally by SoundSystem, and it is unlikely that the user
- * will ever need to use it.
- *
- * @param sourceMap Sources to copy.
- * @return New map of sources.
- */
- private HashMap copySources(HashMap sourceMap) {
- Set keys = sourceMap.keySet();
- Iterator iter = keys.iterator();
- String sourcename;
- Source source;
-
- // New map of generic source data:
- HashMap returnMap = new HashMap();
-
- // loop through and store information from all the sources:
- while (iter.hasNext()) {
- sourcename = iter.next();
- source = sourceMap.get(sourcename);
- if (source != null)
- returnMap.put(sourcename, new Source(source, null));
- }
- return returnMap;
- }
-
- /**
- * Checks if the specified library type is compatible.
- *
- * @param libraryClass Libary type to check.
- * @return True or false.
- */
- public static boolean libraryCompatible(Class libraryClass) {
- // create the message logger:
- SoundSystemLogger logger = SoundSystemConfig.getLogger();
- // if the user didn't create one, then do it now:
- if (logger == null) {
- logger = new SoundSystemLogger();
- SoundSystemConfig.setLogger(logger);
- }
- logger.message("", 0);
- logger.message("Checking if " + SoundSystemConfig.getLibraryTitle(libraryClass) + " is compatible...", 0);
-
- boolean comp = SoundSystemConfig.libraryCompatible(libraryClass);
-
- if (comp)
- logger.message("...yes", 1);
- else
- logger.message("...no", 1);
-
- return comp;
- }
-
- /**
- * Returns the currently loaded library, or -1 if none.
- *
- * @return Global library identifier
- */
- public static Class currentLibrary() {
- return (currentLibrary(GET, null));
- }
-
- /**
- * Returns false if a sound library is busy initializing.
- *
- * @return True or false.
- */
- public static boolean initialized() {
- return (initialized(GET, XXX));
- }
-
- /**
- * Returns the last SoundSystemException thrown, or null if none.
- *
- * @return The last exception.
- */
- public static SoundSystemException getLastException() {
- return (lastException(GET, null));
- }
-
- /**
- * Stores a SoundSystemException which can be retreived later with the
- * 'getLastException' method.
- *
- * @param e Exception to store.
- */
- public static void setException(SoundSystemException e) {
- lastException(SET, e);
- }
-
- /**
- * Sets or returns the value of boolean 'initialized'.
- *
- * @param action Action to perform (GET or SET).
- * @param value New value if action is SET, otherwise XXX.
- * @return value of boolean 'initialized'.
- */
- private static boolean initialized(boolean action, boolean value) {
- synchronized (SoundSystemConfig.THREAD_SYNC) {
- if (action == SET)
- initialized = value;
- return initialized;
- }
- }
-
- /**
- * Sets or returns the value of boolean 'initialized'.
- *
- * @param action Action to perform (GET or SET).
- * @param value New value if action is SET, otherwise XXX.
- * @return value of boolean 'initialized'.
- */
- private static Class currentLibrary(boolean action, Class value) {
- synchronized (SoundSystemConfig.THREAD_SYNC) {
- if (action == SET)
- currentLibrary = value;
- return currentLibrary;
- }
- }
-
- /**
- * Sets or returns the error code for the last error that occurred. If no errors
- * have occurred, returns SoundSystem.ERROR_NONE
- *
- * @param action Action to perform (GET or SET).
- * @param e New exception if action is SET, otherwise XXX.
- * @return Last SoundSystemException thrown.
- */
- private static SoundSystemException lastException(boolean action, SoundSystemException e) {
- synchronized (SoundSystemConfig.THREAD_SYNC) {
- if (action == SET)
- lastException = e;
- return lastException;
- }
- }
-
- /**
- * Sleeps for the specified number of milliseconds.
- */
- protected static void snooze(long milliseconds) {
- try {
- Thread.sleep(milliseconds);
- } catch (InterruptedException e) {
- }
- }
-
- /**
- * Prints a message.
- *
- * @param message Message to print.
- * @param indent Number of tabs to indent the message.
- */
- protected void message(String message, int indent) {
- logger.message(message, indent);
- }
-
- /**
- * Prints an important message.
- *
- * @param message Message to print.
- * @param indent Number of tabs to indent the message.
- */
- protected void importantMessage(String message, int indent) {
- logger.importantMessage(message, indent);
- }
-
- /**
- * Prints the specified message if error is true.
- *
- * @param error True or False.
- * @param message Message to print if error is true.
- * @param indent Number of tabs to indent the message.
- * @return True if error is true.
- */
- protected boolean errorCheck(boolean error, String message, int indent) {
- return logger.errorCheck(error, className, message, indent);
- }
-
- /**
- * Prints an error message.
- *
- * @param message Message to print.
- * @param indent Number of tabs to indent the message.
- */
- protected void errorMessage(String message, int indent) {
- logger.errorMessage(className, message, indent);
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/SoundSystemConfig.java b/src/lwjgl/java/paulscode/sound/SoundSystemConfig.java
deleted file mode 100644
index fbe20e1..0000000
--- a/src/lwjgl/java/paulscode/sound/SoundSystemConfig.java
+++ /dev/null
@@ -1,994 +0,0 @@
-package paulscode.sound;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Locale;
-import java.util.ListIterator;
-import java.util.LinkedList;
-
-/**
- * The SoundSystemConfig class is used to access global sound system settings,
- * and to link with external pluggins. All members of this class are static.
- * SoundSystemConfig is sort of a "catch all" configuration class, so if you are
- * not sure where to find something in the SoundSystem library, this is probably
- * a good place to start.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class SoundSystemConfig {
-// GLOBAL THREAD SYNCHRONIZATION
- /**
- * Lock object used to synchronize the three threads used by SoundSystem.
- * Synchronize on this anytime you manually manipulate a Source's properties.
- */
- public static final Object THREAD_SYNC = new Object();
-// END GLOBAL THREAD SYNCHRONIZATION
-
-// GLOBAL IDENTIFIERS
-
- /**
- * A normal (non-streaming) source. Also used to define a Channel type as
- * normal.
- */
- public static final int TYPE_NORMAL = 0;
- /**
- * A streaming source. Also used to define a Channel type as streaming.
- */
- public static final int TYPE_STREAMING = 1;
-
- /**
- * Global identifier for no attenuation. Attenuation is how a source's volume
- * fades with distance. When there is no attenuation, a source's volume remains
- * constaint regardles of distance.
- */
- public static final int ATTENUATION_NONE = 0; // no attenuation
- /**
- * Global identifier for rolloff attenuation. Rolloff attenuation is a realistic
- * attenuation model, which uses a rolloff factor to determine how quickly a
- * source fades with distance. A smaller rolloff factor will fade at a further
- * distance, and a rolloff factor of 0 will never fade. NOTE: In OpenAL, rolloff
- * attenuation only works for monotone sounds.
- */
- public static final int ATTENUATION_ROLLOFF = 1; // logrithmic attenuation
- /**
- * Global identifier for linear attenuation. Linear attenuation is less
- * realistic than rolloff attenuation, but it allows the user to specify a
- * maximum "fade distance" where a source's volume becomes zero.
- */
- public static final int ATTENUATION_LINEAR = 2; // linear attenuation
-
- /**
- * A Regular expression for determining if a file's extension is MIDI.
- */
- public static String EXTENSION_MIDI = ".*[mM][iI][dD][iI]?$";
-
- /**
- * A Regular expression for determining if a path is an online URL.
- */
- public static String PREFIX_URL = "^[hH][tT][tT][pP]://.*";
-
-// END GLOBAL IDENTIFIERS
-
-// PRIVATE STATIC VARIABLES
-
- /**
- * Handle to the message logger. The default logger can be changed by
- * overridding the {@link paulscode.sound.SoundSystemLogger SoundSystemLogger}
- * class and calling the setLogger() method (must be done BEFORE instantiating
- * the SoundSystem class!)
- */
- private static SoundSystemLogger logger = null;
-
- /**
- * List of library types in their order of priority.
- */
- private static LinkedList libraries;
-
- /**
- * List of codecs and the file formats they are associated with.
- */
- private static LinkedList codecs = null;
-
- /**
- * List of stream listeners.
- */
- private static LinkedList streamListeners = null;
- /**
- * For synchronizing access to the streamListeners list.
- */
- private static final Object streamListenersLock = new Object();
-
- /**
- * Maximum number of normal (non-streaming) channels that can be created. NOTE:
- * JavaSound may require the total number of channels (non-streaming +
- * streaming) to be 32.
- */
- private static int numberNormalChannels = 28;
- /**
- * Maximum number of streaming channels that can be created. NOTE: JavaSound may
- * require the total number of channels (non-streaming + streaming) to be 32.
- */
- private static int numberStreamingChannels = 4;
- /**
- * Overall volume, affecting all sources. Float value (0.0f - 1.0f).
- */
- private static float masterGain = 1.0f;
- /**
- * Attenuation model to use if not specified. Attenuation is how a source's
- * volume fades with distance.
- */
- private static int defaultAttenuationModel = ATTENUATION_ROLLOFF;
- /**
- * Default value to use for the rolloff factor if not specified.
- */
- private static float defaultRolloffFactor = 0.03f;
- /**
- * Value to use for the doppler factor, for determining Doppler scale.
- */
- private static float dopplerFactor = 0.0f;
- /**
- * Value to use for the doppler velocity.
- */
- private static float dopplerVelocity = 1.0f;
- /**
- * Default value to use for fade distance if not specified.
- */
- private static float defaultFadeDistance = 1000.0f;
- /**
- * Package where the sound files are located (must be followed by '/').
- */
- private static String soundFilesPackage = "Sounds/";
-
- /**
- * Number of bytes to load at a time when streaming.
- */
- private static int streamingBufferSize = 131072;
- /**
- * Number of buffers used for each streaming sorce. Slow codecs may require this
- * number to be greater than 2 to prevent audio skipping during playback.
- */
- private static int numberStreamingBuffers = 3;
- /**
- * Enables a transition-speed optimization by assuming all sounds in each
- * streaming source's queue will have exactly the same format once decoded
- * (including channels, sample rate, and sample size). This is an advanced
- * setting which should only be changed by experienced developers.
- */
- private static boolean streamQueueFormatsMatch = false;
- /**
- * The maximum number of bytes to read in for (non-streaming) files. Increase
- * this value if non-streaming sounds are getting cut off. Decrease this value
- * if large sound files are causing lag during load time.
- */
- private static int maxFileSize = 268435456;
- /**
- * Size of each chunk to read at a time for loading (non-streaming) files.
- * Increase if loading sound files is causing significant lag.
- */
- private static int fileChunkSize = 1048576;
-
- /**
- * Indicates whether or not there is a codec for reading from MIDI files. If
- * there is no codec for MIDI, then SoundSystem uses javax.sound.midi.
- */
- private static boolean midiCodec = false;
-
- /**
- * MIDI device to try using as the Synthesizer. May be the full name or part of
- * the name. If this String is empty, the default Synthesizer will be used, or
- * one of the common alternate synthesizers if the default Synthesizer is
- * unavailable.
- */
- private static String overrideMIDISynthesizer = "";
-
-// END PRIVATE STATIC VARIABLES
-
-// THESE TWO METHODS PROVIDE INFORMATION ABOUT THE INDIVIDUAL SOUND LIBRARIES
-
- /**
- * Adds an entry to the list of library types. This method has no effect if the
- * specified library type is already in the list of libraries. NOTE: The
- * parameterless constructor of the SoundSystem class will try to load libraries
- * in the order that they were entered into the list.
- *
- * @param libraryClass Derivitive of class 'Library'.
- */
- public static void addLibrary(Class libraryClass) throws SoundSystemException {
- if (libraryClass == null)
- throw new SoundSystemException("Parameter null in method 'addLibrary'",
- SoundSystemException.NULL_PARAMETER);
- if (!Library.class.isAssignableFrom(libraryClass))
- throw new SoundSystemException(
- "The specified class does not " + "extend class 'Library' in method 'addLibrary'");
-
- if (libraries == null)
- libraries = new LinkedList();
-
- if (!libraries.contains(libraryClass))
- libraries.add(libraryClass);
- }
-
- /**
- * Removes the specified library from the list of library types.
- *
- * @param libraryClass Derivitive of class 'Library'.
- */
- public static void removeLibrary(Class libraryClass) throws SoundSystemException {
- if (libraries == null || libraryClass == null)
- return;
-
- libraries.remove(libraryClass);
- }
-
- /**
- * Returns the list of library types.
- *
- * @return LinkedList of classes derived from 'Library', or null if none were
- * specified.
- */
- public static LinkedList getLibraries() {
- return libraries;
- }
-
- /**
- * Checks if the specified library class is compatible on the user's machine.
- *
- * @param libraryClass Library type to check.
- * @return True or false.
- */
- public static boolean libraryCompatible(Class libraryClass) {
- if (libraryClass == null) {
- errorMessage("Parameter 'libraryClass' null in method" + "'librayCompatible'");
- return false;
- }
- if (!Library.class.isAssignableFrom(libraryClass)) {
- errorMessage("The specified class does not extend class " + "'Library' in method 'libraryCompatible'");
- return false;
- }
-
- Object o = runMethod(libraryClass, "libraryCompatible", new Class[0], new Object[0]);
-
- if (o == null) {
- errorMessage("Method 'Library.libraryCompatible' returned " + "'null' in method 'libraryCompatible'");
- return false;
- }
-
- return (((Boolean) o).booleanValue());
- }
-
- /**
- * Return the short title of the specified library, or null if error.
- *
- * @param libraryClass Derivitive of class 'Library'.
- * @return String containing the library title.
- */
- public static String getLibraryTitle(Class libraryClass) {
- if (libraryClass == null) {
- errorMessage("Parameter 'libraryClass' null in method" + "'getLibrayTitle'");
- return null;
- }
- if (!Library.class.isAssignableFrom(libraryClass)) {
- errorMessage("The specified class does not extend class " + "'Library' in method 'getLibraryTitle'");
- return null;
- }
-
- Object o = runMethod(libraryClass, "getTitle", new Class[0], new Object[0]);
- if (o == null) {
- errorMessage("Method 'Library.getTitle' returned " + "'null' in method 'getLibraryTitle'");
- return null;
- }
-
- return ((String) o);
- }
-
- /**
- * Return the longer description of the specified library, or null if error.
- *
- * @param libraryClass Derivitive of class 'Library'.
- * @return String containing the library title.
- */
- public static String getLibraryDescription(Class libraryClass) {
- if (libraryClass == null) {
- errorMessage("Parameter 'libraryClass' null in method" + "'getLibrayDescription'");
- return null;
- }
- if (!Library.class.isAssignableFrom(libraryClass)) {
- errorMessage("The specified class does not extend class " + "'Library' in method 'getLibraryDescription'");
- return null;
- }
-
- Object o = runMethod(libraryClass, "getDescription", new Class[0], new Object[0]);
- if (o == null) {
- errorMessage("Method 'Library.getDescription' returned " + "'null' in method 'getLibraryDescription'");
- return null;
- }
-
- return ((String) o);
- }
-
- /**
- * Return whether or not requires reversal of audio data byte-order.
- *
- * @param libraryClass Derivitive of class 'Library'.
- * @return True if byte-order reversal is required.
- */
- public static boolean reverseByteOrder(Class libraryClass) {
- if (libraryClass == null) {
- errorMessage("Parameter 'libraryClass' null in method" + "'reverseByteOrder'");
- return false;
- }
- if (!Library.class.isAssignableFrom(libraryClass)) {
- errorMessage("The specified class does not extend class " + "'Library' in method 'reverseByteOrder'");
- return false;
- }
-
- Object o = runMethod(libraryClass, "reversByteOrder", new Class[0], new Object[0]);
- if (o == null) {
- errorMessage("Method 'Library.reverseByteOrder' returned " + "'null' in method 'getLibraryDescription'");
- return false;
- }
-
- return (((Boolean) o).booleanValue());
- }
-
-// END LIBRARY INFORMATION
-
-// Use the following methods to interface the private variables above:
-
-// STATIC NONSYNCHRONIZED INTERFACE METHODS
- /**
- * Changes the message logger to use for handling status messages, warnings, and
- * error messages. This method should only be called BEFORE instantiating the
- * SoundSystem class! If this method is called after the SoundSystem has been
- * created, there will be handles floating around to two different loggers, and
- * the results will be undesirable. This method can be used to change how
- * messages are handled. First, the {@link paulscode.sound.SoundSystemLogger
- * SoundSystemLogger} class should be extended and methods overriden to change
- * how messages are handled. Then, the overridden class should be instantiated,
- * and a call made to SoundSystemConfig.setLogger() before creating the
- * SoundSystem object. If an alternate logger is not set by the user before the
- * SoundSystem is instantiated, then an instance of the base SoundSystemLogger
- * class will be used by default.
- *
- * @param l Handle to a message logger.
- */
- public static void setLogger(SoundSystemLogger l) {
- logger = l;
- }
-
- /**
- * Returns a handle to the message logger.
- *
- * @return The current message logger.
- */
- public static SoundSystemLogger getLogger() {
- return logger;
- }
-
-// STATIC SYNCHRONIZED INTERFACE METHODS
-
- /**
- * Sets the maximum number of normal (non-streaming) channels that can be
- * created. Streaming channels are created first, so the higher the maximum
- * number of streaming channels is set, the fewer non-streaming channels will be
- * available. If unable to create the number of channels specified, SoundSystem
- * will create as many as possible. NOTE: Some sound library pluggins may
- * require the total number of channels (non-streaming + streaming) to be 32.
- *
- * @param number How many normal audio channels.
- */
- public static synchronized void setNumberNormalChannels(int number) {
- numberNormalChannels = number;
- }
-
- /**
- * Returns the maximum number of normal (non-streaming) channels that can be
- * created.
- *
- * @return Maximum non-streaming channels.
- */
- public static synchronized int getNumberNormalChannels() {
- return numberNormalChannels;
- }
-
- /**
- * Sets the maximum number of streaming channels that can be created. Streaming
- * channels are created first, so the higher the maximum number of streaming
- * channels is set, the fewer non-streaming channels will be available. If
- * unable to create the number of channels specified, SoundSystem will create as
- * many as possible. NOTE: Some sound library pluggins may require the total
- * number of channels (non-streaming + streaming) to be 32.
- *
- * @param number How many streaming audio channels.
- */
- public static synchronized void setNumberStreamingChannels(int number) {
- numberStreamingChannels = number;
- }
-
- /**
- * Returns the maximum number of streaming channels that can be created.
- *
- * @return Maximum streaming channels.
- */
- public static synchronized int getNumberStreamingChannels() {
- return numberStreamingChannels;
- }
-
- /**
- * Sets the varriable used for overall volume, affecting all sources.
- *
- * @param value Float value (0.0f - 1.0f).
- */
- public static synchronized void setMasterGain(float value) {
- masterGain = value;
- }
-
- /**
- * Returns the value for the overall volume.
- *
- * @return A float value (0.0f - 1.0f).
- */
- public static synchronized float getMasterGain() {
- return masterGain;
- }
-
- /**
- * Sets the default attenuation model to use when one is not specified.
- * Attenuation is how a source's volume fades with distance.
- *
- * @param model A global attenuation model identifier.
- */
- public static synchronized void setDefaultAttenuation(int model) {
- defaultAttenuationModel = model;
- }
-
- /**
- * Returns the default attenuation model used when one is not specified.
- *
- * @return A global attenuation model identifier
- */
- public static synchronized int getDefaultAttenuation() {
- return defaultAttenuationModel;
- }
-
- /**
- * Sets the default rolloff factor to use when one is not specified.
- *
- * @param rolloff Rolloff factor.
- */
- public static synchronized void setDefaultRolloff(float rolloff) {
- defaultRolloffFactor = rolloff;
- }
-
- /**
- * Returns the doppler factor, for determining Doppler Effect scale.
- *
- * @return Doppler factor
- */
- public static synchronized float getDopplerFactor() {
- return dopplerFactor;
- }
-
- /**
- * Sets the doppler factor, for determining Doppler Effect scale. Use this
- * method BEFORE instantiating the SoundSystem. To change the Doppler factor
- * after the SoundSystem is instantiated, use the
- * SoundSystem.changeDopplerFactor method instead.
- *
- * @param factor Doppler factor.
- */
- public static synchronized void setDopplerFactor(float factor) {
- dopplerFactor = factor;
- }
-
- /**
- * Returns the Doppler Velocity, for use in Doppler Effect.
- *
- * @return Doppler velocity.
- */
- public static synchronized float getDopplerVelocity() {
- return dopplerVelocity;
- }
-
- /**
- * Sets the Doppler velocity, for use in Doppler Effect. Use this method BEFORE
- * instantiating the SoundSystem. To change the Doppler velocity after the
- * SoundSystem is instantiated, use the SoundSystem.changeDopplerVelocity method
- * instead.
- *
- * @param velocity Doppler velocity.
- */
- public static synchronized void setDopplerVelocity(float velocity) {
- dopplerVelocity = velocity;
- }
-
- /**
- * Returns the default rolloff factor used when one is not specified.
- *
- * @return Default rolloff factor
- */
- public static synchronized float getDefaultRolloff() {
- return defaultRolloffFactor;
- }
-
- /**
- * Sets the default fade distance to use when one is not specified.
- *
- * @param distance Fade Distance.
- */
- public static synchronized void setDefaultFadeDistance(float distance) {
- defaultFadeDistance = distance;
- }
-
- /**
- * Returns the default fade distance used when one is not specified.
- *
- * @return Default fade distance
- */
- public static synchronized float getDefaultFadeDistance() {
- return defaultFadeDistance;
- }
-
- /**
- * Sets the package where sound files are located.
- *
- * @param location Path to the sound files location (must be followed by '/').
- */
- public static synchronized void setSoundFilesPackage(String location) {
- soundFilesPackage = location;
- }
-
- /**
- * Returns the package where sound files are located.
- *
- * @return Path to the sound files location
- */
- public static synchronized String getSoundFilesPackage() {
- return soundFilesPackage;
- }
-
- /**
- * Sets the number of bytes to load at a time when streaming.
- *
- * @param size Size in bytes.
- */
- public static synchronized void setStreamingBufferSize(int size) {
- streamingBufferSize = size;
- }
-
- /**
- * Returns the number of bytes to load at a time when streaming.
- *
- * @return Size in bytes.
- */
- public static synchronized int getStreamingBufferSize() {
- return streamingBufferSize;
- }
-
- /**
- * Sets the number of buffers used for each streaming sorce. Slow codecs may
- * require this number to be greater than 2 to prevent audio skipping during
- * playback.
- *
- * @param num How many buffers.
- */
- public static synchronized void setNumberStreamingBuffers(int num) {
- numberStreamingBuffers = num;
- }
-
- /**
- * Returns the number of buffers used for each streaming sorce.
- *
- * @return How many buffers.
- */
- public static synchronized int getNumberStreamingBuffers() {
- return numberStreamingBuffers;
- }
-
- /**
- * Enables a transition-speed optimization by assuming all sounds in each
- * streaming source's queue will have exactly the same format once decoded
- * (including channels, sample rate, and sample size). This is an advanced
- * setting which should only be changed by experienced developers.
- *
- * @param val False by default.
- */
- public static synchronized void setStreamQueueFormatsMatch(boolean val) {
- streamQueueFormatsMatch = val;
- }
-
- /**
- * Returns whether or not all sounds in each streaming source's queue will be
- * handled as if they have exactly the same format once decoded (including
- * channels, sample rate, and sample size). This is an advanced setting which
- * should only be changed by experienced developers.
- *
- * @return Normally false.
- */
- public static synchronized boolean getStreamQueueFormatsMatch() {
- return streamQueueFormatsMatch;
- }
-
- /**
- * Sets the maximum number of bytes to read in for (non-streaming) files.
- * Increase this value if non-streaming sounds are getting cut off. Decrease
- * this value if large sound files are causing lag during load time.
- *
- * @param size Size in bytes.
- */
- public static synchronized void setMaxFileSize(int size) {
- maxFileSize = size;
- }
-
- /**
- * Returns the maximum number of bytes to read in for (non-streaming) files.
- *
- * @return Size in bytes.
- */
- public static synchronized int getMaxFileSize() {
- return maxFileSize;
- }
-
- /**
- * Sets the size of each chunk to read at a time for loading (non-streaming)
- * files. Increase if loading sound files is causing significant lag.
- *
- * @param size Size in bytes.
- */
- public static synchronized void setFileChunkSize(int size) {
- fileChunkSize = size;
- }
-
- /**
- * Returns the size of each chunk to read at a time for loading (non-streaming)
- * files.
- *
- * @return Size in bytes.
- */
- public static synchronized int getFileChunkSize() {
- return fileChunkSize;
- }
-
- /**
- * Returns the name of the MIDI synthesizer to use instead of the default, or
- * empty string if none was specified.
- *
- * @return All or part of a MIDI device name, or empty string for not specified.
- */
- public static synchronized String getOverrideMIDISynthesizer() {
- return overrideMIDISynthesizer;
- }
-
- /**
- * Sets the name of the MIDI synthesizer to use instead of the default. If
- * 'name' is an empty string, the default Synthesizer will be used, or one of
- * the common alternate synthesizers if the default Synthesizer is unavailable.
- *
- * @param name All or part of the MIDI device name.
- */
- public static synchronized void setOverrideMIDISynthesizer(String name) {
- overrideMIDISynthesizer = name;
- }
-
- /**
- * Uses the specified file extension to associate a particular file format with
- * the codec used to read audio data from it.
- *
- * @param extension File extension to be associated with the specified codec.
- * @param iCodecClass Codec type to use for files with the specified extension.
- */
- public static synchronized void setCodec(String extension, Class iCodecClass) throws SoundSystemException {
- if (extension == null)
- throw new SoundSystemException("Parameter 'extension' null in " + "method 'setCodec'.",
- SoundSystemException.NULL_PARAMETER);
- if (iCodecClass == null)
- throw new SoundSystemException("Parameter 'iCodecClass' null in " + "method 'setCodec'.",
- SoundSystemException.NULL_PARAMETER);
- if (!ICodec.class.isAssignableFrom(iCodecClass))
- throw new SoundSystemException(
- "The specified class does " + "not implement interface 'ICodec' in method 'setCodec'",
- SoundSystemException.CLASS_TYPE_MISMATCH);
-
- if (codecs == null)
- codecs = new LinkedList();
-
- ListIterator i = codecs.listIterator();
- Codec codec;
-
- while (i.hasNext()) {
- codec = i.next();
- if (extension.matches(codec.extensionRegX))
- i.remove();
- }
- codecs.add(new Codec(extension, iCodecClass));
-
- // Let SoundSystem know if this is a MIDI codec, so it won't use
- // javax.sound.midi anymore:
- if (extension.matches(EXTENSION_MIDI))
- midiCodec = true;
- }
-
- /**
- * Returns the codec that can be used to read audio data from the specified
- * file.
- *
- * @param filename File to get a codec for.
- * @return Codec to use for reading audio data.
- */
- public static synchronized ICodec getCodec(String filename) {
- if (codecs == null)
- return null;
-
- ListIterator i = codecs.listIterator();
- Codec codec;
-
- while (i.hasNext()) {
- codec = i.next();
- if (filename.matches(codec.extensionRegX))
- return codec.getInstance();
- }
-
- return null;
- }
-
- /**
- * Indicates whether or not there is a codec for reading from MIDI files. If
- * there is no codec for MIDI, then SoundSystem uses javax.sound.midi.
- *
- * @return True if there the user defined a MIDI codec.
- */
- public static boolean midiCodec() {
- return midiCodec;
- }
-
- /**
- * Adds an entry to the list of stream listeners. If the instance is already in
- * the list, the command is ignored.
- *
- * @param streamListener Implementation of interface 'IStreamListener'.
- */
- public static void addStreamListener(IStreamListener streamListener) {
- synchronized (streamListenersLock) {
- if (streamListeners == null)
- streamListeners = new LinkedList();
-
- if (!streamListeners.contains(streamListener))
- streamListeners.add(streamListener);
- }
- }
-
- /**
- * Removes an entry from the list of stream listeners.
- *
- * @param streamListener Implementation of interface 'IStreamListener'.
- */
- public static void removeStreamListener(IStreamListener streamListener) {
-
- synchronized (streamListenersLock) {
- if (streamListeners == null)
- streamListeners = new LinkedList();
-
- if (streamListeners.contains(streamListener))
- streamListeners.remove(streamListener);
- }
- }
-
- /**
- * Notifies all stream listeners that an End Of Stream was reached. If there are
- * no listeners, the command is ignored.
- *
- * @param sourcename String identifier of the source which reached the EOS.
- * @param queueSize Number of items left the the stream's play queue, or zero
- * if none.
- */
- public static void notifyEOS(String sourcename, int queueSize) {
- synchronized (streamListenersLock) {
- if (streamListeners == null)
- return;
- }
- final String srcName = sourcename;
- final int qSize = queueSize;
-
- new Thread() {
- @Override
- public void run() {
- synchronized (streamListenersLock) {
- if (streamListeners == null)
- return;
- ListIterator i = streamListeners.listIterator();
- IStreamListener streamListener;
- while (i.hasNext()) {
- streamListener = i.next();
- if (streamListener == null)
- i.remove();
- else
- streamListener.endOfStream(srcName, qSize);
- }
- }
- }
- }.start();
- }
-
-// END STATIC SYNCHRONIZED INTERFACE METHODS
-
-// PRIVATE INTERNAL METHODS
-
- /**
- * Display the specified error message using the current logger.
- *
- * @param message Error message to display.
- */
- private static void errorMessage(String message) {
- if (logger != null)
- logger.errorMessage("SoundSystemConfig", message, 0);
- }
-
- // We don't know what Class parameter 'c' is, so we will ignore the
- // warning message "unchecked call to getMethod".
- @SuppressWarnings("unchecked")
- /**
- * Returns the results of calling the specified method from the specified class
- * using the specified parameters.
- *
- * @param c Class to call the method on.
- * @param method Name of the method.
- * @param paramTypes Data types of the parameters being passed to the method.
- * @param params Actual parameters to pass to the method.
- * @return Specified method's return value, or null if error or void.
- */
- private static Object runMethod(Class c, String method, Class[] paramTypes, Object[] params) {
- Method m = null;
- try {
- m = c.getMethod(method, paramTypes); // <--- generates a warning
- } catch (NoSuchMethodException nsme) {
- errorMessage("NoSuchMethodException thrown when attempting " + "to call method '" + method + "' in "
- + "method 'runMethod'");
- return null;
- } catch (SecurityException se) {
- errorMessage("Access denied when attempting to call method '" + method + "' in method 'runMethod'");
- return null;
- } catch (NullPointerException npe) {
- errorMessage("NullPointerException thrown when attempting " + "to call method '" + method + "' in "
- + "method 'runMethod'");
- return null;
- }
- if (m == null) {
- errorMessage("Method '" + method + "' not found for the class " + "specified in method 'runMethod'");
- return null;
- }
-
- Object o = null;
- try {
- o = m.invoke(null, params);
- } catch (IllegalAccessException iae) {
- errorMessage("IllegalAccessException thrown when attempting " + "to invoke method '" + method + "' in "
- + "method 'runMethod'");
- return null;
- } catch (IllegalArgumentException iae) {
- errorMessage("IllegalArgumentException thrown when attempting " + "to invoke method '" + method + "' in "
- + "method 'runMethod'");
- return null;
- } catch (InvocationTargetException ite) {
- errorMessage("InvocationTargetException thrown while attempting "
- + "to invoke method 'Library.getTitle' in " + "method 'getLibraryTitle'");
- return null;
- } catch (NullPointerException npe) {
- errorMessage("NullPointerException thrown when attempting " + "to invoke method '" + method + "' in "
- + "method 'runMethod'");
- return null;
- } catch (ExceptionInInitializerError eiie) {
- errorMessage("ExceptionInInitializerError thrown when " + "attempting to invoke method '" + method + "' in "
- + "method 'runMethod'");
- return null;
- }
-
- return (o);
- }
-
-// END PRIVATE INTERNAL METHODS
-
-// PRIVATE INTERNAL CLASSES
-
- /**
- * The Codec class is used to associate individual file formats with the codecs
- * used to load audio data from them.
- *
- * Author: Paul Lamb
- */
- private static class Codec {
- /**
- * A regular expression used to match a file's extension. This is used to
- * determine the file format.
- */
- public String extensionRegX;
- /**
- * Codec used to load audio data from this file format.
- */
- public Class iCodecClass;
-
- /**
- * Constructor: Converts the specified extension string into a regular
- * expression, and associates that with the specified codec.
- *
- * @param extension File extension to be associated with the specified codec.
- * @param iCodec Codec to use for files with the specified extension.
- */
- public Codec(String extension, Class iCodecClass) {
- extensionRegX = "";
- // Make sure an extension was specified:
- if (extension != null && extension.length() > 0) {
- // We are only interested in the file extension. The filename
- // can begin with whatever:
- extensionRegX = ".*";
- String c;
- for (int x = 0; x < extension.length(); x++) {
- // Each character could be either upper or lower case:
- c = extension.substring(x, x + 1);
- extensionRegX += "[" + c.toLowerCase(Locale.ENGLISH) + c.toUpperCase(Locale.ENGLISH) + "]";
- }
- // The extension will be at the end of the filename:
- extensionRegX += "$";
- }
- // remember the codec to use for this format:
- this.iCodecClass = iCodecClass;
- }
-
- public ICodec getInstance() {
- if (iCodecClass == null)
- return null;
-
- Object o = null;
- try {
- o = iCodecClass.newInstance();
- } catch (InstantiationException ie) {
- instantiationErrorMessage();
- return null;
- } catch (IllegalAccessException iae) {
- instantiationErrorMessage();
- return null;
- } catch (ExceptionInInitializerError eiie) {
- instantiationErrorMessage();
- return null;
- } catch (SecurityException se) {
- instantiationErrorMessage();
- return null;
- }
-
- if (o == null) {
- instantiationErrorMessage();
- return null;
- }
-
- return (ICodec) o;
- }
-
- private void instantiationErrorMessage() {
- errorMessage(
- "Unrecognized ICodec implementation in method " + "'getInstance'. Ensure that the implementing "
- + "class has one public, parameterless constructor.");
- }
- }
-// END PRIVATE INTERNAL CLASSES
-}
diff --git a/src/lwjgl/java/paulscode/sound/SoundSystemException.java b/src/lwjgl/java/paulscode/sound/SoundSystemException.java
deleted file mode 100644
index 72bea9a..0000000
--- a/src/lwjgl/java/paulscode/sound/SoundSystemException.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package paulscode.sound;
-
-/**
- * The SoundSystemException class is used to provide information about serious
- * errors.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class SoundSystemException extends Exception {
- /**
- * Global identifier for no problem.
- */
- public static final int ERROR_NONE = 0;
- /**
- * Global identifier for a generic exception.
- */
- public static final int UNKNOWN_ERROR = 1;
- /**
- * Global identifier for a null parameter.
- */
- public static final int NULL_PARAMETER = 2;
- /**
- * Global identifier for a class type mismatch.
- */
- public static final int CLASS_TYPE_MISMATCH = 3;
- /**
- * Global identifier for the sound library does not exist.
- */
- public static final int LIBRARY_NULL = 4;
- /**
- * Global identifier for the sound library does not exist.
- */
- public static final int LIBRARY_TYPE = 5;
-
- /**
- * Holds a global identifier indicating the type of exception.
- */
- private int myType = UNKNOWN_ERROR;
-
- /**
- * Constructor: Generic exception. Specify the error message.
- */
- public SoundSystemException(String message) {
- super(message);
- }
-
- /**
- * Constructor: Specify the error message and type of exception.
- *
- * @param message Description of the problem.
- * @param type Global identifier for type of exception.
- */
- public SoundSystemException(String message, int type) {
- super(message);
- myType = type;
- }
-
- public int getType() {
- return myType;
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/SoundSystemLogger.java b/src/lwjgl/java/paulscode/sound/SoundSystemLogger.java
deleted file mode 100644
index 226444b..0000000
--- a/src/lwjgl/java/paulscode/sound/SoundSystemLogger.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package paulscode.sound;
-
-/**
- * The SoundSystemLogger class handles all status messages, warnings, and error
- * messages for the SoundSystem library. This class can be extended and methods
- * overriden to change how messages are handled. To do this, the overridden
- * class should be instantiated, and a call should be made to method
- * SoundSystemConfig.setLogger() BEFORE creating the SoundSystem object. If the
- * setLogger() method is called after the SoundSystem has been created, there
- * will be handles floating around to two different message loggers, and the
- * results will be undesirable. See {@link paulscode.sound.SoundSystemConfig
- * SoundSystemConfig} for more information about changing default settings. If
- * an alternate logger is not set by the user, then an instance of this base
- * class will be automatically created by default when the SoundSystem class is
- * instantiated.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class SoundSystemLogger {
- /**
- * Prints a message.
- *
- * @param message Message to print.
- * @param indent Number of tabs to indent the message.
- */
- public void message(String message, int indent) {
- String messageText;
- // Determine how many spaces to indent:
- String spacer = "";
- for (int x = 0; x < indent; x++) {
- spacer += " ";
- }
- // indent the message:
- messageText = spacer + message;
-
- // Print the message:
- System.out.println(messageText);
- }
-
- /**
- * Prints an important message.
- *
- * @param message Message to print.
- * @param indent Number of tabs to indent the message.
- */
- public void importantMessage(String message, int indent) {
- String messageText;
- // Determine how many spaces to indent:
- String spacer = "";
- for (int x = 0; x < indent; x++) {
- spacer += " ";
- }
- // indent the message:
- messageText = spacer + message;
-
- // Print the message:
- System.out.println(messageText);
- }
-
- /**
- * Prints the specified message if error is true.
- *
- * @param error True or False.
- * @param classname Name of the class checking for an error.
- * @param message Message to print if error is true.
- * @param indent Number of tabs to indent the message.
- * @return True if error is true.
- */
- public boolean errorCheck(boolean error, String classname, String message, int indent) {
- if (error)
- errorMessage(classname, message, indent);
- return error;
- }
-
- /**
- * Prints the classname which generated the error, followed by the error
- * message.
- *
- * @param classname Name of the class which generated the error.
- * @param message The actual error message.
- * @param indent Number of tabs to indent the message.
- */
- public void errorMessage(String classname, String message, int indent) {
- String headerLine, messageText;
- // Determine how many spaces to indent:
- String spacer = "";
- for (int x = 0; x < indent; x++) {
- spacer += " ";
- }
- // indent the header:
- headerLine = spacer + "Error in class '" + classname + "'";
- // indent the message one more than the header:
- messageText = " " + spacer + message;
-
- // Print the error message:
- System.out.println(headerLine);
- System.out.println(messageText);
- }
-
- /**
- * Prints an exception's error message followed by the stack trace.
- *
- * @param e Exception containing the information to print.
- * @param indent Number of tabs to indent the message and stack trace.
- */
- public void printStackTrace(Exception e, int indent) {
- printExceptionMessage(e, indent);
- importantMessage("STACK TRACE:", indent);
- if (e == null)
- return;
-
- StackTraceElement[] stack = e.getStackTrace();
- if (stack == null)
- return;
-
- StackTraceElement line;
- for (int x = 0; x < stack.length; x++) {
- line = stack[x];
- if (line != null)
- message(line.toString(), indent + 1);
- }
- }
-
- /**
- * Prints an exception's error message.
- *
- * @param e Exception containing the message to print.
- * @param indent Number of tabs to indent the message.
- */
- public void printExceptionMessage(Exception e, int indent) {
- importantMessage("ERROR MESSAGE:", indent);
- if (e.getMessage() == null)
- message("(none)", indent + 1);
- else
- message(e.getMessage(), indent + 1);
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/Source.java b/src/lwjgl/java/paulscode/sound/Source.java
deleted file mode 100644
index 55c7f74..0000000
--- a/src/lwjgl/java/paulscode/sound/Source.java
+++ /dev/null
@@ -1,1229 +0,0 @@
-package paulscode.sound;
-
-import java.net.URL;
-import java.util.LinkedList;
-import java.util.ListIterator;
-import javax.sound.sampled.AudioFormat;
-
-/**
- * The Source class is used to store information about a source. Source objects
- * are stored in a map in the Library class. The information they contain is
- * used to create library-specific sources. This is the template class which is
- * extended for each specific library. This class is also used by the "No Sound"
- * library to represent a mute source.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */
-public class Source {
- /**
- * The library class associated with this type of channel.
- */
- protected Class libraryType = Library.class;
-
- /**
- * Used to return a current value from one of the synchronized boolean-interface
- * methods.
- */
- private static final boolean GET = false;
-
- /**
- * Used to set the value in one of the synchronized boolean-interface methods.
- */
- private static final boolean SET = true;
-
- /**
- * Used when a parameter for one of the synchronized boolean-interface methods
- * is not aplicable.
- */
- private static final boolean XXX = false;
-
- /**
- * Processes status messages, warnings, and error messages.
- */
- private SoundSystemLogger logger;
-
- /**
- * True if this source is being directly fed with raw audio data.
- */
- public boolean rawDataStream = false;
-
- /**
- * Format the raw data will be in if this is a Raw Data Stream source.
- */
- public AudioFormat rawDataFormat = null;
-
- /**
- * Determines whether a source should be removed after it finishes playing.
- */
- public boolean temporary = false;
-
- /**
- * Determines whether or not this is a priority source. Priority sources will
- * not be overwritten by other sources when there are no available channels.
- */
- public boolean priority = false;
-
- /**
- * Whether or not this source should be streamed.
- */
- public boolean toStream = false;
-
- /**
- * Whether this source should loop or only play once.
- */
- public boolean toLoop = false;
-
- /**
- * Whether this source needs to be played (for example if it was playing and
- * looping when it got culled).
- */
- public boolean toPlay = false;
-
- /**
- * Unique name for this source. More than one source can not have the same
- * sourcename.
- */
- public String sourcename = "";
-
- /**
- * The audio file which this source should play.
- */
- public FilenameURL filenameURL = null;
-
- /**
- * This source's position in 3D space.
- */
- public Vector3D position;
-
- /**
- * Attenuation model to use for this source.
- */
- public int attModel = 0;
-
- /**
- * Either fade distance or rolloff factor, depending on the value of attModel.
- */
- public float distOrRoll = 0.0f;
-
- /**
- * Source's velocity in world-space, for use in Doppler effect.
- */
- public Vector3D velocity;
-
- /**
- * This source's volume (a float between 0.0 - 1.0). This value is used
- * internally for attenuation, and should not be used to manually change a
- * source's volume.
- */
- public float gain = 1.0f;
-
- /**
- * This value should be used to manually increase or decrease source volume.
- */
- public float sourceVolume = 1.0f;
-
- /**
- * Indicates to the streaming thread that this source is removed and needs
- * cleanup.
- *
- * @see https://github.com/MinecraftForge/MinecraftForge/pull/4765
- */
- public boolean removed = false;
-
- /**
- * This value represents the source's pitch (float value between 0.5f - 2.0f).
- */
- protected float pitch = 1.0f;
-
- /**
- * This source's distance from the listener.
- */
- public float distanceFromListener = 0.0f;
-
- /**
- * Channel to play this source on.
- */
- public Channel channel = null;
-
- /**
- * Holds the data used by normal sources.
- */
- public SoundBuffer soundBuffer = null;
-
- /**
- * False when this source gets culled.
- */
- private boolean active = true;
-
- /**
- * Whether or not this source has been stopped.
- */
- private boolean stopped = true;
-
- /**
- * Whether or not this source has been paused.
- */
- private boolean paused = false;
-
- /**
- * Codec used to read data for streaming sources.
- */
- protected ICodec codec = null;
-
- /**
- * Codec used to read in some initial data from the next sound in the queue.
- */
- protected ICodec nextCodec = null;
-
- /**
- * List of buffers to hold some initial data from the next sound in the queue.
- */
- protected LinkedList nextBuffers = null;
-
- /**
- * The list of files to stream when the current stream finishes.
- */
- protected LinkedList soundSequenceQueue = null;
-
- /**
- * Ensures that only one thread accesses the soundSequenceQueue at a time.
- */
- protected final Object soundSequenceLock = new Object();
-
- /**
- * Used by streaming sources to indicate whether or not the initial
- * stream-buffers still need to be queued.
- */
- public boolean preLoad = false;
-
- /**
- * Specifies the gain factor used for the fade-out effect, or -1 when source is
- * not currently fading out.
- */
- protected float fadeOutGain = -1.0f;
-
- /**
- * Specifies the gain factor used for the fade-in effect, or 1 when source is
- * not currently fading in.
- */
- protected float fadeInGain = 1.0f;
-
- /**
- * Specifies the number of miliseconds it should take to fade out.
- */
- protected long fadeOutMilis = 0;
-
- /**
- * Specifies the number of miliseconds it should take to fade in.
- */
- protected long fadeInMilis = 0;
-
- /**
- * System time in miliseconds when the last fade in/out volume check occurred.
- */
- protected long lastFadeCheck = 0;
-
- /**
- * Constructor: Creates a new source using the specified parameters.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param toStream Setting this to true will create a streaming source.
- * @param toLoop Should this source loop, or play only once.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param filenameURL The filename/URL of the sound file to play at this source.
- * @param soundBuffer Buffer containing audio data, or null if not loaded yet.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attModel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of 'att'.
- * @param temporary Whether or not to remove this source after it finishes
- * playing.
- */
- public Source(boolean priority, boolean toStream, boolean toLoop, String sourcename, FilenameURL filenameURL,
- SoundBuffer soundBuffer, float x, float y, float z, int attModel, float distOrRoll, boolean temporary) {
- // grab a handle to the message logger:
- logger = SoundSystemConfig.getLogger();
-
- this.priority = priority;
- this.toStream = toStream;
- this.toLoop = toLoop;
- this.sourcename = sourcename;
- this.filenameURL = filenameURL;
- this.soundBuffer = soundBuffer;
- position = new Vector3D(x, y, z);
- this.attModel = attModel;
- this.distOrRoll = distOrRoll;
- this.velocity = new Vector3D(0, 0, 0);
- this.temporary = temporary;
-
- if (toStream && filenameURL != null)
- codec = SoundSystemConfig.getCodec(filenameURL.getFilename());
- }
-
- /**
- * Constructor: Creates a new source matching the specified one.
- *
- * @param old Source to copy information from.
- * @param soundBuffer Buffer containing audio data, or null if not loaded yet.
- */
- public Source(Source old, SoundBuffer soundBuffer) {
- // grab a handle to the message logger:
- logger = SoundSystemConfig.getLogger();
-
- priority = old.priority;
- toStream = old.toStream;
- toLoop = old.toLoop;
- sourcename = old.sourcename;
- filenameURL = old.filenameURL;
- position = old.position.clone();
- attModel = old.attModel;
- distOrRoll = old.distOrRoll;
- velocity = old.velocity.clone();
- temporary = old.temporary;
-
- sourceVolume = old.sourceVolume;
-
- rawDataStream = old.rawDataStream;
- rawDataFormat = old.rawDataFormat;
-
- this.soundBuffer = soundBuffer;
-
- if (toStream && filenameURL != null)
- codec = SoundSystemConfig.getCodec(filenameURL.getFilename());
- }
-
- /**
- * Constructor: Creates a new streaming source that will be directly fed with
- * raw audio data.
- *
- * @param audioFormat Format that the data will be in.
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attModel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of 'att'.
- */
- public Source(AudioFormat audioFormat, boolean priority, String sourcename, float x, float y, float z, int attModel,
- float distOrRoll) {
- // grab a handle to the message logger:
- logger = SoundSystemConfig.getLogger();
-
- this.priority = priority;
- this.toStream = true;
- this.toLoop = false;
- this.sourcename = sourcename;
- this.filenameURL = null;
- this.soundBuffer = null;
- position = new Vector3D(x, y, z);
- this.attModel = attModel;
- this.distOrRoll = distOrRoll;
- this.velocity = new Vector3D(0, 0, 0);
- this.temporary = false;
-
- rawDataStream = true;
- rawDataFormat = audioFormat;
- }
- /* Override methods */
-
- /**
- * Shuts the source down and removes references to all instantiated objects.
- */
- public void cleanup() {
- if (codec != null)
- codec.cleanup();
-
- synchronized (soundSequenceLock) {
- if (soundSequenceQueue != null)
- soundSequenceQueue.clear();
- soundSequenceQueue = null;
- }
-
- sourcename = null;
- filenameURL = null;
- position = null;
- soundBuffer = null;
- codec = null;
- }
-
- /**
- * If this is a streaming source, queues up the next sound to play when the
- * previous stream ends. This method has no effect on non-streaming sources.
- *
- * @param filenameURL The filename/URL of the sound file to stream next.
- */
- public void queueSound(FilenameURL filenameURL) {
- if (!toStream) {
- errorMessage("Method 'queueSound' may only be used for " + "streaming and MIDI sources.");
- return;
- }
- if (filenameURL == null) {
- errorMessage("File not specified in method 'queueSound'");
- return;
- }
-
- synchronized (soundSequenceLock) {
- if (soundSequenceQueue == null)
- soundSequenceQueue = new LinkedList();
- soundSequenceQueue.add(filenameURL);
- }
- }
-
- /**
- * Removes the first occurrence of the specified filename from the list of
- * sounds to play when the previous stream ends. This method has no effect on
- * non-streaming sources.
- *
- * @param filename Filename/identifier of a sound file to remove from the queue.
- */
- public void dequeueSound(String filename) {
- if (!toStream) {
- errorMessage("Method 'dequeueSound' may only be used for " + "streaming and MIDI sources.");
- return;
- }
- if (filename == null || filename.equals("")) {
- errorMessage("Filename not specified in method 'dequeueSound'");
- return;
- }
-
- synchronized (soundSequenceLock) {
- if (soundSequenceQueue != null) {
- ListIterator i = soundSequenceQueue.listIterator();
- while (i.hasNext()) {
- if (i.next().getFilename().equals(filename)) {
- i.remove();
- break;
- }
- }
- }
- }
- }
-
- /**
- * Fades out the volume of whatever this source is currently playing, then
- * begins playing the specified filename at the source's previously assigned
- * volume level. If the filename parameter is null or empty, the source will
- * simply fade out and stop. The miliseconds parameter must be non-negative or
- * zero. This method will remove anything that is currently in the list of
- * queued sounds that would have played next when the current sound finished
- * playing. This method has no effect on non-streaming sources.
- *
- * @param filenameURL Filename/URL of the sound file to play next, or null for
- * none.
- * @param milis Number of miliseconds the fadeout should take.
- */
- public void fadeOut(FilenameURL filenameURL, long milis) {
- if (!toStream) {
- errorMessage("Method 'fadeOut' may only be used for " + "streaming and MIDI sources.");
- return;
- }
- if (milis < 0) {
- errorMessage("Miliseconds may not be negative in method " + "'fadeOut'.");
- return;
- }
-
- fadeOutMilis = milis;
- fadeInMilis = 0;
- fadeOutGain = 1.0f;
- lastFadeCheck = System.currentTimeMillis();
-
- synchronized (soundSequenceLock) {
- if (soundSequenceQueue != null)
- soundSequenceQueue.clear();
-
- if (filenameURL != null) {
- if (soundSequenceQueue == null)
- soundSequenceQueue = new LinkedList();
- soundSequenceQueue.add(filenameURL);
- }
- }
- }
-
- /**
- * Fades out the volume of whatever this source is currently playing, then fades
- * the volume back in playing the specified file. Final volume after fade-in
- * completes will be equal to the source's previously assigned volume level. The
- * filenameURL parameter may not be null or empty. The miliseconds parameters
- * must be non-negative or zero. This method will remove anything that is
- * currently in the list of queued sounds that would have played next when the
- * current sound finished playing. This method has no effect on non-streaming
- * sources.
- *
- * @param filenameURL Filename/URL of the sound file to play next, or null for
- * none.
- * @param milisOut Number of miliseconds the fadeout should take.
- * @param milisIn Number of miliseconds the fadein should take.
- */
- public void fadeOutIn(FilenameURL filenameURL, long milisOut, long milisIn) {
- if (!toStream) {
- errorMessage("Method 'fadeOutIn' may only be used for " + "streaming and MIDI sources.");
- return;
- }
- if (filenameURL == null) {
- errorMessage("Filename/URL not specified in method 'fadeOutIn'.");
- return;
- }
- if (milisOut < 0 || milisIn < 0) {
- errorMessage("Miliseconds may not be negative in method " + "'fadeOutIn'.");
- return;
- }
-
- fadeOutMilis = milisOut;
- fadeInMilis = milisIn;
-
- fadeOutGain = 1.0f;
- lastFadeCheck = System.currentTimeMillis();
-
- synchronized (soundSequenceLock) {
- if (soundSequenceQueue == null)
- soundSequenceQueue = new LinkedList();
- soundSequenceQueue.clear();
- soundSequenceQueue.add(filenameURL);
- }
- }
-
- /**
- * Resets this source's volume if it is fading out or in. Returns true if this
- * source is currently in the process of fading out. When fade-out completes,
- * this method transitions the source to the next sound in the sound sequence
- * queue if there is one. This method has no effect on non-streaming sources.
- *
- * @return True if this source is in the process of fading out.
- */
- public boolean checkFadeOut() {
- if (!toStream)
- return false;
-
- if (fadeOutGain == -1.0f && fadeInGain == 1.0f)
- return false;
-
- long currentTime = System.currentTimeMillis();
- long milisPast = currentTime - lastFadeCheck;
- lastFadeCheck = currentTime;
-
- if (fadeOutGain >= 0.0f) {
- if (fadeOutMilis == 0) {
- fadeOutGain = -1.0f;
- fadeInGain = 0.0f;
- if (!incrementSoundSequence()) {
- stop();
- }
- positionChanged();
- preLoad = true;
- return false;
- } else {
- float fadeOutReduction = ((float) milisPast) / ((float) fadeOutMilis);
- fadeOutGain -= fadeOutReduction;
- if (fadeOutGain <= 0.0f) {
- fadeOutGain = -1.0f;
- fadeInGain = 0.0f;
- if (!incrementSoundSequence())
- stop();
- positionChanged();
- preLoad = true;
- return false;
- }
- }
- positionChanged();
- return true;
- }
-
- if (fadeInGain < 1.0f) {
- fadeOutGain = -1.0f;
- if (fadeInMilis == 0) {
- fadeOutGain = -1.0f;
- fadeInGain = 1.0f;
- } else {
- float fadeInIncrease = ((float) milisPast) / ((float) fadeInMilis);
- fadeInGain += fadeInIncrease;
- if (fadeInGain >= 1.0f) {
- fadeOutGain = -1.0f;
- fadeInGain = 1.0f;
- }
- }
- positionChanged();
- return true;
- }
- return false;
- }
-
- /**
- * Removes the next filename/URL from the sound sequence queue and assigns it to
- * this source. This method has no effect on non-streaming sources. This method
- * is used internally by SoundSystem, and it is unlikely that the user will ever
- * need to use it.
- *
- * @return True if there was something in the queue.
- */
- public boolean incrementSoundSequence() {
- if (!toStream) {
- errorMessage("Method 'incrementSoundSequence' may only be used " + "for streaming and MIDI sources.");
- return false;
- }
-
- synchronized (soundSequenceLock) {
- if (soundSequenceQueue != null && soundSequenceQueue.size() > 0) {
- filenameURL = soundSequenceQueue.remove(0);
- if (codec != null)
- codec.cleanup();
- codec = SoundSystemConfig.getCodec(filenameURL.getFilename());
- return true;
- }
- }
- return false;
- }
-
- /**
- * Reads in initial buffers of data from the next sound in the sound sequence
- * queue, to reduce lag when the transition occurrs. This method has no effect
- * on non-streaming sources. This method is used internally by SoundSystem, and
- * it is unlikely that the user will ever need to use it.
- *
- * @return False if there is nothing in the queue to read from.
- */
- public boolean readBuffersFromNextSoundInSequence() {
- if (!toStream) {
- errorMessage("Method 'readBuffersFromNextSoundInSequence' may " + "only be used for streaming sources.");
- return false;
- }
-
- synchronized (soundSequenceLock) {
- if (soundSequenceQueue != null && soundSequenceQueue.size() > 0) {
- if (nextCodec != null)
- nextCodec.cleanup();
- nextCodec = SoundSystemConfig.getCodec(soundSequenceQueue.get(0).getFilename());
- nextCodec.initialize(soundSequenceQueue.get(0).getURL());
-
- SoundBuffer buffer = null;
- for (int i = 0; i < SoundSystemConfig.getNumberStreamingBuffers() && !nextCodec.endOfStream(); i++) {
- buffer = nextCodec.read();
- if (buffer != null) {
- if (nextBuffers == null)
- nextBuffers = new LinkedList();
- nextBuffers.add(buffer);
- }
- }
- return true;
- }
- }
- return false;
- }
-
- /**
- * Returns the size of the sound sequence queue (if this is a streaming source).
- *
- * @return Number of sounds left in the queue, or zero if none.
- */
- public int getSoundSequenceQueueSize() {
- if (soundSequenceQueue == null)
- return 0;
- return soundSequenceQueue.size();
- }
-
- /**
- * Sets whether or not this source should be removed when it finishes playing.
- *
- * @param tmp True or false.
- */
- public void setTemporary(boolean tmp) {
- temporary = tmp;
- }
-
- /**
- * Called every time the listener's position or orientation changes.
- */
- public void listenerMoved() {
- }
-
- /**
- * Moves the source to the specified position.
- *
- * @param x X coordinate to move to.
- * @param y Y coordinate to move to.
- * @param z Z coordinate to move to.
- */
- public void setPosition(float x, float y, float z) {
- position.x = x;
- position.y = y;
- position.z = z;
- }
-
- /**
- * Called every time the source changes position.
- */
- public void positionChanged() {
- }
-
- /**
- * Sets whether or not this source is a priority source. A priority source will
- * not be overritten by another source if there are no channels available to
- * play on.
- *
- * @param pri True or false.
- */
- public void setPriority(boolean pri) {
- priority = pri;
- }
-
- /**
- * Sets whether this source should loop or only play once.
- *
- * @param lp True or false.
- */
- public void setLooping(boolean lp) {
- toLoop = lp;
- }
-
- /**
- * Sets this source's attenuation model.
- *
- * @param model Attenuation model to use.
- */
- public void setAttenuation(int model) {
- attModel = model;
- }
-
- /**
- * Sets this source's fade distance or rolloff factor, depending on the
- * attenuation model.
- *
- * @param dr New value for fade distance or rolloff factor.
- */
- public void setDistOrRoll(float dr) {
- distOrRoll = dr;
- }
-
- /**
- * Sets this source's velocity, for use in Doppler effect.
- *
- * @param x Velocity along world x-axis.
- * @param y Velocity along world y-axis.
- * @param z Velocity along world z-axis.
- */
- public void setVelocity(float x, float y, float z) {
- this.velocity.x = x;
- this.velocity.y = y;
- this.velocity.z = z;
- }
-
- /**
- * Returns the source's distance from the listener.
- *
- * @return How far away the source is.
- */
- public float getDistanceFromListener() {
- return distanceFromListener;
- }
-
- /**
- * Manually sets the specified source's pitch.
- *
- * @param value A float value ( 0.5f - 2.0f ).
- */
- public void setPitch(float value) {
- float newPitch = value;
- if (newPitch < 0.5f)
- newPitch = 0.5f;
- else if (newPitch > 2.0f)
- newPitch = 2.0f;
- pitch = newPitch;
- }
-
- /**
- * Returns the pitch of the specified source.
- *
- * @return Float value representing the source pitch (0.5f - 2.0f).
- */
- public float getPitch() {
- return pitch;
- }
-
- /**
- * Indicates whether or not this source's associated library requires some
- * codecs to reverse-order the audio data they generate.
- *
- * @return True if audio data should be reverse-ordered.
- */
- public boolean reverseByteOrder() {
- return SoundSystemConfig.reverseByteOrder(libraryType);
- }
-
- /**
- * Changes the sources peripheral information to match the supplied parameters.
- *
- * @param priority Setting this to true will prevent other sounds from
- * overriding this one.
- * @param toStream Setting this to true will create a streaming source.
- * @param toLoop Should this source loop, or play only once.
- * @param sourcename A unique identifier for this source. Two sources may not
- * use the same sourcename.
- * @param filenameURL Filename/URL of the sound file to play at this source.
- * @param x X position for this source.
- * @param y Y position for this source.
- * @param z Z position for this source.
- * @param attModel Attenuation model to use.
- * @param distOrRoll Either the fading distance or rolloff factor, depending on
- * the value of 'att'.
- * @param temporary Whether or not to remove this source after it finishes
- * playing.
- */
- public void changeSource(boolean priority, boolean toStream, boolean toLoop, String sourcename,
- FilenameURL filenameURL, SoundBuffer soundBuffer, float x, float y, float z, int attModel, float distOrRoll,
- boolean temporary) {
- this.priority = priority;
- this.toStream = toStream;
- this.toLoop = toLoop;
- this.sourcename = sourcename;
- this.filenameURL = filenameURL;
- this.soundBuffer = soundBuffer;
- position.x = x;
- position.y = y;
- position.z = z;
- this.attModel = attModel;
- this.distOrRoll = distOrRoll;
- this.temporary = temporary;
- }
-
- /**
- * Feeds raw data to the specified channel.
- *
- * @param buffer Byte buffer containing raw audio data to stream.
- * @param c Channel to stream on.
- * @return Number of prior buffers that have been processed, or -1 if unable to
- * queue the buffer (if the source was culled, for example).
- */
- public int feedRawAudioData(Channel c, byte[] buffer) {
- if (!active(GET, XXX)) {
- toPlay = true;
- return -1;
- }
- if (channel != c) {
- channel = c;
- channel.close();
- channel.setAudioFormat(rawDataFormat);
- positionChanged();
- }
-
- // change the state of this source to not stopped and not paused:
- stopped(SET, false);
- paused(SET, false);
-
- return channel.feedRawAudioData(buffer);
- }
-
- /**
- * Plays the source on the specified channel.
- *
- * @param c Channel to play on.
- */
- public void play(Channel c) {
- if (!active(GET, XXX)) {
- if (toLoop)
- toPlay = true;
- return;
- }
- if (channel != c) {
- channel = c;
- channel.close();
- }
- // change the state of this source to not stopped and not paused:
- stopped(SET, false);
- paused(SET, false);
- }
- /* END Override methods */
-
- /**
- * Streams the source on its current channel
- *
- * @return False when stream has finished playing.
- */
- public boolean stream() {
- if (channel == null)
- return false;
-
- if (preLoad) {
- if (rawDataStream)
- preLoad = false;
- else
- return preLoad();
- }
-
- if (rawDataStream) {
- if (stopped() || paused())
- return true;
- if (channel.buffersProcessed() > 0)
- channel.processBuffer();
- return true;
- } else {
- if (codec == null)
- return false;
- if (stopped())
- return false;
- if (paused())
- return true;
-
- int processed = channel.buffersProcessed();
-
- SoundBuffer buffer = null;
- for (int i = 0; i < processed; i++) {
- buffer = codec.read();
- if (buffer != null) {
- if (buffer.audioData != null)
- channel.queueBuffer(buffer.audioData);
- buffer.cleanup();
- buffer = null;
- return true;
- } else if (codec.endOfStream()) {
- synchronized (soundSequenceLock) {
- if (SoundSystemConfig.getStreamQueueFormatsMatch()) {
- if (soundSequenceQueue != null && soundSequenceQueue.size() > 0) {
- if (codec != null)
- codec.cleanup();
- filenameURL = soundSequenceQueue.remove(0);
- codec = SoundSystemConfig.getCodec(filenameURL.getFilename());
- codec.initialize(filenameURL.getURL());
- buffer = codec.read();
- if (buffer != null) {
- if (buffer.audioData != null)
- channel.queueBuffer(buffer.audioData);
- buffer.cleanup();
- buffer = null;
- return true;
- }
- } else if (toLoop) {
- codec.initialize(filenameURL.getURL());
- buffer = codec.read();
- if (buffer != null) {
- if (buffer.audioData != null)
- channel.queueBuffer(buffer.audioData);
- buffer.cleanup();
- buffer = null;
- return true;
- }
- }
- }
- }
- }
- /*
- * if( codec.endOfStream() ) { synchronized( soundSequenceLock ) { if(
- * SoundSystemConfig.getStreamQueueFormatsMatch() ) { if( soundSequenceQueue !=
- * null && soundSequenceQueue.size() > 0 ) { if( codec != null )
- * codec.cleanup(); filenameURL = soundSequenceQueue.remove( 0 ); codec =
- * SoundSystemConfig.getCodec( filenameURL.getFilename() ); codec.initialize(
- * filenameURL.getURL() ); return true; } else if( toLoop ) { codec.initialize(
- * filenameURL.getURL() ); buffer = codec.read(); if( buffer != null ) { if(
- * buffer.audioData != null ) channel.queueBuffer( buffer.audioData );
- * buffer.cleanup(); buffer = null; } } } } return false; }
- */
- }
- }
- return false;
- }
-
- /**
- * Queues up the initial stream-buffers for the stream.
- *
- * @return False if the end of the stream was reached.
- */
- public boolean preLoad() {
- if (channel == null)
- return false;
-
- if (codec == null)
- return false;
-
- SoundBuffer buffer = null;
-
- boolean noNextBuffers = false;
- synchronized (soundSequenceLock) {
- if (nextBuffers == null || nextBuffers.isEmpty())
- noNextBuffers = true;
- }
-
- if (nextCodec != null && !noNextBuffers) {
- codec = nextCodec;
- nextCodec = null;
- synchronized (soundSequenceLock) {
- while (!nextBuffers.isEmpty()) {
- buffer = nextBuffers.remove(0);
- if (buffer != null) {
- if (buffer.audioData != null)
- channel.queueBuffer(buffer.audioData);
- buffer.cleanup();
- buffer = null;
- }
- }
- }
- } else {
- nextCodec = null;
- URL url = filenameURL.getURL();
-
- codec.initialize(url);
- for (int i = 0; i < SoundSystemConfig.getNumberStreamingBuffers(); i++) {
- buffer = codec.read();
- if (buffer != null) {
- if (buffer.audioData != null)
- channel.queueBuffer(buffer.audioData);
- buffer.cleanup();
- buffer = null;
- }
- }
- }
-
- return true;
- }
-
- /**
- * Pauses the source.
- */
- public void pause() {
- toPlay = false;
- paused(SET, true);
- if (channel != null)
- channel.pause();
- else
- errorMessage("Channel null in method 'pause'");
- }
-
- /**
- * Stops the source.
- */
- public void stop() {
- toPlay = false;
- stopped(SET, true);
- paused(SET, false);
- if (channel != null)
- channel.stop();
- else
- errorMessage("Channel null in method 'stop'");
- }
-
- /**
- * Rewinds the source. If the source was paused, then it is stopped.
- */
- public void rewind() {
- if (paused(GET, XXX)) {
- stop();
- }
- if (channel != null) {
- boolean rePlay = playing();
- channel.rewind();
- if (toStream && rePlay) {
- stop();
- play(channel);
- }
- } else
- errorMessage("Channel null in method 'rewind'");
- }
-
- /**
- * Dequeues any previously queued data.
- */
- public void flush() {
- if (channel != null)
- channel.flush();
- else
- errorMessage("Channel null in method 'flush'");
- }
-
- /**
- * Stops and flushes the source, and prevents it from being played again until
- * the activate() is called.
- */
- public void cull() {
- if (!active(GET, XXX))
- return;
- if (playing() && toLoop)
- toPlay = true;
- if (rawDataStream)
- toPlay = true;
- active(SET, false);
- if (channel != null)
- channel.close();
- channel = null;
- }
-
- /**
- * Allows a previously culled source to be played again.
- */
- public void activate() {
- active(SET, true);
- }
-
- /**
- * Returns false if the source has been culled.
- *
- * @return True or False
- */
- public boolean active() {
- return active(GET, XXX);
- }
-
- /**
- * Returns true if the source is playing.
- *
- * @return True or False
- */
- public boolean playing() {
- if (channel == null || channel.attachedSource != this)
- return false;
- else if (paused() || stopped())
- return false;
- else
- return channel.playing();
- }
-
- /**
- * Returns true if the source has been stopped.
- *
- * @return True or False
- */
- public boolean stopped() {
- return stopped(GET, XXX);
- }
-
- /**
- * Returns true if the source has been paused.
- *
- * @return True or False
- */
- public boolean paused() {
- return paused(GET, XXX);
- }
-
- /**
- * Returns the number of miliseconds since the source began playing.
- *
- * @return miliseconds, or -1 if not playing or unable to calculate
- */
- public float millisecondsPlayed() {
- if (channel == null)
- return (-1);
- else
- return channel.millisecondsPlayed();
- }
-
- /**
- * Sets or returns whether or not the source has been culled.
- *
- * @return True or False
- */
- private synchronized boolean active(boolean action, boolean value) {
- if (action == SET)
- active = value;
- return active;
- }
-
- /**
- * Sets or returns whether or not the source has been stopped.
- *
- * @return True or False
- */
- private synchronized boolean stopped(boolean action, boolean value) {
- if (action == SET)
- stopped = value;
- return stopped;
- }
-
- /**
- * Sets or returns whether or not the source has been paused.
- *
- * @return True or False
- */
- private synchronized boolean paused(boolean action, boolean value) {
- if (action == SET)
- paused = value;
- return paused;
- }
-
- /**
- * Returns the name of the class.
- *
- * @return SoundLibraryXXXX.
- */
- public String getClassName() {
- String libTitle = SoundSystemConfig.getLibraryTitle(libraryType);
-
- if (libTitle.equals("No Sound"))
- return "Source";
- else
- return "Source" + libTitle;
- }
-
- /**
- * Prints a message.
- *
- * @param message Message to print.
- */
- protected void message(String message) {
- logger.message(message, 0);
- }
-
- /**
- * Prints an important message.
- *
- * @param message Message to print.
- */
- protected void importantMessage(String message) {
- logger.importantMessage(message, 0);
- }
-
- /**
- * Prints the specified message if error is true.
- *
- * @param error True or False.
- * @param message Message to print if error is true.
- * @return True if error is true.
- */
- protected boolean errorCheck(boolean error, String message) {
- return logger.errorCheck(error, getClassName(), message, 0);
- }
-
- /**
- * Prints an error message.
- *
- * @param message Message to print.
- */
- protected void errorMessage(String message) {
- logger.errorMessage(getClassName(), message, 0);
- }
-
- /**
- * Prints an exception's error message followed by the stack trace.
- *
- * @param e Exception containing the information to print.
- */
- protected void printStackTrace(Exception e) {
- logger.printStackTrace(e, 1);
- }
-}
diff --git a/src/lwjgl/java/paulscode/sound/StreamThread.java b/src/lwjgl/java/paulscode/sound/StreamThread.java
deleted file mode 100644
index 9bc810c..0000000
--- a/src/lwjgl/java/paulscode/sound/StreamThread.java
+++ /dev/null
@@ -1,253 +0,0 @@
-package paulscode.sound;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-
-/**
- * The StreamThread class is used to process all streaming sources. This thread
- * starts out asleep, and it sleeps when all streaming sources are finished
- * playing, so it is necessary to call interrupt() after adding new streaming
- * sources to the list.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise.
- * You may modify this library or source code, and distribute it any way you
- * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any
- * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then
- * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made
- * before redistributing the modified source code, so other users know it is not
- * the original code.
- * 4) You are not required to give me credit for this library in any derived
- * work, but if you do, you must also mention my website:
- * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial,
- * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations,
- * either expressed or implied, regarding the use of this library or any part of
- * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- *
- */
-public class StreamThread extends SimpleThread {
- /**
- * Processes status messages, warnings, and error messages.
- */
- private SoundSystemLogger logger;
-
- /**
- * List of sources that are currently streaming.
- */
- private List