Skip to content

Instantly share code, notes, and snippets.

@szdytom
Created July 7, 2023 08:26
Show Gist options
  • Save szdytom/afa43f6239423d790f6a304c3543d86b to your computer and use it in GitHub Desktop.
Save szdytom/afa43f6239423d790f6a304c3543d86b to your computer and use it in GitHub Desktop.
a Minecraft scarpet script that allows players to teleport with compass.
__config() -> {
'commands' -> {
'' -> 'tp_compass',
'set' -> 'set_compass',
'get' -> 'get_compass_info'
}
};
set_compass() -> (
myself = player();
sslot = query(myself, 'selected_slot');
item = inventory_get(myself, sslot);
if(get(item, 0) == 'compass', (
[x, y, z] = query(myself, 'pos');
dim = query(myself, 'dimension');
inventory_set(myself, sslot, get(item, 1), 'compass',
str('{LodestonePos: {Z: %d, X: %d, Y: %d}, LodestoneDimension: "%s", LodestoneTracked: 0b}', z, x, y, dim));
print('OK.')
), (
print('You are not holding a compass.')
))
);
get_compass_info() -> (
myself = player();
sslot = query(myself, 'selected_slot');
item = inventory_get(myself, sslot);
if(get(item, 0) == 'compass', (
pos = get(item, 2, 'LodestonePos');
dim = get(item, 2, 'LodestoneDimension');
if(dim == null, (
print('You are not holding a binded compass.')
), (
print(str('[%s] %d %d %d.', dim, get(pos, 'X'), get(pos, 'Y'), get(pos, 'Z')))
))
), (
print('You are not holding a compass.')
))
);
tp_compass() -> (
myself = player();
sslot = query(myself, 'selected_slot');
item = inventory_get(myself, sslot);
if(get(item, 0) == 'compass', (
dim = get(item, 2, 'LodestoneDimension');
if(dim == null, (
print('You are not holding a binded compass.')
), (
pos = get(item, 2, 'LodestonePos');
[x, y, z] = [get(pos, 'X'), get(pos, 'Y'), get(pos, 'Z')];
modify(myself, 'motion', 0, 0, 0);
run(str('execute in %s run tp @s %d %d %d', dim, x, y, z));
sound('entity.enderman.teleport', query(myself, 'pos'));
sound('entity.enderman.teleport', [x, y, z]);
null
// in_dimension(dim, modify(myself, 'move', pos));
))
), (
print('You are not holding a compass.')
))
);
__on_player_uses_item(myself, item, hand) -> (
if(get(item, 0) == 'compass' && hand == 'mainhand', (
if(query(myself, 'sneaking'), (
sslot = query(myself, 'selected_slot');
[x, y, z] = query(myself, 'pos');
dim = query(myself, 'dimension');
inventory_set(myself, sslot, get(item, 1), 'compass',
str('{LodestonePos: {Z: %d, X: %d, Y: %d}, LodestoneDimension: "%s", LodestoneTracked: 0b}', z, x, y, dim));
), (
dim = get(item, 2, 'LodestoneDimension');
if(dim != null, (
pos = get(item, 2, 'LodestonePos');
[x, y, z] = [get(pos, 'X'), get(pos, 'Y'), get(pos, 'Z')];
modify(myself, 'motion', 0, 0, 0);
run(str('execute in %s run tp %s %d %d %d', dim, myself~'command_name', x, y, z));
sound('entity.enderman.teleport', query(myself, 'pos'));
sound('entity.enderman.teleport', [x, y, z]);
null
))
))
))
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment