Skip to content

Commit aae277e

Browse files
author
eaglercraft
committed
u27
1 parent af50d17 commit aae277e

File tree

20 files changed

+495
-57
lines changed

20 files changed

+495
-57
lines changed

src/lwjgl/java/net/lax1dude/eaglercraft/v1_8/internal/lwjgl/DesktopClientConfigAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public String getResourcePacksDB() {
5757
}
5858

5959
@Override
60-
public JSONObject dumpConfig() {
60+
public JSONObject getIntegratedServerOpts() {
6161
return new JSONObject("{\"container\":null,\"worldsDB\":\"desktop\"}");
6262
}
6363

src/main/java/net/lax1dude/eaglercraft/v1_8/EaglercraftVersion.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class EaglercraftVersion {
1010
/// Customize these to fit your fork:
1111

1212
public static final String projectForkName = "EaglercraftX";
13-
public static final String projectForkVersion = "u26";
13+
public static final String projectForkVersion = "u27";
1414
public static final String projectForkVendor = "lax1dude";
1515

1616
public static final String projectForkURL = "https://gitlab.com/lax1dude/eaglercraftx-1.8";
@@ -20,7 +20,7 @@ public class EaglercraftVersion {
2020
public static final String projectOriginName = "EaglercraftX";
2121
public static final String projectOriginAuthor = "lax1dude";
2222
public static final String projectOriginRevision = "1.8";
23-
public static final String projectOriginVersion = "u26";
23+
public static final String projectOriginVersion = "u27";
2424

2525
public static final String projectOriginURL = "https://gitlab.com/lax1dude/eaglercraftx-1.8"; // rest in peace
2626

@@ -31,7 +31,7 @@ public class EaglercraftVersion {
3131
public static final boolean enableUpdateService = true;
3232

3333
public static final String updateBundlePackageName = "net.lax1dude.eaglercraft.v1_8.client";
34-
public static final int updateBundlePackageVersionInt = 26;
34+
public static final int updateBundlePackageVersionInt = 27;
3535

3636
public static final String updateLatestLocalStorageKey = "latestUpdate_" + updateBundlePackageName;
3737

src/main/java/net/lax1dude/eaglercraft/v1_8/internal/IClientConfigAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public DefaultServer(String name, String addr) {
4444

4545
String getResourcePacksDB();
4646

47-
JSONObject dumpConfig();
47+
JSONObject getIntegratedServerOpts();
4848

4949
List<RelayEntry> getRelays();
5050

src/main/java/net/minecraft/entity/EntityConstructor.java renamed to src/main/java/net/lax1dude/eaglercraft/v1_8/minecraft/EntityConstructor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.minecraft.entity;
1+
package net.lax1dude.eaglercraft.v1_8.minecraft;
22

33
import net.minecraft.world.World;
44

src/main/java/net/lax1dude/eaglercraft/v1_8/update/UpdateService.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package net.lax1dude.eaglercraft.v1_8.update;
22

3+
import java.util.ArrayList;
34
import java.util.Arrays;
45
import java.util.Collection;
56
import java.util.HashSet;
7+
import java.util.List;
68
import java.util.Set;
79

810
import net.lax1dude.eaglercraft.v1_8.EagRuntime;
@@ -36,8 +38,30 @@ public class UpdateService {
3638

3739
private static UpdateCertificate latestUpdateFound = null;
3840
private static final Set<UpdateCertificate> availableUpdates = new HashSet();
41+
private static final Set<RawKnownCertHolder> fastUpdateKnownCheckSet = new HashSet();
3942
private static final Set<UpdateCertificate> dismissedUpdates = new HashSet();
4043

44+
private static class RawKnownCertHolder {
45+
46+
private final byte[] data;
47+
private final int hashcode;
48+
private final long age;
49+
50+
public RawKnownCertHolder(byte[] data) {
51+
this.data = data;
52+
this.hashcode = Arrays.hashCode(data);
53+
this.age = System.currentTimeMillis();
54+
}
55+
56+
public int hashCode() {
57+
return hashcode;
58+
}
59+
60+
public boolean equals(Object o) {
61+
return o != null && (o == this || ((o instanceof RawKnownCertHolder) && Arrays.equals(((RawKnownCertHolder)o).data, data)));
62+
}
63+
}
64+
4165
public static boolean supported() {
4266
return EaglercraftVersion.enableUpdateService && EagRuntime.getConfiguration().allowUpdateSvc() && PlatformUpdateSvc.supported();
4367
}
@@ -102,6 +126,16 @@ private static void addCertificateToSet(byte[] certificateData, boolean saveLate
102126
if (EagRuntime.getConfiguration().allowUpdateDL()) {
103127
synchronized(availableUpdates) {
104128
try {
129+
if(certificateData.length > 32767) {
130+
throw new CertificateInvalidException("Certificate is too large! (" + certificateData.length + " bytes)");
131+
}
132+
if(!fastUpdateKnownCheckSet.add(new RawKnownCertHolder(certificateData))) {
133+
if (EagRuntime.getConfiguration().isLogInvalidCerts()) {
134+
logger.info("Ignoring {} byte certificate that has already been processed", certificateData.length);
135+
}
136+
freeMemory();
137+
return;
138+
}
105139
UpdateCertificate cert = UpdateCertificate.parseAndVerifyCertificate(certificateData);
106140
if (EaglercraftVersion.updateBundlePackageName.equalsIgnoreCase(cert.bundlePackageName)) {
107141
if (myUpdateCert == null || !Arrays.equals(cert.bundleDataHash, myUpdateCert.bundleDataHash)) {
@@ -140,6 +174,17 @@ private static void addCertificateToSet(byte[] certificateData, boolean saveLate
140174
}
141175
}
142176

177+
private static void freeMemory() {
178+
if(fastUpdateKnownCheckSet.size() > 127) {
179+
List<RawKnownCertHolder> lst = new ArrayList(fastUpdateKnownCheckSet);
180+
fastUpdateKnownCheckSet.clear();
181+
lst.sort((c1, c2) -> { return (int)(c2.age - c1.age); });
182+
for(int i = 0; i < 64; ++i) {
183+
fastUpdateKnownCheckSet.add(lst.get(i));
184+
}
185+
}
186+
}
187+
143188
public static void startClientUpdateFrom(UpdateCertificate clientUpdate) {
144189
PlatformUpdateSvc.startClientUpdateFrom(clientUpdate);
145190
}

src/main/java/net/minecraft/client/audio/SoundHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.google.common.collect.Lists;
1818

1919
import net.lax1dude.eaglercraft.v1_8.IOUtils;
20+
import net.lax1dude.eaglercraft.v1_8.ThreadLocalRandom;
2021
import net.lax1dude.eaglercraft.v1_8.json.JSONTypeProvider;
2122
import net.lax1dude.eaglercraft.v1_8.log4j.LogManager;
2223
import net.lax1dude.eaglercraft.v1_8.log4j.Logger;
@@ -266,7 +267,7 @@ public SoundEventAccessorComposite getRandomSoundFromCategories(SoundCategory...
266267
if (arraylist.isEmpty()) {
267268
return null;
268269
} else {
269-
return (SoundEventAccessorComposite) arraylist.get((new EaglercraftRandom()).nextInt(arraylist.size()));
270+
return (SoundEventAccessorComposite) arraylist.get(ThreadLocalRandom.current().nextInt(arraylist.size()));
270271
}
271272
}
272273

src/main/java/net/minecraft/command/CommandSpreadPlayers.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.List;
1010
import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom;
1111
import net.lax1dude.eaglercraft.v1_8.HString;
12+
import net.lax1dude.eaglercraft.v1_8.ThreadLocalRandom;
1213
import net.minecraft.block.material.Material;
1314
import net.minecraft.entity.Entity;
1415
import net.minecraft.entity.player.EntityPlayer;
@@ -115,7 +116,7 @@ public void processCommand(ICommandSender parICommandSender, String[] parArrayOf
115116

116117
private void func_110669_a(ICommandSender worldIn, List<Entity> parList, CommandSpreadPlayers.Position parPosition,
117118
double parDouble1, double parDouble2, World parWorld, boolean parFlag) throws CommandException {
118-
EaglercraftRandom random = new EaglercraftRandom();
119+
EaglercraftRandom random = ThreadLocalRandom.current();
119120
double d0 = parPosition.field_111101_a - parDouble2;
120121
double d1 = parPosition.field_111100_b - parDouble2;
121122
double d2 = parPosition.field_111101_a + parDouble2;

src/main/java/net/minecraft/command/CommandWeather.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.List;
44
import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom;
5+
import net.lax1dude.eaglercraft.v1_8.ThreadLocalRandom;
56
import net.minecraft.server.MinecraftServer;
67
import net.minecraft.util.BlockPos;
78
import net.minecraft.world.WorldServer;
@@ -55,7 +56,7 @@ public String getCommandUsage(ICommandSender var1) {
5556
*/
5657
public void processCommand(ICommandSender parICommandSender, String[] parArrayOfString) throws CommandException {
5758
if (parArrayOfString.length >= 1 && parArrayOfString.length <= 2) {
58-
int i = (300 + (new EaglercraftRandom()).nextInt(600)) * 20 * 2;
59+
int i = (300 + ThreadLocalRandom.current().nextInt(600)) * 20 * 2;
5960
if (parArrayOfString.length >= 2) {
6061
i = parseInt(parArrayOfString[1], 1, 1000000) * 20;
6162
}

src/main/java/net/minecraft/entity/EntityList.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import net.lax1dude.eaglercraft.v1_8.log4j.LogManager;
1212
import net.lax1dude.eaglercraft.v1_8.log4j.Logger;
13+
import net.lax1dude.eaglercraft.v1_8.minecraft.EntityConstructor;
1314
import net.minecraft.entity.ai.EntityMinecartMobSpawner;
1415
import net.minecraft.entity.boss.EntityDragon;
1516
import net.minecraft.entity.boss.EntityWither;

src/main/java/net/minecraft/entity/projectile/EntityFireball.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ public EntityFireball(World worldIn, double x, double y, double z, double accelX
7979
this.setLocationAndAngles(x, y, z, this.rotationYaw, this.rotationPitch);
8080
this.setPosition(x, y, z);
8181
double d0 = (double) MathHelper.sqrt_double(accelX * accelX + accelY * accelY + accelZ * accelZ);
82+
if (d0 == 0.0) {
83+
this.accelerationX = this.accelerationY = this.accelerationZ = 0.0D;
84+
return;
85+
}
8286
this.accelerationX = accelX / d0 * 0.1D;
8387
this.accelerationY = accelY / d0 * 0.1D;
8488
this.accelerationZ = accelZ / d0 * 0.1D;
@@ -95,6 +99,10 @@ public EntityFireball(World worldIn, EntityLivingBase shooter, double accelX, do
9599
accelY = accelY + this.rand.nextGaussian() * 0.4D;
96100
accelZ = accelZ + this.rand.nextGaussian() * 0.4D;
97101
double d0 = (double) MathHelper.sqrt_double(accelX * accelX + accelY * accelY + accelZ * accelZ);
102+
if (d0 == 0.0) {
103+
this.accelerationX = this.accelerationY = this.accelerationZ = 0.0D;
104+
return;
105+
}
98106
this.accelerationX = accelX / d0 * 0.1D;
99107
this.accelerationY = accelY / d0 * 0.1D;
100108
this.accelerationZ = accelZ / d0 * 0.1D;
@@ -144,7 +152,7 @@ public void onUpdate() {
144152
.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D));
145153
double d0 = 0.0D;
146154

147-
for (int i = 0; i < list.size(); ++i) {
155+
for (int i = 0, l = list.size(); i < l; ++i) {
148156
Entity entity1 = (Entity) list.get(i);
149157
if (entity1.canBeCollidedWith()
150158
&& (!entity1.isEntityEqual(this.shootingEntity) || this.ticksInAir >= 25)) {

0 commit comments

Comments
 (0)