Properly wrap non vanilla argument types (ArclightPowered/lightfall#7)
This commit is contained in:
parent
840d2bb33e
commit
80b90887a5
|
@ -11,8 +11,14 @@ import org.spongepowered.asm.mixin.Final;
|
|||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Overwrite;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@Mixin(ArgumentTypes.class)
|
||||
public abstract class ArgumentTypesMixin {
|
||||
|
@ -20,8 +26,26 @@ public abstract class ArgumentTypesMixin {
|
|||
// @formatter:off
|
||||
@Shadow @Final private static Logger LOGGER;
|
||||
@Shadow @Nullable private static ArgumentTypes.Entry<?> get(ArgumentType<?> type) { return null; }
|
||||
@Shadow @Final private static Map<ResourceLocation, ArgumentTypes.Entry<?>> ID_TYPE_MAP;
|
||||
// @formatter:on
|
||||
|
||||
private static final Set<ResourceLocation> INTERNAL_TYPES = new HashSet<>();
|
||||
|
||||
@Inject(method = "registerArgumentTypes", at = @At("HEAD"))
|
||||
private static void arclight$beginRegister(CallbackInfo ci) {
|
||||
INTERNAL_TYPES.addAll(ID_TYPE_MAP.keySet());
|
||||
}
|
||||
|
||||
@Inject(method = "registerArgumentTypes", at = @At("RETURN"))
|
||||
private static void arclight$endRegister(CallbackInfo ci) {
|
||||
HashSet<ResourceLocation> set = new HashSet<>(ID_TYPE_MAP.keySet());
|
||||
set.removeAll(INTERNAL_TYPES);
|
||||
INTERNAL_TYPES.clear();
|
||||
INTERNAL_TYPES.addAll(set);
|
||||
INTERNAL_TYPES.add(new ResourceLocation("forge", "enum"));
|
||||
INTERNAL_TYPES.add(new ResourceLocation("forge", "modid"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @author IzzelAliz
|
||||
* @reason
|
||||
|
@ -33,8 +57,7 @@ public abstract class ArgumentTypesMixin {
|
|||
LOGGER.error("Could not serialize {} ({}) - will not be sent to client!", type, type.getClass());
|
||||
buffer.writeResourceLocation(new ResourceLocation(""));
|
||||
} else {
|
||||
String namespace = entry.id.getNamespace();
|
||||
boolean wrap = SpigotConfig.bungee && !(namespace.equals("minecraft") || namespace.equals("forge") || namespace.equals("brigadier"));
|
||||
boolean wrap = SpigotConfig.bungee && !INTERNAL_TYPES.contains(entry.id);
|
||||
if (wrap) {
|
||||
buffer.writeString("arclight:wrapped");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user