• Log in or sign up for an account here: https://www.sythe.org/login

Stealing plugins and reselling.

BuddyLite

Grand Master

$300 USD Donor New
Joined
May 27, 2025
Sythe Gold
3,363
Messages
2,767
Age
32
Tier 1 Prizebox
https://www.sythe.org/threads/rlplu...nferno-auto-lms-account-builder-pvp-tutorial/
https://www.sythe.org/members/guccifer.1286620/

User is very clearly stealing my plugins and reselling as his own work.

Stolen
ZRLNcEh.png

https://i.imgur.com/Y82SxPN.png

Mine
https://i.imgur.com/mVpGcDZ.png

He didn't even change any of the configs around. Lazy thief. It's almost all of the plugins.
 
Last edited:
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
 
Tier 1 Prizebox
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

Please provide source code and git history, as well as the prompt that was used to achieve this.
 
Last edited:
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.
 
Tier 1 Prizebox
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.
 
Last edited:
Runescape Gamblingrunescape gambling
Back
Top