Navigation

Eigene Programme

Codeschnipsel

Libraries

english

MCSchematicTool

Aktuelle unterstützte Minecraft-Version: 1.5.1

Es wird wahrscheinlich auch mit neueren/älteren Minecraft-Versionen funktionieren.

18.04.2013: Update zu 1.5.1. 30 Blocks und 23 Items hinzugefügt! Ausserdem sind nun alle Texturen in je einer Datei (wie bei der neusten MC-Version) und alle Items unterstützen namen.
26.08.2012: Update zu 1.3.2. Weitere Baumtypen, Sandstonetypen, 10 Blocks und 3 Items hinzugefügt. Ausserdem Datentyp der Block-IDs auf Short geändert (Schematic-Files haben die IDs zwar als Byte, aber unsigned, während Java's Byte-Typ signed ist. Short wurde deshalb zur einfachheit gewählt)
11.03.2012: Update zu 1.2.3. 2 Items und 2 Blocks hinzugefügt. Ausserdem einen Workaround für den "ShortTag cannot be cast to IntTag"-Fehler gebaut (war kein Fehler von S2B sondern vom exportierenden Programm)
22.01.2011: Update auf final 1.1.0. 20 Items und 13 Blocks hinzugefügt. Druckfunktionalität und Marker zu ImageGrid hinzugefügt, RAM-Verbrauch durch Nichtverwendung von einem Component pro Block in ImageGrid gefixt.
07.11.2011: Update auf 1.8.1 und div. Bugfixes. 10 Items und 22 Blocks hinzugefügt.
08.07.2011: Infomeldungen zur ParseException hinzugefügt
28.06.2011: Einen Bildexport direkt zu Slice hinzugefügt (ging bisher nur über ImageGrid) und einen Textexport zu SliceStack hinzugefügt, der mit dem Builders-Mod kompatibel ist.
11.06.2011: Konfortfunktionen ImageProvider.getImageByBlockOrItemId() und NameProvider.getNameByBlockOrItemId() hinzugefügt.
04.06.2011: Auf Minecraft 1.6.6 geupdated. Hohes gras, tote Sträucher, Falltüren und Karten hinzugefügt.

Inhaltsverzeichnis

Beschreibung
Unterstützung für Texturepacks
Hinweis betreffend Redstone Circuits
Hinweis betreffend leerer Dispenser und Schilde
Beispielcode
Lizenz
Download und Javadoc

Kommentar abgeben (Bisher 38)

Beschreibung

Dies ist ein Tool (Eine Java Library) für Schematic-Dateien, ein Exportdateiformat von vielen MineCraft Tools.

Nach dem Einlesen einer Schematic-Datei generiert es ein SliceStack-Objekt. Dieses Objekt repräsentiert ein Quader innerhalb der MineCraft-Welt, eine dreidimensionale ansammlung von Blocks.
Der SliceStack beinhaltet mehrere Slices, die eine einzelne horizontale Ebene des SliceStacks repräsentiert. Die Slice ist so angeordnet, dass der Index 0,0 die nordwestliche Ecke ist (der erste Index ist die Breite, der zweite ist die Höhe).
Die Slice wiederum beinhaltet mehrere Block-Objekte, die einen einzelnen Block in der MineCraft-Welt repräsentiert. Alle Blöcke, die einen Datenwert wie ihre Ausrichtung haben, haben eine eigene Subklasse, die sich um ihre Besonderheiten kümmert. Redstone Torches beispielsweise haben eine Ausrichtung (RedstoneTorch.getDirection()) und können entweder ein- oder ausgeschaltet sein (RedstoneTorch.isOn()). Um sicherzustellen, dass die Blöcke wieder in eine Schematic-Datei geschrieben werden können, werden durch alle Änderungen (wie RedstoneTorch.setOn(false)) die Datenwerte aktualisiert.

Alle Blöcke haben die Möglichkeit, eine graphische Repräsentation ihrer selbst als Swing component zurückzugeben, was es einfach macht, ein GUI zu bauen. Um diese Funktionalität einzuschalten, muss die Funktion ImageProvider.initialize() aufgerufen werden, denn um Speicher zu sparen, werden die Bilder standardmässig nicht geladen, so dass man das Tool auch im Hintergrund benutzen kann.
Alle Blöcke haben die Funktion getImage(), die eine Instanz von BufferedImage liefert und die Funktion getComponent(), die ein Swing Component liefert, das das Bild anzeigt und gegebenenfalls updated, wenn sich der Block ändert. Es hat auch Tooltips, die Zusatzinformationen liefern. Manche Blöcke, wie Chests, haben ein spezielles Bild-Tooltip.
Slices haben die Funktion getImages(), die ein ImageGrid, ein spezielles Swing Component, das die beinhalteten Blöcke in einem Raster anzeigt, zurückliefert. SliceStacks liefern ein Array solcher Slice-Components mittels einem ImageGridStack-objekt zurück, das auch Zoom etc behandelt.

Zurück zum Inhaltsverzeichnis

Unterstützung für Texturpacks

Da MCSchematicTool die Standard-terrain.png und items.png von MineCraft für die meisten Blockbilder benutzt, kann man sie leicht durch die Bilder von einem 16x16-Texturpack ersetzen, um das aussehen zu Ändern. Als Beispiel ist unten der Screenshot von oben nochmal, wie er mit dem Painterly-Texturpack aussieht.

Zurück zum Inhaltsverzeichnis

Hinweis betreffend Redstone Circuits

Dieser Abschnitt ist nur interessant, wenn du vorhast, die grafischen Features zu benutzen.

Redstone wires sind die einzigen Blocks von MineCraft, die Informationen über ihre Umgebung benötigen, um ihre Ausrichtung zu bestimmen. Dies ist, verglichen mit den anderen Blocks, relativ teuer. Deshalb bietet MCSchematicTool mittels eines Parameters für die getImages()-Funktion die Möglichkeit, diese Berechnungen nicht durchzuführen, wodurch alle Redstone Wires wie das Standard-Kreuz aussehen. Wenn du MCSchematicTool das Aussehen berechnen lassen willst, ist es besser, immer die getImages()-Funktion von SliceStack und nicht von Slice zu nehmen.
Da Slice eine einzelne Scheibe darstellt, kann sie selbst bei eingeschaltetem berechnen nur das aussehen relativ zur aktuellen Slice berechnen, so dass Redstone-Linien, die einen Berg hochführen, nicht berücksichtigt werden. Bei der getImages()-Funktion von SliceStack werden sie das jedoch.

Aufgrund der Art, wie MCSchematicTool die graphiken updated, ist es nötig, das gesamte ImageGridStack neu zu holen, wenn ein Block geändert wird, der Einfluss auf die Ausrichtung der Redstone Wires haben könnte.

Dies alles ist rein kosmetisch und nur für die Anzeige und belastet MCSchematicTool ansonsten nicht.

Zurück zum Inhaltsverzeichnis

Hinweis betreffend leerer Dispenser und Schilde

Dies ist kein Bug von MCSchematicTool sondern wird von WorldEdit verursacht, das den Inhalt von Dispensern und den Text von Schildern nicht exportiert.

Zurück zum Inhaltsverzeichnis

Beispielcode

Um eine Schematic-Datei zu lesen und eine Slice davon graphisch darzustellen (für die Screenshots oben verwendet):

try {
	ImageProvider.initialize();
			
	JFrame frm = new JFrame();
	frm.setTitle("Test");
	frm.setSize(250, 250);

	File f = new File("/pfad/zu/deiner/shematic");
	SliceStack stack = SchematicReader.readSchematicsFile(f);
	// hole unterste Slice
	Slice slice = stack.getSlice(0);
	
	// 2 = Zoomwert - Zeige die Bloecke mit doppelter groesse an (1 waere 16px x 16px)
	// true = berechne Redstone Wires (in diesem Fall nur fuer die aktuelle Slice)
	JScrollPane scrPn = new JScrollPane(slice.getImages(2, true));
	
	frm.add(scrPn);
	frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frm.setVisible(true);
} catch (IOException e) {
	// datei nicht gefunden
	e.printStackTrace();
} catch (ClassicNotSupportedException e) {
	// schematic ist im MC-Classik-Format
	e.printStackTrace();
} catch (ParseException e) {
	// schematic ist ungueltig
	e.printStackTrace();
}

Um den Inhalt der Schematic in der Konsole auszugeben:

try {
	File f = new File("/pfad/zu/deiner/shematic");
	SliceStack s = SchematicReader.readSchematicsFile(f);
	System.out.println(s);
} catch (IOException e) {
	// datei nicht gefunden
	e.printStackTrace();
} catch (ClassicNotSupportedException e) {
	// schematic ist im MC-Classik-Format
	e.printStackTrace();
} catch (ParseException e) {
	// schematic ist ungueltig
	e.printStackTrace();
}


Beispieloutput:
[Diamond Block][Chest, contents: [3x Bone, 2x Cobblestone, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -]]
[Gold Block][Glass]
-------------
[Cobblestone][Dirt]
[Iron Block][Stone]
-------------

Um den Inhalt einer Schematic zuzuschneiden und zu drehen und sie dann neu zu speichern:

try {
	File source = new File("/pfad/zu/deiner/source.shematic");
	File target = new File("/pfad/zu/deiner/target.shematic");
	SliceStack stack = SchematicReader.readSchematicsFile(source);
	stack.trim();
	stack.turnCW();
	SchematicWriter.writeSchematicsFile(stack, target);
} catch (IOException e) {
	// datei nicht gefunden
	e.printStackTrace();
} catch (ClassicNotSupportedException e) {
	// schematic ist im MC-Classik-Format
	e.printStackTrace();
} catch (ParseException e) {
	// schematic ist ungueltig
	e.printStackTrace();
}

Zurück zum Inhaltsverzeichnis

Lizenz

Wäre nett, wenn du auf mich zurücklinken würdest, wenn du das Tool benutzt. Ansonsten bist du nur an die Lizenz von JNBT gebunden. Siehe im Licence-Verzeichnis innerhalb des jars für den vollen Lizenztext.

Zurück zum Inhaltsverzeichnis

Download und Javadoc

MCSchematicTool.jar (beinhaltet auch den Sourcecode)
MCSchematicTool JavaDoc

Zurück zum Inhaltsverzeichnis

Kommentar abgeben

#35 Uebertreiberman schrieb am 31.10.2015 21:19 (CET):
Hey, I have a small question, can I use your Library to generate new schematics from nothing?
Because I'm considering working on a program which can generate command block structures and output them as a schematic, and I wonder if I could use your Library for that.
Thanks in advance ;)

#36 klaue schrieb am 03.11.2015 18:13 (CET):
still the same answer as below

#37 Uebertreiberman schrieb am 03.11.2015 18:28 (CET):
Oh, that's strange, I'm pretty sure I've only send that once...
Sorry :D

#33 Uebertreiberman schrieb am 29.10.2015 20:05 (CET):
Hey, I have a small question, can I use your Library to generate new schematics from nothing?
Because I'm considering working on a program which can generate command block structures and output them as a schematic, and I wonder if I could use your Library for that.
Thanks in advance ;)

#34 Klaue schrieb am 30.10.2015 06:09 (CET):
Yeah that should be possible. Just keep in mind that this is a bit outdated, I don't know if command blocks changed much in the last few releases.

Though sources are provided and updating a single block might be easier than implementing all of schematics yourself :)

#30 SimPlaysGames schrieb am 28.03.2015 19:00 (CET):
How do i download this?

#31 SimPlaysGames schrieb am 28.03.2015 19:16 (CET):
Forget it

#28 M. Gentilcore schrieb am 30.10.2013 01:25 (CET):
I've been using your program pretty well for the last little while, but I ran into a problem with it today. When I try to open it, it says that the program cannot be launched. It used to work just fine up until a little while ago, do you have any thoughts as to why it suddenly isn't working?

#29 Klaue schrieb am 01.11.2013 17:36 (CET):
Sounds like either you uninstalled java, or you updated it and the update fucked it up. Open the command line (Win-R -> cmd) and type in "java -version" without the quotes. If it outputs the same error, your java path doesn't work anymore. you can fix this by opening the start bat in a text editor (like notepad) and replace "javaw" with the full path to your javaw.exe

#32 Kodi schrieb am 25.06.2015 01:21 (CET):
is there an updated version of this program?

#27 Bierfreund schrieb am 25.04.2013 21:39 (CET):
Danke, das ist genau das Tool, dass mir gefehlt hat. Gute Arbeit



Blender, binvox, constructor, mcedit und dein schematic2blueprint, ein perfektes lineup.

PS: Gabs wirklich keinen kürzeren Namen dafür? ;)

#25 Zeke schrieb am 20.08.2012 17:58 (CET):
What do I do once I have the .jar file downloaded? How do I use/run the program?

#26 Klaue schrieb am 31.08.2012 22:20 (CET):
This is not a program, this is a library. Hence why it's listed under "Library". What you want is the Program Schematic2Blueprint.

#21 Tom Baer schrieb am 20.10.2011 05:09 (CET):
I am loving your kindness in the amount of comments.

#17 Tom Baer schrieb am 19.10.2011 22:05 (CET):
It doesn't let me extract it. WinRar and 7Zip give a broken archive error. Is that some kind of protection? How could I look at the source? I am making an applet that can convert schematics to components for 1.8.1.

#18 Klaue schrieb am 19.10.2011 23:14 (CET):
I just tested it and it extracts fine here. Maybe redownload it and try again?
As for your project: the lib is jurrently still on 1.6 (it works with newer schematics, or it should at least, but it would not recognise the new blocks and therefore just treat them as a general "unknown" block) as I had no time to update it...

#19 Tom Baer schrieb am 20.10.2011 04:44 (CET):
That is fine, after my third time downloading it worked. I will write in the new blocks, and likely the fix the rotation stuff. The tile entities I will need to look into, because things like saving chests full of items or mob spawners is a big deal for some things.

#20 Tom Baer schrieb am 20.10.2011 04:45 (CET):
If you want after it's written in, I can send it to you.

#22 Klaue schrieb am 20.10.2011 06:16 (CET):
The chests with all the items should allready work. Some schematic exporters do not save them, though, and my tool cannot read what's not in the file, that's why some chests appear to be empty even if they weren't inside minecraft. Signs have the same problem.

If you want, I could give you the "beta" with my current status, it allready contains most of the new blocks and items.
It would contain Shears, Melon Slice, Pumpkin Seeds, Melon Seeds, Raw Chicken, Cooked Chicken, Raw Beef, Steak, Rotten Flesh, Ender Pearl, Stone Brick (Normal, Mossy, Cracked), Stone Brick Slabs, Brick Slabs, Stone Brick Stairs, Brick Stairs, Glass Pane, Iron Bars, Melon, Melon Stem / Pumpkin Stem, Vines, Fence Gate

It still lacks the red and brown mushroom caps and the mushroom stem (95% done, only direction stuff still incomplete) and the pistons.
By the way, there was some confusion because notch had to state that the sun rises in the north instead of east which fucked up all the directions, but I decided to still act like sun rising = east because a) it makes more sense to users and b) changing that would mean mayor work,

Note that I diddn't test any of the new blocks yet, so each one in the "done" list could fail. Still, probably way less work to take the beta.
Just tell me if you want it, but you'd have to wait until evening (central european time) because I'm off to work now.
Best would be to type in your email adress in the comment form here (if you diddn't allready do it). Nowbody but me can see that so spam is no issue ;)

#23 Tom Baer schrieb am 20.10.2011 13:32 (CET):
Cool, that'd be great, I just set up my eclipse workspace yesterday and looked at some of the code, but I plan to getting to work later today.

#24 Klaue schrieb am 24.10.2011 21:15 (CET):
Hey, did you receive the code? haven't heard anything since I sent it to you last thursday

#14 DV8FromTheWorld schrieb am 10.09.2011 19:01 (CET):
Did I miss something? because after I downloaded it and tried to run it, it says "A Java Exception has occured" in the Java Virtual Machine Launcher

#16 Klaue schrieb am 11.09.2011 03:31 (CET):
This is a programming library to build other programs with, not a program itself.
Maybe you're looking for Schematic2Blueprint, which uses this lib?
http://klaue.net16.net/programme/ownprogs/java/schematic2blueprint.en.php

#13 Serge schrieb am 26.08.2011 16:08 (CET):
Does he copy modded blocks to the schematic file?

#15 Klaue schrieb am 11.09.2011 03:30 (CET):
If you mean if it can handle modded blocks, then the short answer is "most of the time".
The long answer is:
Depends. it does care for unknown blocks, but if the modded block uses additional data in Tile Entities (only very few original ones, like the chest and the sign, use them), that will be lost. Also, it will be handled as if it had no direction (like most normal blocks), so if you rotated the schematic, the block will be moved to the right place, but without changing it's data value (that is where, for example, torches save their direction)


Kommentar hinzufügen

*Name:

Email:
(Optional, versteckt. Nur für Benachrichtigung bei Antwort (Englisch))

Homepage:

* Spam check: 4 * 2 =
*Kommentar:

Zurück zum Inhaltsverzeichnis