Stealing plugins and reselling.

Discussion in 'Report A Violation' started by BuddyLite, Oct 9, 2026 at 9:36 AM.

Stealing plugins and reselling.
  1. Unread #1 - Oct 9, 2026 at 9:36 AM
  2. BuddyLite
    Joined:
    May 27, 2025
    Posts:
    2,688
    Referrals:
    0
    Sythe Gold:
    3,284
    Tier 1 Prizebox (4)

    BuddyLite Grand Master
    $300 USD Donor New

    Stealing plugins and reselling.

    ^ Dolan likes this.
    Last edited: Oct 9, 2026 at 9:36 AM
  3. Unread #2 - Oct 9, 2026 at 10:16 AM
  4. BuddyLite
    Joined:
    May 27, 2025
    Posts:
    2,688
    Referrals:
    0
    Sythe Gold:
    3,284
    Tier 1 Prizebox (4)

    BuddyLite Grand Master
    $300 USD Donor New

    Stealing plugins and reselling.

    ^ Dolan likes this.
  5. Unread #3 - Oct 9, 2026 at 11:14 AM
  6. Guccifer
    Joined:
    Nov 11, 2019
    Posts:
    47
    Referrals:
    0
    Sythe Gold:
    42
    Vouch Thread:
    Click Here
    Discord Unique ID:
    865164206408073236
    Discord Username:
    Thenoid2

    Guccifer Member

    Stealing plugins and reselling.

    Hey, I get why you raised this. BuddyLite’s UI was definitely used as inspiration. Our dev was a bit lazy with the UI and used AI for most of it. We should’ve checked it more closely before release, so that’s on us too.

    We’ve already taken the plugins that looked similar offline. The source code itself is our own and written against our own API, but I understand the concern when the interfaces look so alike.

    I’m happy to work with you and Sythe staff and provide further proof if needed
     
  7. Unread #4 - Oct 9, 2026 at 11:19 AM
  8. BuddyLite
    Joined:
    May 27, 2025
    Posts:
    2,688
    Referrals:
    0
    Sythe Gold:
    3,284
    Tier 1 Prizebox (4)

    BuddyLite Grand Master
    $300 USD Donor New

    Stealing plugins and reselling.

    Please provide source code and git history, as well as the prompt that was used to achieve this.
     
    ^ Dolan likes this.
    Last edited: Oct 9, 2026 at 11:19 AM
  9. Unread #5 - Oct 9, 2026 at 11:56 AM
  10. Guccifer
    Joined:
    Nov 11, 2019
    Posts:
    47
    Referrals:
    0
    Sythe Gold:
    42
    Vouch Thread:
    Click Here
    Discord Unique ID:
    865164206408073236
    Discord Username:
    Thenoid2

    Guccifer Member

    Stealing plugins and reselling.

    i've taken a snippet from our thieving plugin.


    package com.rlplugins.thieving;

    import com.rlplugins.api.*;
    import com.rlplugins.api.entities.*;
    import com.rlplugins.api.inventory.*;
    import com.rlplugins.api.skills.thieving.*;
    import com.rlplugins.api.world.*;

    public final class ThievingExecutor {

    private final ThievingPlan plan;
    private final ExecutionScope execution;

    public ThievingExecutor(ThievingPlan plan) {
    this.plan = plan;

    execution = ExecutionAPI.scope("thieving")
    .cancelOnLogout()
    .cancelOnDeath()
    .cancelOnManualAction()
    .limitConcurrentActions(1);
    }

    public void start() {
    execution.repeatOnGameTick(this::advance);
    }

    public void stop() {
    execution.cancel();
    }

    private void advance() {
    if (!GameAPI.isReady() || execution.isBusy()) {
    return;
    }

    if (SkillsAPI.hasReached(plan.goal())) {
    execution.complete();
    return;
    }

    if (PlayerAPI.isStunned() || PlayerAPI.isMoving()) {
    return;
    }

    if (HealthAPI.needsFood(plan.minimumHealth())) {
    restoreHealth();
    return;
    }

    if (InventoryAPI.requiresRestock(plan.supplies())) {
    restock();
    return;
    }

    if (!PlayerAPI.isInside(plan.area())) {
    execution.submit(
    MovementAPI.travelTo(plan.area())
    .useAvailableTransports()
    .stopWhenInside()
    );
    return;
    }

    switch (plan.activity()) {
    case PICKPOCKET:
    pickpocket();
    break;

    case DISTRACTED_CITIZENS:
    stealFromDistractedCitizen();
    break;

    case STALLS:
    stealFromStall();
    break;

    case BLACKJACK:
    blackjack();
    break;

    case PYRAMID:
    plunder();
    break;

    case ROGUES_CHEST:
    searchRoguesChest();
    break;
    }
    }

    private void pickpocket() {
    Npc target = NpcAPI.search()
    .named(plan.targetName())
    .inside(plan.area())
    .offering("Pickpocket")
    .reachable()
    .preferPreviousTarget()
    .nearest();

    if (target == null) {
    return;
    }

    execution.submit(
    ThievingAPI.pickpocket(target)
    .openPouchesAtCapacity()
    .resolveCapacityFromDiaries()
    .replaceDodgyNecklace(plan.useNecklace())
    .maintainShadowVeil(plan.useShadowVeil())
    .discard(plan.discardItems())
    .limitAttempts(plan.attemptsPerCycle())
    .stopWhenStunned()
    .stopWhenInventoryFull()
    .stopWhenTargetLost()
    );
    }

    private void stealFromDistractedCitizen() {
    Npc citizen = NpcAPI.search()
    .named("Wealthy citizen")
    .inside(plan.area())
    .interactingWith("Leo")
    .offering("Pickpocket")
    .reachable()
    .nearest();

    if (citizen == null) {
    return;
    }

    execution.submit(
    ThievingAPI.pickpocket(citizen)
    .requireDistraction("Leo")
    .openPouchesBeforeAttempt()
    .waitForRecoveryAnimation()
    .repeatRotations(plan.rotations())
    .respectDistractionWindow()
    .stopWhenTargetLost()
    );
    }

    private void stealFromStall() {
    WorldObject stall = ObjectAPI.search()
    .named(plan.targetName())
    .inside(plan.area())
    .offering("Steal-from")
    .reachable()
    .nearest();

    if (stall == null) {
    return;
    }

    execution.submit(
    ThievingAPI.stealFrom(stall)
    .discardBeforeAttempt(plan.discardItems())
    .requireFreeSlots(1)
    .waitUntilAvailable()
    .confirmWithInventoryChange()
    .stopWhenTargetLost()
    );
    }

    private void blackjack() {
    if (!EquipmentAPI.hasWeaponCategory("blackjack")) {
    execution.stop("Blackjack weapon required");
    return;
    }

    Npc target = NpcAPI.search()
    .named(plan.targetName())
    .inside(plan.area())
    .offering("Knock-out")
    .reachable()
    .preferPreviousTarget()
    .nearest();

    if (target == null) {
    return;
    }

    execution.submit(
    ThievingAPI.blackjack(target)
    .knockOut()
    .awaitKnockoutConfirmation()
    .pickpocketWhileUnconscious(2)
    .retryFailedKnockout(3)
    .recoverFromCombat()
    .stopWhenStunned()
    .stopWhenTargetLost()
    .timeoutAfterTicks(25)
    );
    }

    private void plunder() {
    PyramidState pyramid = ThievingAPI.pyramid().state();

    if (!pyramid.isInside()) {
    execution.submit(
    ThievingAPI.pyramid()
    .enter()
    .rememberRejectedEntrances()
    .leaveIncorrectTombs()
    .confirmGuardianFound()
    .timeoutAfterTicks(100)
    );
    return;
    }

    if (pyramid.remainingTime() < plan.exitThreshold()) {
    execution.submit(
    ThievingAPI.pyramid()
    .leave()
    .confirmOutside()
    );
    return;
    }

    if (pyramid.hasUnpassedSpearTrap()) {
    execution.submit(
    ThievingAPI.pyramid()
    .passSpearTrap()
    .confirmRoomAccessible()
    );
    return;
    }

    if (pyramid.canAdvanceTo(plan.preferredRoom())) {
    execution.submit(
    ThievingAPI.pyramid()
    .findNextRoom()
    .ignoreKnownDeadEnds()
    .tryReachableDoors()
    .confirmRoomChanged()
    );
    return;
    }

    if (pyramid.hasUnsearchedGoldChest()) {
    execution.submit(
    ThievingAPI.pyramid()
    .searchGoldChest()
    .confirmChestChanged()
    );
    }
    }

    private void searchRoguesChest() {
    WorldObject chest = ObjectAPI.search()
    .named("Chest")
    .inside(plan.area())
    .inRegion(13117)
    .offeringAny("Search for traps", "Search")
    .reachable()
    .nearest();

    if (chest == null) {
    return;
    }

    execution.submit(
    ThievingAPI.searchChest(chest)
    .checkForTrapsFirst()
    .followObjectTransformations()
    .waitBetweenAttempts(4)
    .repeatRotations(plan.rotations())
    .stopWhenInventoryFull()
    .stopWhenOutsideRegion(13117)
    );
    }

    private void restoreHealth() {
    Item food = InventoryAPI.search()
    .edible()
    .allowedBy(plan.foodPolicy())
    .bestForMissingHealth();

    if (food == null) {
    restock();
    return;
    }

    execution.submit(
    HealthAPI.eat(food)
    .respectEatDelay()
    .confirmHealthIncreased()
    );
    }

    private void restock() {
    execution.submit(
    BankAPI.restock(plan.supplies())
    .useNearestReachableBank()
    .depositLoot()
    .preserve(plan.retainedItems())
    .withdrawMissingItems()
    .equipMissingItems()
    .confirmLoadout()
    .closeWhenFinished()
    .stopIfUnavailable()
    );
    }
    }

    This lets u compare it against ur own codebase.
    Regarding ur git request we use forgejo on our own infra there is 1 copy available see the snippet above.
    Plugins that have similar UI have been taken offline.
    The prompt is something we will research if this is retrievable.
    U added me back on discord, if more sensitive data is required we can look into what we can share.
     
  11. Unread #6 - Oct 9, 2026 at 12:04 PM
  12. BuddyLite
    Joined:
    May 27, 2025
    Posts:
    2,688
    Referrals:
    0
    Sythe Gold:
    3,284
    Tier 1 Prizebox (4)

    BuddyLite Grand Master
    $300 USD Donor New

    Stealing plugins and reselling.

    Thanks for the snippet. A few problems with it:
    1. Every option it reads (Shadow Veil, dodgy necklace, diary-based pouch capacity, wealthy-citizen rotations, rogues' chest rotations, drop list, pyramid smart enter/exit/chest with spear traps) maps one-to-one onto my ThievingBuddy config, including my "rotations" concept.
    2. It's an autonomous executor needing goal, food policy, supplies, min HP, exit threshold and preferred room. None of those exist in the UI you shipped, which you've admitted was taken from mine. Your released plugin's UI can't drive this code. So the snippet you just shared is not the plugin in question.
    3. Forgejo is git. Please export git log --date=iso for the thieving module and your com.rlplugins.api package, plus a build of the released jar so staff can compare it to the snippet.
     
    ^ Dolan likes this.
    Last edited: Oct 9, 2026 at 12:04 PM
< | >

Users viewing this thread
1 guest


 
 
Adblock breaks this site