-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathNPCCommandExploitGenerator.py
76 lines (72 loc) · 4.26 KB
/
NPCCommandExploitGenerator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from tkinter import Tk
def generateButton(command, button_name, text=None):
command = command.replace(' ', ' ')
text = command
if command[0] != '/':
command = '/' + command
if text == None:
text = command
button = '{"button_name" : "'+button_name+'","data" : [{"cmd_line" : "'+command+'","cmd_ver": 12}],"mode" : 0,"text" : "'+text+'","type" : 1}'
return button
def generateActions(buttons):
actions = ''
for i in buttons:
actions = actions + i + ','
actions = actions[:-1]
actions = 'Actions:"[' + actions + ']"'
return actions
def generate(commands, button_names, name='', interactText='', texts=None):
if texts == None:
texts = []
for i in commands:
texts.append(None)
if len(commands) != len(button_names) or len(commands) != len(texts):
raise Exception('COMMAND AMOUNT NOT EQUAL TO BUTTON NAME AMOUNT')
j = len(commands)
i = 0
buttons = []
while i < j:
buttons.append(generateButton(commands[i], button_names[i], texts[i]))
i = i + 1
actions = generateActions(buttons)
nbt = '{' + actions + ',Armor:[{Count:0b,Damage:0s,Name:"",WasPickedUp:0b},{Count:0b,Damage:0s,Name:"",WasPickedUp:0b},{Count:0b,Damage:0s,Name:"",WasPickedUp:0b},{Count:0b,Damage:0s,Name:"",WasPickedUp:0b}],AttackTime:0s,Attributes:[{Base:0f,Current:0f,Max:1024f,Name:"minecraft:luck"},{Base:20f,Current:20f,Max:3.40282e+38f,Name:"minecraft:health"},{Base:0f,Current:0f,Max:16f,Name:"minecraft:absorption"},{Base:0f,Current:0f,Max:1f,Name:"minecraft:knockback_resistance"},{Base:0.5f,Current:0.5f,Max:3.40282e+38f,Name:"minecraft:movement"},{Base:0.02f,Current:0.02f,Max:3.40282e+38f,Name:"minecraft:underwater_movement"},{Base:0.02f,Current:0.02f,Max:3.40282e+38f,Name:"minecraft:lava_movement"},{Base:16f,Current:16f,Max:2048f,Name:"minecraft:follow_range"}],BodyRot:14.0625f,Chested:0b,Color:0b,Color2:0b,CustomName:"'+name+'",CustomNameVisible:1b,Dead:0b,DeathTime:0s,EntityType:51,FallDistance:0f,Fire:0s,HurtTime:0s,InterativeText:"'+interactText+'",Invulnerable:0b,IsAngry:0b,IsAutonomous:0b,IsBaby:0b,IsEating:0b,IsGliding:0b,IsGlobal:0b,IsIllagerCaptain:0b,IsOrphaned:0b,IsPregnant:0b,IsRoaring:0b,IsScared:0b,IsStunned:0b,IsSwimming:0b,IsTamed:0b,IsTrusting:0b,LastDimensionId:0,LeasherID:-1l,LootDropped:0b,Mainhand:[{Count:0b,Damage:0s,Name:"",WasPickedUp:0b}],MarkVariant:0,NaturalSpawn:0b,Offhand:[{Count:0b,Damage:0s,Name:"",WasPickedUp:0b}],OnGround:1b,OwnerNew:-1l,Persistent:1b,PortalCooldown:0,Pos:[36.5f,65f,111.5f],RawtextName:"'+name+'",Rotation:[-52.0313f,0f],Saddled:0b,Sheared:0b,ShowBottom:0b,Sitting:0b,SkinID:0,Strength:0,StrengthMax:0,Surface:0b,TargetID:-1l,TradeExperience:0,TradeTier:0,UniqueID:-4294966313l,Variant:19,boundX:0,boundY:0,boundZ:0,canPickupItems:0b,definitions:["+minecraft:npc"],ench:[{id:28s,lvl:1s}],display:{Name:"NPC Commands",Lore:["HACKED NPC SPAWNER"]},hasBoundOrigin:0b,hasSetCanPickupItems:1b,identifier:"minecraft:npc",limitedLife:-1}'
return nbt
commands = []
button_names = []
name = ''
interactText = ''
texts = []
name = input('ENTER NPC NAME >')
interactText = input('ENTER NPC INTERACT TEXT >')
print ('PRESS CTRL+C TO FINISH')
while True:
try:
command = input('ENTER COMMAND >')
commands.append(command)
button_names.append(input('ENTER BUTTON NAME (SPACE WILL NOT WORK IN NAME, SO YOU MIGHT HAVE TO SUBSTITUTE A DIFFERENT CHARACTER INSTEAD) >'))
#text = (input('ENTER "HOVER-OVER" TEXT >'))
#if text == '':
# text = None
text = command
texts.append(text)
except KeyboardInterrupt:
break
addKill = input('ADD BUTTON TO KILL NPC? (Y\\N) >')
if addKill.lower() == 'y':
command = '/kill @e[type=npc,c=1]'
commands.append(command)
button_names.append('KILL_NPC')
texts.append(command)
print ('GENERATING...')
nbt = generate(commands, button_names, name, interactText, texts)
print ('DONE')
print ('COPY NBT TO CLIPBOARD, THEN RUN ".nbt write" COMMAND WHILE HOLDING ANY FISH IN A BUCKET')
print ('NBT:')
print (nbt)
if input('COPY TEXT TO CLIPBOARD? (Y\\N) >').lower() != 'n':
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append(nbt)
r.update()
r.destroy()