Files
wes c30e839b64 SBoT 1.0 decompiled with CFR 0.152
Full source recovered from SBoT.jar (July 2004) plus the three bundled
example scripts (BoneBury, GuildFish, GuildFisher). Class names are the
original RSC-era single-letter obfuscation (a.java-z.java); mudclient.java
and Script.java kept their real names since those weren't obfuscated.
2026-08-25 13:11:31 -04:00

487 lines
17 KiB
Java

/*
* Decompiled with CFR 0.152.
*/
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class x
extends w
implements Runnable {
private InputStream E;
private OutputStream F;
private Socket G;
private boolean H = false;
private byte[] I;
private int J;
private int K;
private boolean L = true;
private static String[] M;
public x(Socket socket, a a2) throws IOException {
this.G = socket;
this.E = socket.getInputStream();
this.F = socket.getOutputStream();
this.L = false;
a2.a(this);
}
/*
* WARNING - Removed try catching itself - possible behaviour change.
*/
public void a() {
block11: {
boolean bl = q.d;
super.a();
this.H = true;
try {
x x2 = this;
if (!bl) {
if (x2.E != null) {
this.E.close();
}
x2 = this;
}
if (!bl) {
if (x2.F != null) {
this.F.close();
}
x2 = this;
}
Socket socket = x2.G;
if (!bl) {
if (socket == null) break block11;
socket = this.G;
}
socket.close();
}
catch (IOException iOException) {
System.out.println(M[1]);
}
}
this.L = true;
x x3 = this;
synchronized (x3) {
this.notify();
}
this.I = null;
}
public int h() throws IOException {
int n2 = this.H;
if (!q.d) {
if (n2 != 0) {
return 0;
}
n2 = this.E.read();
}
return n2;
}
public int d() throws IOException {
int n2 = this.H;
if (!q.d) {
if (n2 != 0) {
return 0;
}
n2 = this.E.available();
}
return n2;
}
public void a(int n2, int n3, byte[] byArray) throws IOException {
boolean bl = q.d;
int n4 = this.H;
if (!bl) {
if (n4 != 0) {
return;
}
n4 = 0;
}
int n5 = n4;
boolean bl2 = false;
while (n5 < n2) {
int n6 = this.E.read(byArray, n5 + n3, n2 - n5);
if (!bl) {
int n7;
if (n6 <= 0) {
throw new IOException(M[0]);
}
n6 = n5 = n5 + n7;
}
if (!bl) continue;
}
}
/*
* WARNING - Removed try catching itself - possible behaviour change.
*/
public void b(byte[] byArray, int n2, int n3) throws IOException {
boolean bl = q.d;
x x2 = this;
if (!bl) {
if (x2.H) {
return;
}
x2 = this;
}
if (!bl) {
if (x2.I == null) {
this.I = new byte[5000];
}
x2 = this;
}
x x3 = x2;
synchronized (x2) {
block11: {
x x4;
int n4 = 0;
while (n4 < n3) {
this.I[this.K] = byArray[n4 + n2];
this.K = (this.K + 1) % 5000;
if (!bl) {
x4 = this;
if (bl) break block11;
if (x4.K == (this.J + 4900) % 5000) {
throw new IOException(M[3]);
}
++n4;
}
if (!bl) continue;
}
this.notify();
x4 = x3;
}
// ** MonitorExit[v1] (shouldn't be in output)
return;
}
}
/*
* WARNING - Removed try catching itself - possible behaviour change.
*/
public void run() {
boolean bl = q.d;
boolean bl2 = false;
while (!this.L) {
int n2;
int n3;
block21: {
x x2 = this;
synchronized (x2) {
int n4;
int n5;
block19: {
block20: {
int n6 = this.K;
if (!bl) {
if (n6 == this.J) {
try {
this.wait();
}
catch (InterruptedException interruptedException) {
// empty catch block
}
}
n6 = this.L ? 1 : 0;
}
if (!bl) {
if (n6 != 0) {
return;
}
n6 = this.J;
}
n3 = n6;
n5 = this.K;
n4 = this.J;
if (bl) break block19;
if (n5 < n4) break block20;
n2 = this.K - this.J;
if (!bl) break block21;
}
n5 = 5000;
n4 = this.J;
}
n2 = n5 - n4;
}
}
if (n2 <= 0) continue;
try {
this.F.write(this.I, n3, n2);
}
catch (IOException iOException) {
this.y = true;
this.C = M[2] + iOException;
}
this.J = (this.J + n2) % 5000;
try {
x x3 = this;
if (!bl) {
if (x3.K != this.J) continue;
x3 = this;
}
x3.F.flush();
}
catch (IOException iOException) {
this.y = true;
this.C = M[2] + iOException;
if (!bl) continue;
}
}
}
/*
* Handled impossible loop by duplicating code
* Enabled aggressive block sorting
*/
static {
char[] cArray;
String[] stringArray;
block43: {
int n2;
int n3;
char[] cArray2;
int n4;
block42: {
char[] cArray3;
Object var0;
block41: {
int n5;
int n6;
char[] cArray4;
block40: {
char[] cArray5;
block39: {
int n7;
int n8;
char[] cArray6;
block38: {
char[] cArray7;
block37: {
int n9;
int n10;
char[] cArray8;
block36: {
stringArray = new String[4];
var0 = null;
char[] cArray9 = "\u0005\u0013|".toCharArray();
n4 = 0;
int n11 = cArray9.length;
cArray8 = cArray9;
n10 = n11;
if (n11 <= 1) break block36;
cArray7 = cArray8;
n9 = n10;
if (n10 <= n4) break block37;
}
do {
char[] cArray10 = cArray8;
char[] cArray11 = cArray8;
int n12 = n4;
while (true) {
int n13;
char c2 = cArray10[n12];
switch (n4 % 5) {
case 0: {
n13 = 64;
break;
}
case 1: {
n13 = 92;
break;
}
case 2: {
n13 = 58;
break;
}
case 3: {
n13 = 92;
break;
}
default: {
n13 = 11;
}
}
cArray10[n12] = (char)(c2 ^ n13);
++n4;
cArray8 = cArray11;
n10 = n10;
if (n10 != 0) break;
cArray11 = cArray8;
n9 = n10;
n12 = n10;
cArray10 = cArray8;
}
cArray7 = cArray8;
n9 = n10;
} while (n10 > n4);
}
stringArray[0] = new String(cArray7).intern();
var0 = null;
char[] cArray12 = "\u0005.H3y`?V3x)2]|x4._=f".toCharArray();
n4 = 0;
int n14 = cArray12.length;
cArray6 = cArray12;
n8 = n14;
if (n14 <= 1) break block38;
cArray5 = cArray6;
n7 = n8;
if (n8 <= n4) break block39;
}
do {
char[] cArray13 = cArray6;
char[] cArray14 = cArray6;
int n15 = n4;
while (true) {
int n16;
char c3 = cArray13[n15];
switch (n4 % 5) {
case 0: {
n16 = 64;
break;
}
case 1: {
n16 = 92;
break;
}
case 2: {
n16 = 58;
break;
}
case 3: {
n16 = 92;
break;
}
default: {
n16 = 11;
}
}
cArray13[n15] = (char)(c3 ^ n16);
++n4;
cArray6 = cArray14;
n8 = n8;
if (n8 != 0) break;
cArray14 = cArray6;
n7 = n8;
n15 = n8;
cArray13 = cArray6;
}
cArray5 = cArray6;
n7 = n8;
} while (n8 > n4);
}
stringArray[1] = new String(cArray5).intern();
var0 = null;
char[] cArray15 = "\u0014+H5\u007f%.\u0000".toCharArray();
n4 = 0;
int n17 = cArray15.length;
cArray4 = cArray15;
n6 = n17;
if (n17 <= 1) break block40;
cArray3 = cArray4;
n5 = n6;
if (n6 <= n4) break block41;
}
do {
char[] cArray16 = cArray4;
char[] cArray17 = cArray4;
int n18 = n4;
while (true) {
int n19;
char c4 = cArray16[n18];
switch (n4 % 5) {
case 0: {
n19 = 64;
break;
}
case 1: {
n19 = 92;
break;
}
case 2: {
n19 = 58;
break;
}
case 3: {
n19 = 92;
break;
}
default: {
n19 = 11;
}
}
cArray16[n18] = (char)(c4 ^ n19);
++n4;
cArray4 = cArray17;
n6 = n6;
if (n6 != 0) break;
cArray17 = cArray4;
n5 = n6;
n18 = n6;
cArray16 = cArray4;
}
cArray3 = cArray4;
n5 = n6;
} while (n6 > n4);
}
stringArray[2] = new String(cArray3).intern();
var0 = null;
char[] cArray18 = "\")\\:n2|U*n2:V3|".toCharArray();
n4 = 0;
int n20 = cArray18.length;
cArray2 = cArray18;
n3 = n20;
if (n20 <= 1) break block42;
cArray = cArray2;
n2 = n3;
if (n3 <= n4) break block43;
}
do {
char[] cArray19 = cArray2;
char[] cArray20 = cArray2;
int n21 = n4;
while (true) {
int n22;
char c5 = cArray19[n21];
switch (n4 % 5) {
case 0: {
n22 = 64;
break;
}
case 1: {
n22 = 92;
break;
}
case 2: {
n22 = 58;
break;
}
case 3: {
n22 = 92;
break;
}
default: {
n22 = 11;
}
}
cArray19[n21] = (char)(c5 ^ n22);
++n4;
cArray2 = cArray20;
n3 = n3;
if (n3 != 0) break;
cArray20 = cArray2;
n2 = n3;
n21 = n3;
cArray19 = cArray2;
}
cArray = cArray2;
n2 = n3;
} while (n3 > n4);
}
stringArray[3] = new String(cArray).intern();
M = stringArray;
}
}