Ladysnake / Impersonate

Impersonate: to assume or act the character of
https://ladysnake.github.io/wiki/impersonate.html
GNU Lesser General Public License v3.0
9 stars 8 forks source link
fabricmc hacktoberfest

The Ladysnake maven is moving!

As Jfrog is ending their free service for OSS projects, we have to move the maven repository before the 1st of July 2023. See below for the new maven instructions - you will have to update your buildscripts with the new URL before the cutoff date to avoid dependency resolution failures.

Impersonate

Curseforge

A library handling player impersonation. Can also be used as a standalone mod, through the /impersonate command.

Most features work serverside, so you can use this mod on a vanilla-compatible server. Clientside installation is however still recommended for a smoother experience.

Overview

Impersonate allows players to take on the name and appearance of other players. When impersonating someone, a player will:

They will however not fool the impersonated player's pets, if any.

To avoid moderation chaos, server logs will always display the actual player's name, alongside their fake identity. Server operators will have ongoing impersonations revealed in the same way.

Commands

Impersonate adds the /impersonate command, allowing server operators and mapmakers to interact with the API through commands.

Permissions

If you have LuckPerms installed, the above commands can be used by players with the impersonate.command.disguise permission. If you only grant impersonate.command.disguise.self, players will only be able to use the commands on themselves.

Gamerules

Adding Impersonate to your project

You can add the library by inserting the following in your build.gradle :

Note 1: since MC 1.17 builds, the Impersonate dependency must be lowercase. Note 2: since MC 1.20.1 builds (1.14.0), the maven group changed from io.github.ladysnake to org.ladysnake.
Note 3: since June 2023, the maven url changed from ladysnake.jfrog.io/artifactory/mods to maven.ladysnake.org/releases.

repositories {
    maven { 
        name = "Ladysnake Mods"
        url = "https://maven.ladysnake.org/releases"
        content {
            includeGroup 'io.github.ladysnake'
            includeGroup 'org.ladysnake'
            includeGroupByRegex 'dev\\.onyxstudios\\..*'
        }
    }
    maven {
        name = "Nexus Repository Manager"
        url = 'https://oss.sonatype.org/content/repositories/snapshots'
    }
}

dependencies {
    modImplementation "org.ladysnake:impersonate:${impersonate_version}"
    include "org.ladysnake:impersonate:${impersonate_version}"
    // Impersonate dependencies
    include "me.lucko:fabric-permissions-api:${fpa_version}"
    include "dev.onyxstudios.cardinal-components-api:cardinal-components-base:${cca_version}"
    include "dev.onyxstudios.cardinal-components-api:cardinal-components-entity:${cca_version}"
}

You can then add the library version to your gradle.propertiesfile:

# Impersonate
impersonate_version = 1.x.y
# Fabric Permissions API
fpa_version = 0.1-SNAPSHOT
# Cardinal Components
cca_version = 2.x.y

You can find the current version of Impersonate in the releases tab of the repository on Github, and the latest CCA version in the appropriate repository.

Using Impersonate

You can find examples in the Test Mod and in the Impersonate Command.

public static final Identifier IMPERSONATION_KEY = new Identifier("mymod", "impersonitem");

public boolean useOnEntity(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand) {
    if (entity instanceof ServerPlayerEntity) {
        Impersonator.get(user).impersonate(IMPERSONATION_KEY, ((PlayerEntity) entity).getGameProfile());
    } else {
        Impersonator.get(user).stopImpersonation(IMPERSONATION_KEY);
    }
    return super.useOnEntity(stack, user, entity, hand);
}