Revision: 39905
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 22, 2011 11:18 by jkerr88
Initial Code
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
*
* @author jkerr88
*
* You need the code from here:
*
* http://www.minecraftwiki.net/wiki/NBT_class
*
* saved as Tag.java in the same folder as this one. This file should be saved as ReportPlayerLocation.java
*
*/
public class ExtinguishFiresInChunk implements Runnable{
static ExtinguishFiresInChunk iThis;
static String isCurrentFile;
public static void main(String argv[]){
iThis = new ExtinguishFiresInChunk();
Thread t = new Thread(iThis);
t.start();
} // main
public void run() {
String sWorldFolder = "C:\\Documents and Settings\\Jeff\\Application Data\\.minecraft\\saves\\World1";
int xPos = 4;
int zPos = -6;
String sInputFile = getChunkFilename(sWorldFolder,xPos,zPos);
//System.out.println(sInputFile);
try{
FileInputStream fis = new FileInputStream(sInputFile);
Tag datFileTag = Tag.readFrom(fis);
fis.close();
editBlocksInTag(datFileTag);
FileOutputStream fos = new FileOutputStream(sInputFile);
datFileTag.writeTo(fos);
fos.close();
}catch(Exception e){
System.out.println(e);
return;
}
System.out.println("Done!");
}
private String getChunkFilename(String p_sWorldFolder, int p_xPos, int p_zPos){
//get mod 64 of x and z
int nModX;
int nModZ;
if(p_xPos<0){
nModX = (p_xPos + 64) % 64;
}else{
nModX = p_xPos % 64;
}
if(p_zPos<0){
nModZ = (p_zPos + 64) % 64;
}else{
nModZ = p_zPos % 64;
}
System.out.println("x:" + nModX + " " + getBase36(nModX));
System.out.println("z:" + nModZ + " " + getBase36(nModZ));
String sReturn = p_sWorldFolder;
if(!sReturn.endsWith("\\")){
sReturn += "\\";
}
sReturn += getBase36(nModX) + "\\" + getBase36(nModZ) + "\\c." + getBase36(p_xPos) + "." + getBase36(p_zPos) + ".dat";
return sReturn;
}
private static String getBase36(int decimalNumber){
boolean bNegative = false;
if(decimalNumber<0){
bNegative = true;
decimalNumber = decimalNumber*-1;
}
String tempVal = decimalNumber == 0 ? "0" : "";
int mod = 0;
String baseDigits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
while( decimalNumber != 0 ) {
mod = decimalNumber % 36;
tempVal = baseDigits.substring( mod, mod + 1 ) + tempVal;
decimalNumber = decimalNumber / 36;
}
if(bNegative){
tempVal = "-" + tempVal;
}
return tempVal;
}
private byte[] editBlocksInTag(Tag p_tag){
Tag.Type type = p_tag.getType();
if (type == Tag.Type.TAG_End)
return null;
String sName = p_tag.getName();
if (type == Tag.Type.TAG_Byte_Array) {
if(sName.equals("Blocks")){
Object o = p_tag.getValue();
byte[] b = (byte[]) o;
//b is a byte array of the blocks in this chunk - Changes can be made and the passed Tag is written back out by the caller
//Extinguish any fires in the chunk (id 51) by replacing with air (id 0)
int nCount =0;
for(int n=0;n<b.length;n++){
if(b[n]==51){//fire
b[n] = 0; //air
nCount++;
}
}
System.out.println(nCount + " fires extinguished!");
return b;
}
} else if (type == Tag.Type.TAG_List) {
Tag[] subtags = (Tag[]) p_tag.getValue();
for (Tag st : subtags) {
editBlocksInTag(st);
}
} else if (type == Tag.Type.TAG_Compound) {
Tag[] subtags = (Tag[]) p_tag.getValue();
for (Tag st : subtags) {
editBlocksInTag(st);
}
} else {
}
return null;
}
}
Initial URL
Initial Description
Initial Title
Minecraft - Java - Extinguish fires in a chunk
Initial Tags
Initial Language
Java