SixTwentyDOCS

Punishment Reasons

Details about how the punishment reason system works

This is an archived Mineplex-era document, kept for reference during the transition. It may contain outdated branding and is not part of the core SixTwenty documentation.
View the Java SDK reference

The Punishment Reasons System is designed to provide a comprehensive framework for moderating projects efficiently. It includes built-in reasons to address common violations and enables consistent handling of infractions without requiring additional development work.

Built-In Reasons

The following reasons are pre-configured as part of the system. Each reason is associated with a specific type of punishment, a description, severity level, unique identifier, and duration.

The built-in reasons are located in the following class: com.mineplex.studio.sdk.modules.moderation.BuiltInReason

List of Built-In Reasons

1. Teaming

  • Punishment Type: Temporary Ban (TEMP_BAN)
  • Description: Teaming with other users
  • Severity Level: 1
  • Identifier: teaming
  • Duration: 24 hours

2. Exploiting

  • Punishment Type: Temporary Ban (TEMP_BAN)
  • Description: Exploiting game mechanics
  • Severity Level: 2
  • Identifier: exploiting
  • Duration: 48 hours

3. Griefing

  • Punishment Type: Temporary Ban (TEMP_BAN)
  • Description: Griefing or destroying others' builds
  • Severity Level: 2
  • Identifier: griefing
  • Duration: 7 days

4. Unauthorized Use

  • Punishment Type: Temporary Ban (TEMP_BAN)
  • Description: Using unauthorized tools or scripts
  • Severity Level: 2
  • Identifier: unauthorized_use
  • Duration: 48 hours

5. Team Killing

  • Punishment Type: Temporary Ban (TEMP_BAN)
  • Description: Killing teammates or sabotaging team efforts
  • Severity Level: 2
  • Identifier: team_killing
  • Duration: 24 hours

6. Exploitation

  • Punishment Type: Temporary Ban (TEMP_BAN)
  • Description: Exploiting bugs or glitches
  • Severity Level: 2
  • Identifier: exploitation
  • Duration: 48 hours

7. AFK Grinding

  • Punishment Type: Temporary Ban (TEMP_BAN)
  • Description: Using automated systems for AFK grinding
  • Severity Level: 2
  • Identifier: afk_grinding
  • Duration: 7 days

8. Chat Escalation

  • Punishment Type: Temporary Mute (TEMP_MUTE)
  • Description: Escalation to Mineplex staff
  • Severity Level: 1
  • Identifier: chat_escalation
  • Duration: 7 days

9. Hacking Escalation

  • Punishment Type: Temporary Ban (TEMP_BAN)
  • Description: Escalation to Mineplex staff
  • Severity Level: 1
  • Identifier: hacking_escalation
  • Duration: 7 days

Creating Custom Reasons

This guide provides two approaches to creating custom reasons for punishments: using the PunishmentReasonImpl builder or creating an enum that extends PunishmentReason.

Which Option to Choose?

  • Option 1: Use if you need to dynamically create reasons at runtime.
  • Option 2: Use if you have a fixed set of reasons and want to avoid duplication.

Option 1: Creating instance of PunishmentReasonImpl

To create a custom punishment reason with PunishmentReasonImpl, use its builder pattern. This allows you to define specific details such as type, display reason, priority, identifier, and duration.

final PunishmentReasonImpl banReason = PunishmentReasonImpl.builder()
    .type(PunishmentType.TEMP_BAN)
    .displayReason("Excessive Toxicity")
    .priority(1)
    .reasonIdentifier("toxicity")
    .duration(Duration.ofSeconds(3600 * 24));

Option 2: Enum that extends PunishmentReason

For a more structured approach, define an enum that implements the PunishmentReason interface. This is useful when you need a predefined, reusable set of custom reasons.

@RequiredArgsConstructor
@Getter
public enum CustomReason implements PunishmentReason {
    MY_REASON(PunishmentType.TEMP_BAN, "My custom reason", 1, "custom_reason", Duration.ofHours(24));

    /**
     * The {@link PunishmentType} associated with this reason.
     */
    private final @NonNull PunishmentType type;

    /**
     * A user-friendly display string for this reason.
     */
    private final @NonNull String displayReason;

    /**
     * The priority level of this reason, which may be used to determine the severity or importance.
     */
    private final int priority;

    /**
     * A unique identifier for this reason (unique within your namespace).
     */
    private final @NonNull String reasonIdentifier;

    /**
     * The duration for which the punishment should last.
     * A duration of {@link Duration#ZERO} indicates a permanent punishment.
     */
    private final @NonNull Duration duration;
}