Update #27 - Fixed crash with fireballs, made offline start faster

This commit is contained in:
lax1dude
2024-03-10 13:28:39 -07:00
parent 0f86f71cfd
commit 6366638193
22 changed files with 511 additions and 61 deletions

View File

@ -10,7 +10,7 @@ public class EaglercraftVersion {
/// Customize these to fit your fork:
public static final String projectForkName = "EaglercraftX";
public static final String projectForkVersion = "u26";
public static final String projectForkVersion = "u27";
public static final String projectForkVendor = "lax1dude";
public static final String projectForkURL = "https://gitlab.com/lax1dude/eaglercraftx-1.8";
@ -20,7 +20,7 @@ public class EaglercraftVersion {
public static final String projectOriginName = "EaglercraftX";
public static final String projectOriginAuthor = "lax1dude";
public static final String projectOriginRevision = "1.8";
public static final String projectOriginVersion = "u26";
public static final String projectOriginVersion = "u27";
public static final String projectOriginURL = "https://gitlab.com/lax1dude/eaglercraftx-1.8"; // rest in peace
@ -31,7 +31,7 @@ public class EaglercraftVersion {
public static final boolean enableUpdateService = true;
public static final String updateBundlePackageName = "net.lax1dude.eaglercraft.v1_8.client";
public static final int updateBundlePackageVersionInt = 26;
public static final int updateBundlePackageVersionInt = 27;
public static final String updateLatestLocalStorageKey = "latestUpdate_" + updateBundlePackageName;

View File

@ -44,7 +44,7 @@ public interface IClientConfigAdapter {
String getResourcePacksDB();
JSONObject dumpConfig();
JSONObject getIntegratedServerOpts();
List<RelayEntry> getRelays();

View File

@ -1,4 +1,4 @@
package net.minecraft.entity;
package net.lax1dude.eaglercraft.v1_8.minecraft;
import net.minecraft.world.World;

View File

@ -1,8 +1,10 @@
package net.lax1dude.eaglercraft.v1_8.update;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.lax1dude.eaglercraft.v1_8.EagRuntime;
@ -36,8 +38,30 @@ public class UpdateService {
private static UpdateCertificate latestUpdateFound = null;
private static final Set<UpdateCertificate> availableUpdates = new HashSet();
private static final Set<RawKnownCertHolder> fastUpdateKnownCheckSet = new HashSet();
private static final Set<UpdateCertificate> dismissedUpdates = new HashSet();
private static class RawKnownCertHolder {
private final byte[] data;
private final int hashcode;
private final long age;
public RawKnownCertHolder(byte[] data) {
this.data = data;
this.hashcode = Arrays.hashCode(data);
this.age = System.currentTimeMillis();
}
public int hashCode() {
return hashcode;
}
public boolean equals(Object o) {
return o != null && (o == this || ((o instanceof RawKnownCertHolder) && Arrays.equals(((RawKnownCertHolder)o).data, data)));
}
}
public static boolean supported() {
return EaglercraftVersion.enableUpdateService && EagRuntime.getConfiguration().allowUpdateSvc() && PlatformUpdateSvc.supported();
}
@ -102,6 +126,16 @@ public class UpdateService {
if (EagRuntime.getConfiguration().allowUpdateDL()) {
synchronized(availableUpdates) {
try {
if(certificateData.length > 32767) {
throw new CertificateInvalidException("Certificate is too large! (" + certificateData.length + " bytes)");
}
if(!fastUpdateKnownCheckSet.add(new RawKnownCertHolder(certificateData))) {
if (EagRuntime.getConfiguration().isLogInvalidCerts()) {
logger.info("Ignoring {} byte certificate that has already been processed", certificateData.length);
}
freeMemory();
return;
}
UpdateCertificate cert = UpdateCertificate.parseAndVerifyCertificate(certificateData);
if (EaglercraftVersion.updateBundlePackageName.equalsIgnoreCase(cert.bundlePackageName)) {
if (myUpdateCert == null || !Arrays.equals(cert.bundleDataHash, myUpdateCert.bundleDataHash)) {
@ -140,6 +174,17 @@ public class UpdateService {
}
}
private static void freeMemory() {
if(fastUpdateKnownCheckSet.size() > 127) {
List<RawKnownCertHolder> lst = new ArrayList(fastUpdateKnownCheckSet);
fastUpdateKnownCheckSet.clear();
lst.sort((c1, c2) -> { return (int)(c2.age - c1.age); });
for(int i = 0; i < 64; ++i) {
fastUpdateKnownCheckSet.add(lst.get(i));
}
}
}
public static void startClientUpdateFrom(UpdateCertificate clientUpdate) {
PlatformUpdateSvc.startClientUpdateFrom(clientUpdate);
}