diff --git a/examplemods/vclip.js b/examplemods/vclip.js index 8582db3..28fbbd4 100644 --- a/examplemods/vclip.js +++ b/examplemods/vclip.js @@ -1,17 +1,79 @@ -ModAPI.meta.title("Simple VClip Exploit"); -ModAPI.meta.description("Use .vclip to vertically phase through blocks."); +ModAPI.meta.title("Advanced VClip Exploit"); +ModAPI.meta.description("Use .vclip to vertically phase through blocks with custom packet handling."); ModAPI.meta.credits("By ZXMushroom63"); + +// 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 yOffset = 1; - if (msg.split(" ")[1]) { - yOffset = parseFloat(msg.split(" ")[1]) || 0; + + var args = msg.split(" "); + if (args.length != 2) { + syntaxError(); + return; } - ModAPI.player.setPosition(ModAPI.player.posX, ModAPI.player.posY - + yOffset, ModAPI.player.posZ); - ModAPI.displayToChat("[SimpleVClip] VClipped " + yOffset + " blocks."); + + 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."); } -}); \ No newline at end of file +});