diff --git a/examplemods/advanced_vclip.js b/examplemods/advanced_vclip.js new file mode 100644 index 0000000..b6471c9 --- /dev/null +++ b/examplemods/advanced_vclip.js @@ -0,0 +1,79 @@ +ModAPI.meta.title("Advanced VClip Exploit"); +ModAPI.meta.description("Use .vclip to vertically phase through blocks with custom packet handling."); +ModAPI.meta.credits("By radmanplays"); + +// Custom syntax error function +function syntaxError() { + ModAPI.displayToChat("[AdvancedVClip] Syntax error: Usage is .vclip "); +} + +ModAPI.require("player"); +ModAPI.addEventListener("sendchatmessage", (ev) => { + var msg = ev.message.toLowerCase(); + if (msg.startsWith(".vclip")) { + ev.preventDefault(); + + var args = msg.split(" "); + if (args.length != 2) { + syntaxError(); + return; + } + + var offset = parseFloat(args[1]); + if (isNaN(offset)) { + syntaxError(); + return; + } + + var packetsRequired = Math.ceil(Math.abs(offset / 10)); + if (packetsRequired > 20) { + packetsRequired = 1; // Limit to avoid server kicking for too many packets + } + + var player = ModAPI.player; + var ridingEntity = player.ridingEntity; + + if (ridingEntity != null) { + // Player is riding an entity + for (var packetNumber = 0; packetNumber < (packetsRequired - 1); packetNumber++) { + // Simulate entity movement + ridingEntity.posY += offset / packetsRequired; // Move a fraction of the total offset + player.sendQueue.addToSendQueue({ + "action": "RIDING_JUMP", // Simulate a riding jump action + "entityId": ridingEntity.getEntityId(), + }); + } + + // Final move + ridingEntity.posY += offset / packetsRequired; + player.sendQueue.addToSendQueue({ + "action": "RIDING_JUMP", + "entityId": ridingEntity.getEntityId(), + }); + + } else { + // Player is not riding any entity + for (var packetNumber = 0; packetNumber < (packetsRequired - 1); packetNumber++) { + player.getNetHandler().addToSendQueue({ + "x": player.posX, + "y": player.posY, + "z": player.posZ, + "onGround": true + }); + } + + // Final move + player.getNetHandler().addToSendQueue({ + "x": player.posX, + "y": player.posY + offset, + "z": player.posZ, + "onGround": true + }); + + // Set the player’s final position + player.setPosition(player.posX, player.posY + offset, player.posZ); + } + + ModAPI.displayToChat("[AdvancedVClip] VClipped " + offset + " blocks."); + } +}); diff --git a/examplemods/vclip.js b/examplemods/vclip.js deleted file mode 100644 index 8582db3..0000000 --- a/examplemods/vclip.js +++ /dev/null @@ -1,17 +0,0 @@ -ModAPI.meta.title("Simple VClip Exploit"); -ModAPI.meta.description("Use .vclip to vertically phase through blocks."); -ModAPI.meta.credits("By ZXMushroom63"); -ModAPI.require("player"); -ModAPI.addEventListener("sendchatmessage", (ev) => { - var msg = ev.message.toLowerCase(); - if (msg.startsWith(".vclip")) { - ev.preventDefault(); - var yOffset = 1; - if (msg.split(" ")[1]) { - yOffset = parseFloat(msg.split(" ")[1]) || 0; - } - ModAPI.player.setPosition(ModAPI.player.posX, ModAPI.player.posY - + yOffset, ModAPI.player.posZ); - ModAPI.displayToChat("[SimpleVClip] VClipped " + yOffset + " blocks."); - } -}); \ No newline at end of file