Handle 1.3 correctly.
Dieser Commit ist enthalten in:
Ursprung
22f2f45d1e
Commit
9efb85e7c3
@ -112,10 +112,13 @@ public class NetworkServerInjector extends PlayerInjector {
|
|||||||
CollectionGenerator.INSTANCE);
|
CollectionGenerator.INSTANCE);
|
||||||
|
|
||||||
Object proxyObject = serverInstances.forEnhancer(ex).getDefault(serverClass);
|
Object proxyObject = serverInstances.forEnhancer(ex).getDefault(serverClass);
|
||||||
|
|
||||||
// Inject it now
|
// Inject it now
|
||||||
if (proxyObject != null) {
|
if (proxyObject != null) {
|
||||||
serverHandlerRef.setValue(proxyObject);
|
serverHandlerRef.setValue(proxyObject);
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"Cannot hook player: Unable to find a valid constructor for the NetServerHandler object.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,21 +132,26 @@ abstract class PlayerInjector {
|
|||||||
// What a mess
|
// What a mess
|
||||||
try {
|
try {
|
||||||
if (netHandlerField == null)
|
if (netHandlerField == null)
|
||||||
netHandlerField = FuzzyReflection.fromClass(networkManagerField.getType(), true).
|
netHandlerField = FuzzyReflection.fromClass(networkManager.getClass(), true).
|
||||||
getFieldByType("net\\.minecraft\\.NetHandler");
|
getFieldByType("net\\.minecraft\\.NetHandler");
|
||||||
} catch (RuntimeException e1) {
|
} catch (RuntimeException e1) {
|
||||||
|
// Swallow it
|
||||||
|
}
|
||||||
|
|
||||||
|
// Second attempt
|
||||||
|
if (netHandlerField == null) {
|
||||||
try {
|
try {
|
||||||
// Well, that sucks. Try just Minecraft objects then.
|
// Well, that sucks. Try just Minecraft objects then.
|
||||||
netHandlerField = FuzzyReflection.fromClass(networkManagerField.getType(), true).
|
netHandlerField = FuzzyReflection.fromClass(networkManager.getClass(), true).
|
||||||
getFieldByType(FuzzyReflection.MINECRAFT_OBJECT);
|
getFieldByType(FuzzyReflection.MINECRAFT_OBJECT);
|
||||||
|
|
||||||
} catch (RuntimeException e2) {
|
} catch (RuntimeException e2) {
|
||||||
return new IllegalAccessException("Cannot locate net handler. " + e2.getMessage());
|
throw new IllegalAccessException("Cannot locate net handler. " + e2.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the handler
|
// Get the handler
|
||||||
if (netHandler != null)
|
if (netHandler == null)
|
||||||
netHandler = FieldUtils.readField(netHandlerField, networkManager, true);
|
netHandler = FieldUtils.readField(netHandlerField, networkManager, true);
|
||||||
return netHandler;
|
return netHandler;
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,6 @@ package com.comphenix.protocol.reflect.instances;
|
|||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import javax.print.CancelablePrintJob;
|
|
||||||
|
|
||||||
import net.sf.cglib.proxy.Enhancer;
|
import net.sf.cglib.proxy.Enhancer;
|
||||||
|
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
|
@ -40,8 +40,9 @@ public class ExistingGenerator implements InstanceProvider {
|
|||||||
try {
|
try {
|
||||||
Object value = FieldUtils.readField(field, object, true);
|
Object value = FieldUtils.readField(field, object, true);
|
||||||
|
|
||||||
|
// Use the type of the field, not the object itself
|
||||||
if (value != null)
|
if (value != null)
|
||||||
generator.addObject(value);
|
generator.addObject(field.getType(), value);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// Yes, swallow it. No, really.
|
// Yes, swallow it. No, really.
|
||||||
@ -72,6 +73,11 @@ public class ExistingGenerator implements InstanceProvider {
|
|||||||
existingValues.put(value.getClass(), value);
|
existingValues.put(value.getClass(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addObject(Class<?> type, Object value) {
|
||||||
|
existingValues.put(type, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object create(@Nullable Class<?> type) {
|
public Object create(@Nullable Class<?> type) {
|
||||||
|
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren