This repository has been archived by the owner on Feb 12, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
spawnplayer.py
68 lines (59 loc) · 2.64 KB
/
spawnplayer.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
"""
Code that was used once to create this awesome screenshot
- https://i.imgur.com/v4wg5kl.png
- https://i.imgur.com/tIZ3jmC.png
- https://www.reddit.com/r/Minecraft/comments/28le52/screenshot_of_all_players_that_joined_my_server/
"""
import net.minecraft.server.v1_7_R1.EntityPlayer as EntityPlayer
import net.minecraft.server.v1_7_R1.PacketPlayOutNamedEntitySpawn as PacketPlayOutNamedEntitySpawn
import net.minecraft.server.v1_7_R1.PlayerInteractManager as PlayerInteractManager
import net.minecraft.util.com.mojang.authlib.GameProfile as GameProfile
import org.bukkit.Bukkit as bukkit
# players.txt contains 1 name per line
players = [line.strip() for line in open("players.txt").readlines()]
ground = 70 # sea level
shift = 1.625 # amount of blocks to add on each side per row (this is for FOV 90)
amount = 6 # amount of players in first row
margin = 1 # space between players
row = 1 # distance to first row of players
goup = 6 # after how many rows should we go up by one?
upmul = 0.95 # multiplicate with goup each row
def spawn(dispname, sender, x, y, z):
"""
Sends the actual player to sender
"""
server = bukkit.getServer().getServer()
world = server.getWorldServer(0) # main world
profile = GameProfile(dispname, dispname) # set player details
manager = PlayerInteractManager(world)
entity = EntityPlayer(server, world, profile, manager) # create Player's entity
entity.setPosition(x, y, z)
packet = PacketPlayOutNamedEntitySpawn(entity) # create packet for entity spawn
sender.getHandle().playerConnection.sendPacket(packet) # send packet
@hook.command("spawnplayer")
def on_spawnplayer_command(sender, command, label, args):
global amount, row, ground, goup
# X and Z position
xpos = sender.getLocation().add(-float(row-1 * shift + (amount * margin) / 2), 0, 0).getX()
row = sender.getLocation().add(0, 0, -row).getZ()
count = 0
stop = False
while not stop:
for i in range(amount):
player = players[count]
x = int(xpos + i*margin)
spawn(player, sender, x, ground, row)
print(player, x, ground, row)
count += 1
if count >= len(players):
stop = True
print "breaking"
break
print("next row")
row -= 1 # next row (-z)
xpos -= shift # shift left
amount += int(shift*margin*2) # add players left and right
if abs(row) % int(goup) == 0:
goup *= upmul
ground += 1
print "Going up by 1: %s" % ground