Skip to content

Instantly share code, notes, and snippets.

@utoxin
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save utoxin/d5a43e89855670ed6a60 to your computer and use it in GitHub Desktop.
Save utoxin/d5a43e89855670ed6a60 to your computer and use it in GitHub Desktop.
Script for running UHC in 1.8 with killer rabbits added by donors
#!/usr/bin/env python
import threading
from time import sleep
from subprocess import call
from math import *
# Process Parameters
screen_name = "UHC"
# World Border Parameters
initial_diameter = 2001
minimal_diameter = 201
decrease_step = 200
decrease_time = 300
decrease_interval = 1200
current_diameter = initial_diameter
# Spread Players Parameters
spread_x = 0
spread_z = 0
min_spread = 400
spread_radius = (initial_diameter-1)/2
respect_teams = 'false'
# Rabbit Summoning Location
rabbit_x = 0
rabbit_y = 64
rabbit_z = 0
# Game Start Area
start_x = -1750
start_z = -1700
start_diameter = 200
# Pregen Settings
max_spacing = 200
pregen_pause = 300
pregen_player = "Utoxin"
def sendToScreen(command):
call(['/usr/bin/screen', '-S', screen_name, '-p', '0', '-X', 'stuff', command+'\n'])
def initServer():
sendToScreen("scoreboard objectives remove Deaths")
sendToScreen("scoreboard objectives remove Kills")
sendToScreen("scoreboard objectives remove Health")
sendToScreen("scoreboard objectives add Deaths deathCount")
sendToScreen("scoreboard objectives add Kills playerKillCount")
sendToScreen("scoreboard objectives setdisplay sidebar Kills")
sendToScreen("scoreboard objectives add Health health")
sendToScreen("scoreboard objectives setdisplay list Health")
sendToScreen("time set day")
sendToScreen("gamerule doDaylightCycle false")
sendToScreen("difficulty peaceful")
sendToScreen(" ".join(["setworldspawn", str(start_x), "64", str(start_z)]))
sendToScreen(" ".join(["worldborder center", str(start_x), str(start_z)]))
sendToScreen(" ".join(["worldborder set", str(start_diameter)]))
def startGame():
sendToScreen("say Preparing game... Keep hands and feet inside the vehicle at all times.")
sleep(1)
sendToScreen("worldborder set " + str(initial_diameter * 10))
sleep(1)
sendToScreen(" ".join(["spreadplayers", str(spread_x), str(spread_z), "0 1", respect_teams, '@a']))
sleep(1)
sendToScreen(" ".join(["worldborder center", str(spread_x), str(spread_z)]))
sendToScreen(" ".join(["worldborder set", str(initial_diameter)]))
sendToScreen(" ".join(["setworldspawn", str(spread_x), "64", str(spread_z)]))
sleep(1)
sendToScreen(" ".join(["spreadplayers", str(spread_x), str(spread_z), str(min_spread), str(spread_radius), respect_teams, '@a']))
sendToScreen("difficulty normal")
sendToScreen("gamerule naturalRegeneration false")
sendToScreen("gamerule doDaylightCycle true")
sendToScreen("clear @a")
sleep(1)
sendToScreen("say On your marks...")
sleep(5)
sendToScreen("say Get set...")
sleep(5)
sendToScreen("say GO!")
def pregenWorld():
sendToScreen("worldborder set " + str(initial_diameter * 10))
sendToScreen(" ".join(["gamemode creative", pregen_player]))
stepSize = ceil(initial_diameter / ceil(initial_diameter / max_spacing))
stepCount = floor(ceil(initial_diameter / max_spacing) / 2) + 1
for x in range(-stepCount, stepCount):
for z in range(-stepCount, stepCount):
sendToScreen(" ".join(["tp", pregen_player, str(x*stepSize), "150", str(z*stepSize), "~ -90"]))
sleep(pregen_pause)
sendToScreen(" ".join(["spreadplayers", str(start_x), str(start_z), "1 10 false", pregen_player]))
sendToScreen(" ".join(["gamemode survival", pregen_player]))
sendToScreen(" ".join(["worldborder center", str(start_x), str(start_z)]))
sendToScreen(" ".join(["worldborder set", str(start_diameter)]))
def runWorldBorder():
global current_diameter
while current_diameter > minimal_diameter:
sleep(decrease_interval)
current_diameter = current_diameter - decrease_step
sendToScreen("say WARNING: World Border decreasing by "+str(decrease_step)+" blocks over the next "+str(decrease_time/60)+" minutes.")
sendToScreen(" ".join(["worldborder set", str(current_diameter), str(decrease_time)]))
sendToScreen(" ".join(["spreadplayers", str(spread_x), str(spread_z), "10", str(current_diameter/2), 'false @e[type=Rabbit]']))
sendToScreen("say World Border now at minimum size. Stop hiding!")
def addRabbits():
quantity = int(int(input("How many dollars in this donation? ").strip()) / 5)
donator = input("Who donated? ").strip()
for x in range(0, quantity):
sendToScreen(" ".join(["summon Rabbit", str(rabbit_x), str(rabbit_y), str(rabbit_z), "{RabbitType:99}"]))
sendToScreen(" ".join(["spreadplayers", str(spread_x), str(spread_z), "10", str(current_diameter/2), 'false @e[type=Rabbit]']))
sendToScreen(" ".join(["say", str(quantity), "killer rabbits added to arena. Thanks,", donator+"!"]))
command = ""
while command != "quit":
command = input("Execute which command? (init, pregen, startgame, donor, quit) ")
if command == "init":
initServer()
elif command == "pregen":
pregenWorld()
elif command == "startgame":
startGame()
# Start the border shrinking thread
borderThread = threading.Thread(target=runWorldBorder)
borderThread.daemon = True
borderThread.start()
elif command == "donor":
# Listen on stdin for donations, and add rabbits
addRabbits()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment