first commit

This commit is contained in:
pandacraft 2025-03-21 16:04:17 +01:00
commit a5a0434432
1126 changed files with 439481 additions and 0 deletions

View file

@ -0,0 +1,150 @@
# GrovePi Minecraft Controller
# This is a custom controller for Minecraft, made using the GrovePi.
# In this example, we show you how to build your own custom Minecraft controller
# with the GrovePi.
# See more about the GrovePi at http://dexterindustries.com/grovepi
# A great reference we used is the MagPi's Essentials Minecraft Guide: https://www.raspberrypi.org/magpi-issues/Essentials_Minecraft_v1.pdf
'''
Software Setup:
Before we begin, run the following commands to setup:
sudo apt-get install minecraft-pi
sudo pip3 install python3-xlib
sudo pip3 install pyautogui
Hardware Setup:
Setup the GrovePi on the Raspberry Pi.
Connect a touch Sensor to port A0.
Connect a Joystick to port A2.
Connect a touch sensor to Port D3.
Connect a touch sensor to Port D4.
To run:
1. Start Minecraft on the Pi.
2. Start a world.
3. Start Python3 (IDLE).
4. Open this file (GrovePi-Controller.py)
5. Click "Run" --> "Run Module"
6. Click back into Minecraft.
'''
import mcpi.minecraft as minecraft
import grovepi
import time
import mcpi.block as block
import pyautogui as pag
# Setup the four sensors.
touch_sensor1 = 4 # This will be the Build Key
touch_sensor2 = 3 # This will be the Destroy Key
touch_sensor3 = 14 # This will be the Fly Key.
# This will be the joystick.
xPin = 16 # Port A2
yPin = 17 # Port A2
grovepi.pinMode(xPin, "INPUT")
grovepi.pinMode(yPin, "INPUT")
grovepi.pinMode(touch_sensor1, "INPUT")
grovepi.pinMode(touch_sensor2, "INPUT")
grovepi.pinMode(touch_sensor3, "INPUT")
flying = 0;
# Creat a minecraft entity. We'll reference this through the entire program.
mc = minecraft.Minecraft.create()
# unpress() - This function unpresses all keys.
def unpress():
for key in ['s','w','a','d',' ']:
pag.keyUp(key)
# move() - This function presses the key "direction"
def move(direction):
unpress()
pag.keyDown(direction)
#build - This function builds a square block of "size" size.
def build(p):
size = 5
mc.setBlocks(p.x+1, p.y+1, p.z+1, (p.x + size), (p.y + size), (p.z + size), block.STONE.id)
print("Build!")
#destroy - This function destroys a square block of "size" size.
def destroy(p):
size = 5
mc.setBlocks(p.x+1, p.y+1, p.z+1, (p.x + size), (p.y + size), (p.z + size), block.AIR.id)
print("Destroy!")
# fly - This starts and stops the flying mode.
def fly():
pag.keyDown(' ')
pag.keyUp(' ')
pag.keyDown(' ')
pag.keyUp(' ')
print("Flying!")
# We do the following loop over and over.
while True:
p = mc.player.getTilePos() # Get the position of our person in Minecraft.
try:
# Read the three keys.
# Touch Sensor 1: Build something if it's touched.
if(grovepi.digitalRead(touch_sensor1)):
build(p)
# Touch Sensor 2: Destroy something if it's touched.
if(grovepi.digitalRead(touch_sensor2)):
destroy(p)
# Touch Sensor 3: Start or stop flying if it's been touched.
if(grovepi.digitalRead(touch_sensor3)):
#The variable flying is whether we're flying or not.
if(flying == 0):
flying = 1
fly()
else:
flying = 0
# Read the joystick. We do that with the two pins x and y.
x = grovepi.analogRead(xPin)
y = grovepi.analogRead(yPin)
# Check to see if the joystick has been pressed down.
click = 1 if x >= 1020 else 0
print(str(x) + ", " + str(y))
# Check to see if we've been put into flying mode. If we have, we can teleport ourselves!
if(flying):
jump = 5 # This is the jump size, how far we're going to jump in each direction.
playerPosition = mc.player.getPos() # Get our persons position in Minecraft.
# Now we'll take the joystick values and jump in the direction it tells us to.
if(x < 400):
mc.player.setPos(playerPosition.x+jump, playerPosition.y, playerPosition.z)
# Here we will make sure that the click and the x-axis reading are not confused.
elif(x > 600 and (click == 0)):
mc.player.setPos(playerPosition.x-jump, playerPosition.y, playerPosition.z)
elif(y > 600):
mc.player.setPos(playerPosition.x, playerPosition.y+jump, playerPosition.z)
elif(y < 400):
mc.player.setPos(playerPosition.x, playerPosition.y-jump, playerPosition.z)
# If we didn't read anything, unpress the buttons.
else:
unpress()
# If the joystick is clicked, we fly up one spot.
if(click):
pag.keyUp(' ')
pag.keyDown(' ')
except IOError:
print("Error")