Hey,
Ich release hier mal einen simplen-Minecraft-ItemShop.
Was man brauch:
- Brain
- Minecraft
- Zeit
- Datenbank
- Webserver
- Ahnung
- Geduld
Was ihr downloaden müsst:
- Shop.zip enthält die Itembilder + shop.php
- Link:

- Virustotal:
Was der Shop kann:
- Wenn man ein MySQL-Economy-Plugin hat, Geld abziehen *__*
- Items verschicken
- Kaufen
So, dann legen wir mal los mit der Konfiguration von der "server.properties".
falls ihr dieses nicht eingestellt habt, macht das sonst geht es nicht
Code:
enable-query=true
rcon.password=123456789 //oder ändern
query.port=25565 //könnt ihr auch ändern
enable-rcon=true
rcon.port=25575 //könnt ihr ändern
Jetzt einmal diesen Code speichern als "MinecraftRcon.class.php" ein Danke geht hier an xPaw.
PHP Code:
<?php
class MinecraftRconException extends Exception
{
// Exception thrown by MinecraftRcon class
}
class MinecraftRcon
{
/*
* Class written by xPaw
*
* Website: http://xpaw.ru
* GitHub: https://github.com/xPaw/PHP-Minecraft-Query
*
* Protocol: https://developer.valvesoftware.com/wiki/Source_RCON_Protocol
*/
// Sending
const SERVERDATA_EXECCOMMAND = 2;
const SERVERDATA_AUTH = 3;
// Receiving
const SERVERDATA_RESPONSE_VALUE = 0;
const SERVERDATA_AUTH_RESPONSE = 2;
private $Socket;
private $RequestId;
public function __destruct( )
{
$this->Disconnect( );
}
public function Connect( $Ip, $Port = 25575, $Password, $Timeout = 3 )
{
$this->RequestId = 0;
if( $this->Socket = FSockOpen( $Ip, (int)$Port ) )
{
Socket_Set_TimeOut( $this->Socket, $Timeout );
if( !$this->Auth( $Password ) )
{
$this->Disconnect( );
throw new MinecraftRconException( "Authorization failed." );
}
}
else
{
throw new MinecraftQueryException( "Can't open socket." );
}
}
public function Disconnect( )
{
if( $this->Socket )
{
FClose( $this->Socket );
$this->Socket = null;
}
}
public function Command( $String )
{
if( !$this->WriteData( self :: SERVERDATA_EXECCOMMAND, $String ) )
{
return false;
}
$Data = $this->ReadData( );
if( $Data[ 'RequestId' ] < 1 || $Data[ 'Response' ] != self :: SERVERDATA_RESPONSE_VALUE )
{
return false;
}
return $Data[ 'String' ];
}
private function Auth( $Password )
{
if( !$this->WriteData( self :: SERVERDATA_AUTH, $Password ) )
{
return false;
}
$Data = $this->ReadData( );
return $Data[ 'RequestId' ] > -1 && $Data[ 'Response' ] == self :: SERVERDATA_AUTH_RESPONSE;
}
private function ReadData( )
{
$Packet = Array( );
$Size = FRead( $this->Socket, 4 );
$Size = UnPack( 'V1Size', $Size );
$Size = $Size[ 'Size' ];
// TODO: Add multiple packets (Source)
$Packet = FRead( $this->Socket, $Size );
$Packet = UnPack( 'V1RequestId/V1Response/a*String/a*String2', $Packet );
return $Packet;
}
private function WriteData( $Command, $String = "" )
{
// Pack the packet together
$Data = Pack( 'VV', $this->RequestId++, $Command ) . $String . "\x00\x00\x00";
// Prepend packet length
$Data = Pack( 'V', StrLen( $Data ) ) . $Data;
$Length = StrLen( $Data );
return $Length === FWrite( $this->Socket, $Data, $Length );
}
}
Am besten speichert ihr die in einen ordner, wo ihr die wiederfinden tut.
jetzt erstellt ihr noch eine rcon.php mit dem Inhalt:
PHP Code:
<?php
define( 'MQ_SERVER_ADDR_RCON', 'localhost' );
define( 'MQ_SERVER_PORT_RCON', 25575 );
define( 'MQ_SERVER_PASS_RCON', '123456789' );
define( 'MQ_TIMEOUT_RCON', 2 );
require_once 'MinecraftRcon.class.php'; //hier den Pfad zu der MinecraftRcon.php angeben
?>
Jetzt erstellt ihr eine neue Tabelle:
Code:
DROP TABLE IF EXISTS `shop`;
CREATE TABLE IF NOT EXISTS `shop` (
`id` int(11) NOT NULL,
`kat` varchar(255) NOT NULL,
`image` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`price` int(11) NOT NULL,
`buyable` int(11) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Jetzt in der Shop.php das anpassen:
PHP Code:
$verbindung = mysql_connect("127.0.0.1", "root" , "")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("eure_datenbank") or die("Keine Verbindung zur Datenbank");
falls ihr ein loginsystem habt, macht aus dem:
$username = Username des eingeloggten bentuzers, alternativ kann man einfach n Formular mit dem Benutzernamen machen

$id = ID des Items am besten nicht ändern, da das aus der Datenbank ausgelesen wird.
$amount auch nicht ändern.
PHP Code:
$amounts = 'give '.$username.' '.$id.' '.$amount;
das:
erst eine MySQL verbindung zum auslesen des Eingeloggten Benutzers, dann z.B. per $_SESSION den username nehmen was z.B. so ausschaut:
PHP Code:
$amounts = 'give '.$_SESSION['SESSION_NAME']['username'].' '.$id.' '.$amount;
und beim einfügen der Items in die Datenbank als image das nehmen:
shop/images/bloecke/ wichtig ist, das ihr das BILD NICHT angeben tut und ein / am ende ist.
Viele werden zwar fehler bekommen, aber die, die PHP etwas können, bekommen es leicht hin.
MfG Evolutio