Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

1

03.07.2013, 20:20

Minecraft Mod programmieren

Hallo liebe Community,

ich wollte schon seit längerem eine Minecraft[1.6.2] Mod programmieren. Ich habe noch keine Java Kenntnisse kenne mich aber bereits ziemlich gut mit C++ aus. Ich habe mir das Minecraft Coderpack gedownloadet und nun angefangen nach einem noch aus der Beta von Minecraft stammenden Tutorial zu programmieren.

Ich wollte nun einen Block namens Uranium Erz erstellen den man einfach craften soll. Nun spuckt die recompile.bat folgendes aus:

Quellcode

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
== MCP 8.01 (data: 8.02, client: 1.6.1, server: 1.6.1) ==
"scalac" is not found on the PATH.  Scala files will not be recompiled
# found ff, ff patches, srgs, name csvs, doc csvs, param csvs, astyle, astyle co
nfig, rg, ss
== Recompiling client ==
> Cleaning bin
> Recompiling
'"C:\Program Files\Java\jdk1.7.0_25\bin\javac" -Xlint:-options -deprecation -g -
source 1.6 -target 1....' failed : 1

== ERRORS FOUND in JAVA CODE ==

src\minecraft\net\minecraft\src\ChatMessageComponent.java:256: warning: non-vara
rgs call of varargs method with inexact argument type for last parameter;
                var7.append(StatCollector.translateToLocalFormatted(this.field_1
11090_h, var13));

         ^

  cast to Object for a varargs call
  cast to Object[] for a non-varargs call and to suppress this warning
src\minecraft\net\minecraft\src\Block.java:224: error: constructor BlockUraniumE
rz in class BlockUraniumErz cannot be applied to given types;
    public static final Block uraniumErz =  (new BlockUraniumErz(200, 33)).setBl
ockName("UraniumErz").setLightValue(0.5F).setHardness(3.0F).setStepSound(soundSt
oneFootstep);
                                             ^

  required: int
  found: int,int
  reason: actual and formal argument lists differ in length
1 error
1 warning
==================

!! Can not find server sources, try decompiling !!
Drücken Sie eine beliebige Taste . . .


Ich habe insgesamt 3 Dateien verändert Block.java, CraftingManager.java und meine eigene Datei BlockUraniumErz.java
Der Code der Dateien sieht wie folgend aus:

Block.java

Quellcode

1
    public static final Block uraniumErz =  (new BlockUraniumErz(200, 33)).setBlockName("UraniumErz").setLightValue(0.5F).setHardness(3.0F).setStepSound(soundStoneFootstep);


Hier hab ich die Zeile die ich in Block.java verändert habe.

CraftingManager.java

Quellcode

1
        this.addRecipe(new ItemStack(Block.uraniumErz, 8), new Object[] {"###", "#X#", "###", '#', Block.cobblestone, 'X', Block.planks});


Hier ist die Zeile in der ich das Craftingrezept erstelle.

BlockUraniumErz.java

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package net.minecraft.src;

import java.util.Random;

public class BlockUraniumErz extends Block
{
    public BlockUraniumErz(int par1)
    {
        super(par1, Material.ground);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }

    /**
     * Returns the ID of the items to drop on destruction.
     */
    public int idDropped(int par1, Random par2Random, int par3)
    {
        return Block.uraniumErz.blockID;
    }
}



Und hier die Datei für meinen Block.
Hoffe ihr könnt mir weiterhelfen.

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Swoerm« (04.07.2013, 12:58)


2

03.07.2013, 21:37

Steht doch da:

Zitat


error: constructor BlockUraniumErz in class BlockUraniumErz cannot be applied to given types;
public static final Block uraniumErz = (new BlockUraniumErz(200, 33)).setBlockName("UraniumErz").setLightValue(0.5F).setHardness(3.0F).setStepSound(soundStoneFootstep);

required: int
found: int,int
reason: actual and formal argument lists differ in length


Quellcode

1
2
3
4
5
6
[...]
    public BlockUraniumErz(int par1)
    {
        super(par1, Material.ground);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }


Dein Konstruktor erwartet einen int, du übergibst 2.


EDIT:

Zitat

Sorry wegen des ewig langen Codes ich hab nur Zeile 224 verändert und dort meinen Block deklariert und definiert.

Dann beschränk dich doch bitte auf diese Zeilen...
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

3

03.07.2013, 22:01

Hab nun das zweite Parameter weggelassen (die 33) nun kommt folgender Fehler aus dem ich nicht schlau werde:

Quellcode

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
== MCP 8.01 (data: 8.02, client: 1.6.1, server: 1.6.1) ==
"scalac" is not found on the PATH.  Scala files will not be recompiled
# found ff, ff patches, srgs, name csvs, doc csvs, param csvs, astyle, astyle co
nfig, rg, ss
== Recompiling client ==
> Cleaning bin
> Recompiling
'"C:\Program Files\Java\jdk1.7.0_25\bin\javac" -Xlint:-options -deprecation -g -
source 1.6 -target 1....' failed : 1

== ERRORS FOUND in JAVA CODE ==

src\minecraft\net\minecraft\src\ChatMessageComponent.java:256: warning: non-vara
rgs call of varargs method with inexact argument type for last parameter;
                var7.append(StatCollector.translateToLocalFormatted(this.field_1
11090_h, var13));

         ^

  cast to Object for a varargs call
  cast to Object[] for a non-varargs call and to suppress this warning
src\minecraft\net\minecraft\src\Block.java:224: error: cannot find symbol
    public static final Block uraniumErz =  (new BlockUraniumErz(200)).setBlockN
ame("UraniumErz").setLightValue(0.5F).setHardness(3.0F).setStepSound(soundStoneF
ootstep);
                                                                      ^

  symbol:   method setBlockName(String)
  location: class BlockUraniumErz
1 error
1 warning
==================

!! Can not find server sources, try decompiling !!
Drücken Sie eine beliebige Taste . . .


Ich setzte doch den Namen richtig!? ?(

EDIT:

Und das mit dem langen Code wird nicht mehr vorkommen (hatte nen langen Tag und mein Hirn scheint nicht mehr richtig mitzuarbeiten...)

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

4

03.07.2013, 22:56

Problem zur Hälfte gelöst ich habe setBlockName("UraniumErz") durch setUnlocalizedName("UraniumErz") ersetzt nun steht bei im Spiel wenn ich mit der Maus über den Block fahre title.UraniumErz.name doch wie mach ich das nur UraniumErz da steht?

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

5

14.07.2013, 15:25

"title.UraniumErz.name" bezieht sich auf einen Eintrag in den Sprachdateien von Minecraft (also der Name in allen Sprachen die unterstützt werden).
In den lang\*.lang Dateien musst du also einen Eintrag über deinen Block machen (für de_DE.lang würde das für dich ungefähr so aussehen: title.UraniumErz.name=Uran-Erz).
Falls du vorhast deinen Mod zu veröffentlichen (davor würde ich dir allerdings empfehlen ModLoader und dessen API anzusehen, da dein Mod ansonsten mit 90% aller anderen Mods inkompatibel wäre) reicht ein Eintrag in der deutschen Datei natürlich nicht aus. Dafür solltest du noch entsprechende Einträge in anderen Sprachdateien einfügen (z.B.: Englisch, Spanisch, Chinesisch, Russisch etc.)

Werbeanzeige