Skip to content

Commit

Permalink
1.2.7 ForceOP Exploit added...
Browse files Browse the repository at this point in the history
***New Discord Server for Updates and Friends:*** https://discord.gg/Az3G3p4ZCj
***ForceOPSign Module Added!***
- Added the ForceOPSign module which allows you to make signs in Creative mode that are pre-loaded with operator level commands. 
To use the ForceOPSign module, configure the options to make it execute the commands you want (default is /op yourname) then give the sign to an operator who is also in creative mode and have them place then right click on the sign.
The signs that ForceOPSign creates appear to be blank when placed, so the person may not know there is anything wrong with them.
- The commands that are executed by the ForceOPSign do not always appear in server chat response of operator commands. The operator will have no idea they just made you an operator when that command executes from the sign.
- There is an option to use the last three lines on the sign for a set of commands to auto grief a server. (These use /execute commands which only work in Minecraft 1.13 or higher)
- There is also an option to have the sign run a command to disable a server and have it crash over and over again. 

**OPERATORS CLICKING SIGNS CAN ONLY EXECUTE THE /OP COMMAND ON MINECRAFT VERSIONS GREATER THAN v1.12.2 and only if the server is PAPER**
(Paper versions grant atleast command permission level 3 on signs. Thats why we can Force OP on all Paper versions including the most recent.)

**IN VANILLA SERVERS AND PAPER VERSIONS LESS THAN OR EQUAL TO v1.12.2 THEN ANYONE CAN ONLY EXECUTE PERMISSION LEVEL 2 COMMANDS WHEN CLICKING SIGNS**
This is still really good and fun. You can run permission level two commands.
**Any Player** can click these signs after the OP places and it **executes** the commands. (Operators could have fun trolling their players with this!)
This includes /fill commands and even /setblock which could allow you to insert a malicious command block into the server in a spot that the admin does not know about.
Gamerule commands are also permission level 2 meaning that you could get an admin to change any gamerule you want without them knowing, just use "/gamerule sendCommandFeedback false" as a command before the rest.


Demonstration video here:
https://www.youtube.com/watch?v=YICXSxkvBfQ

More details and a standalone version of the mod is here:
https://github.com/etianl/ForceOPSign

I also made a build of Meteor Client for 1.20.4 from the latest source available for that Minecraft version. This is required for Trouser-Streak for 1.20.4!
https://github.com/etianl/meteor-client-1.20.4/releases/tag/0.5.6


**OTHER UPDATES**
- Added a Render Distance option to **Hole/Tunnel/StairsESP** which removes the rendered boxes that are outside of the render distance that you define. This fixes the lag due to the boxes staying loaded forever
- Added a Command Delay option to the **AutoCommand** module. This adds a delay between listed commands. 
- Removed the FULL AUTO option from **AutoCommand** and replaced it with an option called "Loop Commands" which decides whether or not to loop the defined commands.
- Fixed BoatKill not killing things for some reason.
- Updated the **.world command** to show your permission level for commands.
  • Loading branch information
etianl authored Oct 13, 2024
1 parent 4337259 commit b68d2e1
Show file tree
Hide file tree
Showing 10 changed files with 487 additions and 99 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<p><strong>Official Griefing Utilities of <a href="https://www.youtube.com/@mountainsoflavainc.6913">Mountains of Lava Inc.</a></strong></p>
<p><strong>Trouser-Streak</strong> is a compilation of modules for <strong><a href="https://meteorclient.com/">Meteor Client</a></strong>.</p>
<p><strong><em>Updated to the latest version and optimized for maximum grief!</em></strong></p>
<p>I frequently release updates, please check back here often :)</p>
<p><strong>Discord server for updates and help: <a href="https://discord.gg/Az3G3p4ZCj">https://discord.gg/Az3G3p4ZCj</a></strong></p>
<img src="src/main/resources/assets/icon/icon.png" alt="Trouser-Streak Logo" width="28%"/>
</div>

Expand Down Expand Up @@ -89,6 +89,7 @@ In no particular order
- **CrashCommand:** Crashes other players out using a nasty particle effect. Requires OP status. Credits to [aaaasdfghjkllll](https://github.com/aaaasdfghjkllll)
- **ExplosionAura:** Spawns creepers at your position as you move that explode instantly. Like a bigger, more laggy Nuker module for creative mode. The use of the module Velocity is recommended to avoid being thrown around. (Credits to etianl :D)
- **FlightAntikick:** Moves you down on a tick-based timer. Added in to substitute the lack of a "Normal" mode antikick for velocity flight in MeteorClient (not a great antikick it's just something). Bind it to the same key as Flight. (Credits to etianl :D)
- **ForceOPSign:** Create malicious signs in creative mode that can execute commands when clicked. Requires creative mode for you to make them, and requires you to give it to an operator and have them place and click it while they are also in creative mode. The signs placed appear blank and commands executed may not appear in the server chat response for commands. There is a preset option for destroying the server in one click. Credits to CrushedPixel for their first implementation of a ForceOP sign module https://www.youtube.com/watch?v=KofDNaPZWfg, and to etianl for writing this implementation.
- **GarbageCleanerCommand:** Accessable by typing ".cleanram". It cleans the RAM of useless junk and may be very handy for improving performance after chunk tracing for a while and can be used to clear other lag. (credits to [ogmur](https://www.youtube.com/@Ogmur) for writing this)
- **HandOfGod:** Runs the "/fill" command on the world around you or around everyone else in different ways as you move around, and as you click. Destroy and modify the world with ease! Operator status required. (Credits to etianl :D)
- **Hole/Tunnel/StairsESP:** Detects 1x1 holes going straight down, horizontal tunnels of any height, and staircase tunnels. It by default ignores passable blocks such as torches or water but there is an option to have it only detect Air for holes and tunnels. (Thank you to Meteor Client for some code from TunnelESP, and credits to etianl for this version of it)
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ yarn_mappings=1.21.1+build.3
loader_version=0.15.11

# Mod Properties
mod_version=1.2.6-1.21.1
mod_version=1.2.7-1.21.1
maven_group=pwn.noobs
archives_base_name=1trouser-streak

Expand Down
1 change: 1 addition & 0 deletions src/main/java/pwn/noobs/trouserstreak/Trouser.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public void onInitialize() {
Modules.get().add(new OPplayerTPmodule());

//Modules.get().add(new -----> Create Illegal things with Creative mode! <-----());
Modules.get().add(new ForceOPSign());
Modules.get().add(new NbtEditor());
Modules.get().add(new AirstrikePlus());
Modules.get().add(new BoomPlus());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ public void build(LiteralArgumentBuilder<CommandSource> builder) {
ChatUtils.sendMsg(Text.of("East World Border X: "+(int) mc.world.getWorldBorder().getBoundEast()+", West World Border X: "+(int) mc.world.getWorldBorder().getBoundWest()+", South World Border Z: "+(int) mc.world.getWorldBorder().getBoundSouth()+", North World Border Z: "+(int) mc.world.getWorldBorder().getBoundNorth()));
ChatUtils.sendMsg(Text.of("WorldSpawn Location: x"+mc.world.getLevelProperties().getSpawnPos().getX()+" y"+mc.world.getLevelProperties().getSpawnPos().getY()+" z"+mc.world.getLevelProperties().getSpawnPos().getZ()));
ChatUtils.sendMsg(Text.of("Difficulty: "+mc.world.getDifficulty().toString()));
ChatUtils.sendMsg(Text.of("Permission Level: "+mc.player.getPermissionLevel()));
ChatUtils.sendMsg(Text.of("Simulation Distance (chunks): "+mc.world.getSimulationDistance()));
ChatUtils.sendMsg(Text.of("Day Count: "+Math.floor(mc.world.getTime()/24000)));
ChatUtils.sendMsg(Text.of("DO_DAYLIGHT_CYCLE: "+mc.world.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE)));
Expand Down Expand Up @@ -148,6 +149,7 @@ public void build(LiteralArgumentBuilder<CommandSource> builder) {
ChatUtils.sendMsg(Text.of("East World Border X: "+(int) mc.world.getWorldBorder().getBoundEast()+", West World Border X: "+(int) mc.world.getWorldBorder().getBoundWest()+", South World Border Z: "+(int) mc.world.getWorldBorder().getBoundSouth()+", North World Border Z: "+(int) mc.world.getWorldBorder().getBoundNorth()));
ChatUtils.sendMsg(Text.of("WorldSpawn Location: x"+mc.world.getLevelProperties().getSpawnPos().getX()+" y"+mc.world.getLevelProperties().getSpawnPos().getY()+" z"+mc.world.getLevelProperties().getSpawnPos().getZ()));
ChatUtils.sendMsg(Text.of("Difficulty: "+mc.world.getDifficulty().toString()));
ChatUtils.sendMsg(Text.of("Permission Level: "+mc.player.getPermissionLevel()));
ChatUtils.sendMsg(Text.of("Simulation Distance (chunks): "+mc.world.getSimulationDistance()));
ChatUtils.sendMsg(Text.of("Day Count: "+Math.floor(mc.world.getTime()/24000)));
ChatUtils.sendMsg(Text.of("DO_DAYLIGHT_CYCLE: "+mc.world.getGameRules().getBoolean(GameRules.DO_DAYLIGHT_CYCLE)));
Expand Down Expand Up @@ -183,6 +185,8 @@ public void build(LiteralArgumentBuilder<CommandSource> builder) {
writer.write("\r\n"); // write new line
writer.write("Difficulty: "+mc.world.getDifficulty().toString());
writer.write("\r\n"); // write new line
writer.write("Permission Level: "+mc.player.getPermissionLevel());
writer.write("\r\n"); // write new line
writer.write("Simulation Distance (chunks): "+mc.world.getSimulationDistance());
writer.write("\r\n"); // write new line
writer.write("Day Count: "+Math.floor(mc.world.getTime()/24000));
Expand Down
188 changes: 98 additions & 90 deletions src/main/java/pwn/noobs/trouserstreak/modules/AutoCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
import pwn.noobs.trouserstreak.Trouser;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class AutoCommand extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup();
Expand All @@ -20,7 +22,20 @@ public class AutoCommand extends Module {
.defaultValue(Mode.Manual1)
.build()
);

public final Setting<Boolean> auto = sgGeneral.add(new BoolSetting.Builder()
.name("Loop Commands")
.description("Loops the commands executed.")
.defaultValue(false)
.build()
);
private final Setting<Integer> commandDelay = sgGeneral.add(new IntSetting.Builder()
.name("command-delay")
.description("Tick delay between each command")
.defaultValue(1)
.min(0)
.sliderMax(100)
.build()
);
private final Setting<List<String>> commands1 = sgGeneral.add(new StringListSetting.Builder()
.name("commands")
.description("List of commands to be sent")
Expand Down Expand Up @@ -74,23 +89,10 @@ public class AutoCommand extends Module {
.defaultValue(false)
.build()
);
public final Setting<Boolean> auto = sgGeneral.add(new BoolSetting.Builder()
.name("FULLAUTO")
.description("FULL AUTO BABY!")
.defaultValue(false)
.build()
);
public final Setting<Integer> atickdelay = sgGeneral.add(new IntSetting.Builder()
.name("FULLAUTOTickDelay")
.description("Tick Delay for FULLAUTO option.")
.defaultValue(0)
.min(0)
.sliderMax(20)
.visible(() -> auto.get())
.build()
);
private int ticks = 0;
private boolean sent;

private int tickCounter = 0;
private boolean sent = false;
private Queue<String> commandQueue = new LinkedList<>();

public AutoCommand() {
super(Trouser.Main, "auto-command", "Automatically runs commands when player has/gets operator access");
Expand All @@ -99,94 +101,100 @@ public AutoCommand() {
@Override
public void onActivate() {
sent = false;
commandQueue = new LinkedList<>();
}

@EventHandler
private void onGameJoin(GameJoinedEvent event) {
sent = false;
commandQueue = new LinkedList<>();
}

@EventHandler
private void onTick(TickEvent.Post event) {
if (!mc.player.hasPermissionLevel(permissionLevel.get())) return;

if(sent && !auto.get()) return;

if(mc.player.hasPermissionLevel(permissionLevel.get()) && !auto.get()) {
if(mode.get() == Mode.Manual1) for(String command : commands1.get()) {
if (command.length()<=256){
ChatUtils.sendPlayerMsg(command);
}
else {
int characterstodelete = command.length()-256;
error("This command is too long ("+command+"). Shorten it by "+characterstodelete+" characters.");
}
}
if(mode.get() == Mode.Manual2) for(String command : commands2.get()) {
if (command.length()<=256){
ChatUtils.sendPlayerMsg(command);
}
else {
int characterstodelete = command.length()-256;
error("This command is too long ("+command+"). Shorten it by "+characterstodelete+" characters.");
}
}
if(mode.get() == Mode.Manual3) for(String command : commands3.get()) {
if (command.length()<=256){
ChatUtils.sendPlayerMsg(command);
}
else {
int characterstodelete = command.length()-256;
error("This command is too long ("+command+"). Shorten it by "+characterstodelete+" characters.");
}
}
if(mode.get() == Mode.Macro) {
try {
Macros.get().get(macroName.get()).onAction();
} catch (NullPointerException ex) {
error("Invalid macro! Is your macro name set correctly?");
}
if (commandQueue.isEmpty()) {
if (sent && !auto.get()) {
if (disableOnFinish.get()) toggle();
return;
}

if (commandDelay.get() != 0) RunCommands();
else ZeroTickRunCommands();
sent = true;
if(disableOnFinish.get()) toggle();
} else if(mc.player.hasPermissionLevel(permissionLevel.get()) && auto.get()){
if (ticks<=atickdelay.get()){
ticks++;
} else if (ticks>atickdelay.get()){
if(mode.get() == Mode.Manual1) for(String command : commands1.get()) {
if (command.length()<=256){
ChatUtils.sendPlayerMsg(command);
}
else {
int characterstodelete = command.length()-256;
error("This command is too long ("+command+"). Shorten it by "+characterstodelete+" characters.");
}
}
if(mode.get() == Mode.Manual2) for(String command : commands2.get()) {
if (command.length()<=256){
ChatUtils.sendPlayerMsg(command);
}
else {
int characterstodelete = command.length()-256;
error("This command is too long ("+command+"). Shorten it by "+characterstodelete+" characters.");
}
}
if(mode.get() == Mode.Manual3) for(String command : commands3.get()) {
if (command.length()<=256){
ChatUtils.sendPlayerMsg(command);
}
else {
int characterstodelete = command.length()-256;
error("This command is too long ("+command+"). Shorten it by "+characterstodelete+" characters.");
}
}
if(mode.get() == Mode.Macro) {
} else {
tickCounter++;
if (tickCounter >= commandDelay.get()) {
String command = commandQueue.poll();
if (command.equals("EXECUTE_MACRO")) {
try {
Macros.get().get(macroName.get()).onAction();
} catch (NullPointerException ex) {
error("Invalid macro! Is your macro name set correctly?");
}
} else {
ChatUtils.sendPlayerMsg(command);
}
tickCounter = 0;
}
}

if (auto.get() && commandQueue.isEmpty()) {
sent = false;
}
}
private void ZeroTickRunCommands() {
if(mode.get() == Mode.Manual1) for(String command : commands1.get()) {
if (command.length()<=256){
ChatUtils.sendPlayerMsg(command);
}
else {
int characterstodelete = command.length()-256;
error("This command is too long ("+command+"). Shorten it by "+characterstodelete+" characters.");
}
}
if(mode.get() == Mode.Manual2) for(String command : commands2.get()) {
if (command.length()<=256){
ChatUtils.sendPlayerMsg(command);
}
else {
int characterstodelete = command.length()-256;
error("This command is too long ("+command+"). Shorten it by "+characterstodelete+" characters.");
}
}
if(mode.get() == Mode.Manual3) for(String command : commands3.get()) {
if (command.length()<=256){
ChatUtils.sendPlayerMsg(command);
}
else {
int characterstodelete = command.length()-256;
error("This command is too long ("+command+"). Shorten it by "+characterstodelete+" characters.");
}
}
if(mode.get() == Mode.Macro) {
try {
Macros.get().get(macroName.get()).onAction();
} catch (NullPointerException ex) {
error("Invalid macro! Is your macro name set correctly?");
}
}
}
private void RunCommands() {
if (mode.get() == Mode.Macro) {
commandQueue.add("EXECUTE_MACRO");
} else {
List<String> commandList;
if (mode.get() == Mode.Manual1) commandList = commands1.get();
else if (mode.get() == Mode.Manual2) commandList = commands2.get();
else if (mode.get() == Mode.Manual3) commandList = commands3.get();
else return;

for (String command : commandList) {
if (command.length() <= 256) {
commandQueue.add(command);
} else {
int charactersToDelete = command.length() - 256;
error("This command is too long (" + command + "). Shorten it by " + charactersToDelete + " characters.");
}
ticks=0;
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ public void onActivate() {
moveTo(oPos.add(0,0.0001,0));

mc.player.networkHandler.sendPacket(new PlayerInputC2SPacket(0,0,false,true));
mc.player.dismountVehicle();
toggle();
}

Expand Down
Loading

0 comments on commit b68d2e1

Please sign in to comment.