Add config option for turning off login payloads

This commit is contained in:
libraryaddict 2020-06-13 22:34:13 +12:00
parent 32bab36731
commit aa913b48e6
No known key found for this signature in database
GPG Key ID: 052E4FBCD257AEA4
4 changed files with 39 additions and 23 deletions

@ -247,6 +247,9 @@ public class DisguiseConfig {
@Getter @Getter
@Setter @Setter
private static boolean randomDisguises; private static boolean randomDisguises;
@Getter
@Setter
private static boolean loginPayloadPackets;
public static boolean isArmorstandsName() { public static boolean isArmorstandsName() {
return getPlayerNameType() == PlayerNameType.ARMORSTANDS; return getPlayerNameType() == PlayerNameType.ARMORSTANDS;
@ -632,6 +635,7 @@ public class DisguiseConfig {
setMaxClonedDisguises(config.getInt("DisguiseCloneSize")); setMaxClonedDisguises(config.getInt("DisguiseCloneSize"));
setMaxHealthDeterminedByDisguisedEntity(config.getBoolean("MaxHealthDeterminedByEntity")); setMaxHealthDeterminedByDisguisedEntity(config.getBoolean("MaxHealthDeterminedByEntity"));
setMetaPacketsEnabled(config.getBoolean("PacketsEnabled.Metadata")); setMetaPacketsEnabled(config.getBoolean("PacketsEnabled.Metadata"));
setLoginPayloadPackets(config.getBoolean("PacketsEnabled.LoginPayload"));
setMiscDisguisesForLivingEnabled(config.getBoolean("MiscDisguisesForLiving")); setMiscDisguisesForLivingEnabled(config.getBoolean("MiscDisguisesForLiving"));
setModifyBoundingBox(config.getBoolean("ModifyBoundingBox")); setModifyBoundingBox(config.getBoolean("ModifyBoundingBox"));
setModifyCollisions(config.getBoolean("Scoreboard.Collisions")); setModifyCollisions(config.getBoolean("Scoreboard.Collisions"));

@ -18,27 +18,6 @@ import java.util.ArrayList;
public class ModdedListener implements Listener { public class ModdedListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onLogin(PlayerLoginEvent event) { public void onLogin(PlayerLoginEvent event) {
Player player = event.getPlayer(); ModdedManager.doMods(event.getPlayer());
ArrayList<String> mods = ModdedManager.getForgeMods().getIfPresent(player.getName());
player.setMetadata("forge_mods", new FixedMetadataValue(LibsDisguises.getInstance(), mods));
for (ModdedEntity e : ModdedManager.getEntities().values()) {
if (e.getMod() == null) {
continue;
}
if (mods.contains(e.getMod().toLowerCase())) {
continue;
}
if (e.getRequired() == null) {
continue;
}
player.kickPlayer(e.getRequired());
break;
}
} }
} }

@ -5,6 +5,7 @@ import com.comphenix.protocol.utility.StreamSerializer;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import lombok.Getter; import lombok.Getter;
import me.libraryaddict.disguise.DisguiseConfig;
import me.libraryaddict.disguise.LibsDisguises; import me.libraryaddict.disguise.LibsDisguises;
import me.libraryaddict.disguise.disguisetypes.DisguiseType; import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import me.libraryaddict.disguise.utilities.listeners.ModdedListener; import me.libraryaddict.disguise.utilities.listeners.ModdedListener;
@ -13,6 +14,8 @@ import me.libraryaddict.disguise.utilities.parser.DisguisePerm;
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
import org.bukkit.metadata.FixedMetadataValue;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
@ -41,11 +44,15 @@ public class ModdedManager {
return; return;
} }
if (fmlRegistries == null) { if (fmlRegistries == null && DisguiseConfig.isLoginPayloadPackets()) {
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketListenerModdedClient()); ProtocolLibrary.getProtocolManager().addPacketListener(new PacketListenerModdedClient());
Bukkit.getPluginManager().registerEvents(new ModdedListener(), LibsDisguises.getInstance()); Bukkit.getPluginManager().registerEvents(new ModdedListener(), LibsDisguises.getInstance());
} }
createPayloads(channels);
}
private void createPayloads(ArrayList<String> channels) {
ByteArrayOutputStream stream = new ByteArrayOutputStream(); ByteArrayOutputStream stream = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(stream); DataOutputStream output = new DataOutputStream(stream);
@ -163,6 +170,29 @@ public class ModdedManager {
return null; return null;
} }
public static void doMods(Player player) {
ArrayList<String> mods = getForgeMods().getIfPresent(player.getName());
player.setMetadata("forge_mods", new FixedMetadataValue(LibsDisguises.getInstance(), mods));
for (ModdedEntity e : ModdedManager.getEntities().values()) {
if (e.getMod() == null) {
continue;
}
if (mods.contains(e.getMod().toLowerCase())) {
continue;
}
if (e.getRequired() == null) {
continue;
}
player.kickPlayer(e.getRequired());
break;
}
}
public static ArrayList<DisguisePerm> getDisguiseTypes() { public static ArrayList<DisguisePerm> getDisguiseTypes() {
ArrayList<DisguisePerm> perms = new ArrayList<>(); ArrayList<DisguisePerm> perms = new ArrayList<>();

@ -319,6 +319,9 @@ PacketsEnabled:
Riding: true Riding: true
# When disguised as a wither skull, it sends a look packet every tick so that the wither skull is facing the right way. # When disguised as a wither skull, it sends a look packet every tick so that the wither skull is facing the right way.
WitherSkull: true WitherSkull: true
# This is only used when using a modded disguises thingy, check disguises.yml for more info
# This is used as a hack to bypass bungeecord issues
LoginPayload: true
# Added to support a Chinese Minecraft Server which uses their own skin server unless the UUID is not version 4. # Added to support a Chinese Minecraft Server which uses their own skin server unless the UUID is not version 4.
# Changing this from 4 to say, 3. Means their server will fetch skins from Mojang instead. # Changing this from 4 to say, 3. Means their server will fetch skins from Mojang instead.