diff --git a/src/main/java/net/minecraft/entity/Entity.java b/src/main/java/net/minecraft/entity/Entity.java
index 5847a70..a279ad2 100644
--- a/src/main/java/net/minecraft/entity/Entity.java
+++ b/src/main/java/net/minecraft/entity/Entity.java
@@ -10,7 +10,6 @@
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.Callable;
-import java.util.concurrent.ThreadLocalRandom;
import org.ultramine.server.EntityType;
import org.ultramine.server.internal.UMHooks;
@@ -165,10 +164,10 @@
this.width = 0.6F;
this.height = 1.8F;
this.nextStepDistance = 1;
- this.rand = ThreadLocalRandom.current(); // Really all access to rand replaces with TLR.current() by ThreadLocalRandomTransformer
+ this.rand = new Random();
this.fireResistance = 1;
this.firstUpdate = true;
- this.entityUniqueID = new UUID(ThreadLocalRandom.current().nextLong(), ThreadLocalRandom.current().nextLong());
+ this.entityUniqueID = UUID.randomUUID();
this.myEntitySize = Entity.EnumEntitySize.SIZE_2;
this.worldObj = p_i1582_1_;
this.setPosition(0.0D, 0.0D, 0.0D);
diff --git a/src/main/java/org/ultramine/server/asm/transformers/ThreadLocalRandomTransformer.java b/src/main/java/org/ultramine/server/asm/transformers/ThreadLocalRandomTransformer.java
deleted file mode 100644
index a18fd97..0000000
--- a/src/main/java/org/ultramine/server/asm/transformers/ThreadLocalRandomTransformer.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.ultramine.server.asm.transformers;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.FieldInsnNode;
-import org.objectweb.asm.tree.InsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.ultramine.server.UltraminePlugin;
-import org.ultramine.server.asm.UMTBatchTransformer.IUMClassTransformer;
-import org.ultramine.server.asm.UMTBatchTransformer.TransformResult;
-
-import java.util.ListIterator;
-
-/**
- * This transformer redirects field get to method invocation:
- * from {@link net.minecraft.entity.Entity#rand} to {@link java.util.concurrent.ThreadLocalRandom#current()}
- */
-public class ThreadLocalRandomTransformer implements IUMClassTransformer
-{
- private static final Logger log = LogManager.getLogger();
-
- private static final String ENTITY_TYPE_OBF = "sa";
- private static final String ENTITY_TYPE_DEOBF = "net/minecraft/entity/Entity";
- private static final String FIELD_NAME_OBF = "Z";
- private static final String FIELD_DESC = "Ljava/util/Random;";
- private static final String TLR_TYPE = "java/util/concurrent/ThreadLocalRandom";
- private static final String METHOD_NAME = "current";
- private static final String METHOD_DESC = "()Ljava/util/concurrent/ThreadLocalRandom;";
-
- @Override
- public TransformResult transform(String name, String transformedName, ClassReader classReader, ClassNode classNode)
- {
- boolean modified = false;
- for(MethodNode m : classNode.methods)
- {
- for(ListIterator it = m.instructions.iterator(); it.hasNext(); )
- {
- AbstractInsnNode insnNode = it.next();
- if(insnNode.getOpcode() == Opcodes.GETFIELD)
- {
- FieldInsnNode fi = (FieldInsnNode)insnNode;
- String fieldNameObf = UltraminePlugin.isObfEnv ? "field_70146_Z" : "rand";
- if((FIELD_NAME_OBF.equals(fi.name) || fieldNameObf.equals(fi.name)) && FIELD_DESC.equals(fi.desc) && isEntityType(classNode, fi.owner))
- {
- log.trace("Method {}.{}{}: Replacing GETFIELD {}.random with INVOKESTATIC ThreadLocalRandom.current", name, m.name, m.desc, fi.owner);
- it.remove();
- // !it.hasPrevious() is impossible here
- if(it.previous().getOpcode() == Opcodes.ALOAD)
- {
- it.remove();
- }
- else
- {
- log.trace("\t\t-- Using POP insn");
- it.next();
- it.add(new InsnNode(Opcodes.POP));
- }
- it.add(new MethodInsnNode(Opcodes.INVOKESTATIC, TLR_TYPE, METHOD_NAME, METHOD_DESC, false));
- modified = true;
- }
- }
- }
- }
-
- return modified ? TransformResult.MODIFIED : TransformResult.NOT_MODIFIED;
- }
-
- private boolean isEntityType(ClassNode classNode, String fieldOwner)
- {
- if(ENTITY_TYPE_OBF.equals(fieldOwner) || ENTITY_TYPE_DEOBF.equals(fieldOwner))
- return true;
- if(!classNode.name.equals(fieldOwner))
- return false;
-
- try
- {
- Class> parent = this.getClass().getClassLoader().loadClass(classNode.superName.replace('/', '.'));
- if(parent.getSuperclass() == null)
- return false;
- while(parent.getSuperclass() != Object.class)
- parent = parent.getSuperclass();
- return parent.getName().equals("net.minecraft.entity.Entity");
- }
- catch(ClassNotFoundException e)
- {
- return false;
- }
- }
-}
diff --git a/src/main/java/org/ultramine/server/asm/transformers/UMTransformerCollection.java b/src/main/java/org/ultramine/server/asm/transformers/UMTransformerCollection.java
index df459ec..abe143e 100644
--- a/src/main/java/org/ultramine/server/asm/transformers/UMTransformerCollection.java
+++ b/src/main/java/org/ultramine/server/asm/transformers/UMTransformerCollection.java
@@ -8,7 +8,6 @@
{
registerGlobalTransformer(new PrintStackTraceTransformer());
registerGlobalTransformer(new TrigMathTransformer());
- registerGlobalTransformer(new ThreadLocalRandomTransformer());
registerSpecialTransformer(new BlockLeavesBaseFixer(), "net.minecraft.block.BlockLeavesBase");
}
}