Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zaawansowane Tworzenie Modów


karol202

Rekomendowane odpowiedzi

  • Odpowiedzi 1,2 tys.
  • Dodano
  • Ostatniej odpowiedzi
Opublikowano

Przydało by się podać przerabianie z singla na multi.

Świeta racja! Tylko prawdfopodobnie to jest ciężkie :unsure: , ja spróbuje dzisiaj wrzucić bukkita do miencraft.jat i właczyć decopile - może się uda :) , w ten sposób można zdemkpilować launczer MinecraftSP :D (odkryłem to wczoraj).

 

Karol, możesz dać że poradnik zgodny z wersją 1.4.5 (ale nie z 1.4.4 :P )

 

Bartosz Konkol

 

ps. Jak by ktoś chciał wiedzieć (bo może się przydać):

aby zmienić jakiś dźwięk w MC, należy:

- podmienic ten dźwięk (plik .ogg lub .mus)

- stworzyć moda, w którym nalezy:

- zedytować plik ThreadDownloadResources.java

- usunąć to co on ma w środku

- wkleić tam, to:

 

 

package net.minecraft.src;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import net.minecraft.client.Minecraft;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class ThreadDownloadResources extends Thread
{
   /** The folder to store the resources in. */
   public File resourcesFolder;
   /** A reference to the Minecraft object. */
   private Minecraft mc;
   /** Set to true when Minecraft is closing down. */
   private boolean closing = false;
   public ThreadDownloadResources(File par1File, Minecraft par2Minecraft)
   {
    this.mc = par2Minecraft;
    this.setName("Resource download thread");
    this.setDaemon(true);
    this.resourcesFolder = new File(par1File, "resources/");
    if (!this.resourcesFolder.exists() && !this.resourcesFolder.mkdirs())
    {
	    throw new RuntimeException("The working directory could not be created: " + this.resourcesFolder);
    }
   }
   public void run()
   {
    try
    {
	    URL var1 = new URL("http://s3.amazonaws.com/MinecraftResources/");
	    DocumentBuilderFactory var2 = DocumentBuilderFactory.newInstance();
	    DocumentBuilder var3 = var2.newDocumentBuilder();
	    Document var4 = var3.parse(var1.openStream());
	    NodeList var5 = var4.getElementsByTagName("Contents");
	    for (int var6 = 0; var6 < 2; ++var6)
	    {
		    for (int var7 = 0; var7 < var5.getLength(); ++var7)
		    {
			    Node var8 = var5.item(var7);
			    if (var8.getNodeType() == 1)
			    {
				    Element var9 = (Element)var8;
				    String var10 = var9.getElementsByTagName("Key").item(0).getChildNodes().item(0).getNodeValue();
				    long var11 = Long.parseLong(var9.getElementsByTagName("Size").item(0).getChildNodes().item(0).getNodeValue());
				    if (var11 > 0L)
				    {
					    this.downloadAndInstallResource(var1, var10, var11, var6);
					    if (this.closing)
					    {
						    return;
					    }
				    }
			    }
		    }
	    }
    }
    catch (Exception var13)
    {
	    this.loadResource(this.resourcesFolder, "");
	    var13.printStackTrace();
    }
   }
   /**
 * Reloads the resource folder and passes the resources to Minecraft to install.
 */
   public void reloadResources()
   {
    this.loadResource(this.resourcesFolder, "");
   }
   /**
 * Loads a resource and passes it to Minecraft to install.
 */
   private void loadResource(File par1File, String par2Str)
   {
    File[] var3 = par1File.listFiles();
    File[] var4 = var3;
    int var5 = var3.length;
    for (int var6 = 0; var6 < var5; ++var6)
    {
	    File var7 = var4[var6];
	    if (var7.isDirectory())
	    {
		    this.loadResource(var7, par2Str + var7.getName() + "/");
	    }
	    else
	    {
		    try
		    {
			    this.mc.installResource(par2Str + var7.getName(), var7);
		    }
		    catch (Exception var9)
		    {
			    System.out.println("Failed to add " + par2Str + var7.getName());
		    }
	    }
    }
   }
   /**
 * Downloads the resource and saves it to disk then installs it.
 */
   private void downloadAndInstallResource(URL par1URL, String par2Str, long par3, int par5)
   {
    try
    {
	    int var6 = par2Str.indexOf("/");
	    String var7 = par2Str.substring(0, var6);
	    if (!var7.equals("sound") && !var7.equals("newsound"))
	    {
		    if (par5 != 1)
		    {
			    return;
		    }
	    }
	    else if (par5 != 0)
	    {
		    return;
	    }
	    File var8 = new File(this.resourcesFolder, par2Str);
	    if (!var8.exists() || var8.length() != par3)
	    {
		    var8.getParentFile().mkdirs();
		    String var9 = par2Str.replaceAll(" ", "%20");
		    this.downloadResource(new URL(par1URL, var9), var8, par3);
		    if (this.closing)
		    {
			    return;
		    }
	    }
	    this.mc.installResource(par2Str, var8);
    }
    catch (Exception var10)
    {
	    var10.printStackTrace();
    }
   }
   /**
 * Downloads the resource and saves it to disk.
 */
   private void downloadResource(URL par1URL, File par2File, long par3) throws IOException
   {
    byte[] var5 = new byte[4096];
    DataInputStream var6 = new DataInputStream(par1URL.openStream());
    DataOutputStream var7 = new DataOutputStream(new FileOutputStream(par2File));
    boolean var8 = false;
    do
    {
	    int var9;
	    if ((var9 = var6.read(var5)) < 0)
	    {
		    var6.close();
		    var7.close();
		    return;
	    }
	    var7.write(var5, 0, var9);
    }
    while (!this.closing);
   }
   /**
 * Called when Minecraft is closing down.
 */
   public void closeMinecraft()
   {
    this.closing = true;
   }
}

 

 

Urzycie powyższego moda, pozwala na edycje i zamiane plików dźwiękowych, bez ich powturnego (oryginalnego) pobrania - nie powoduje również crashów.

Sposób działa od wersji 1.3 do wersji 1.4 (możliwe że jak wyjdzie 1.5 to też będzie ok xD )

 

Pozdrawiam

Opublikowano

Mam problem. Działa mi tekstura bloków i itemow. Ale jak zrobić tak, aby blok miał różną teksturę z każdej strony??

u5niwrQ.png

Opublikowano

@UP

karol no własnie nie :( mój blok ma tą samą teksturę z każdej strony

@EDIT

OK juz wszytsko działa. ale polecam zrobić tak

@Override
public int getBlockTextureFroMPCforum(int i) {[
// zmienna i to odpowiednie boki bloku (0-dół, 1-góra, 2,3,4,5-bloki)
switch (i) {
case 0:
return 3; // 3. pole w teksturach
case 1:
return 1; // 1. pole w teksturach
default:
return 2; // 2. pole w teksturach
}
}

Wzięte z BuildCrafta

u5niwrQ.png

Opublikowano

@3up to jest dobrze ale chyba lepiej jest tak:

@Override
public int getBlockTextureFroMPCforum(int i) {
// zmienna i to odpowiednie boki bloku (0-dół, 1-góra, 2,3,4,5-bloki)
switch (i) {
case 0:
return 3 + ((ModNAZWAMODA.idBlockNAZWABLOKU - MINBLOCKID) * 5); // 3. pole w teksturach
case 1:
return 1 + ((ModNAZWAMODA.idBlockNAZWABLOKU - MINBLOCKID) * 5); // 1. pole w teksturach
default:
return 2 + ((ModNAZWAMODA.idBlockNAZWABLOKU - MINBLOCKID) * 5); // 2. pole w teksturach
}
}

Tam gdzie MINBLOCKID trzeba dać id najmniejszego bloku, ale w odwołaniu do pliku głównego moda(tzn. np. ModTestowy.idBlockNAZWAN, gdzie NAZWAN to nazwa bloku który ma najmniejsze id). Ten kod co ty dałeś jest odpowiedni, ale tylko jeśli daje się jeden blok, bo przy następnych tekstury były by takie same jak w pierwszym.

 

@AdvAliGames spróbuj ten sposób co tu jest.

 

PS. Może mi ktoś powiedzieć dlaczego gdy piszę getBlockTextureFrom-Side(oczywiście bez tego myślnika), wyświetla mi się getBlockTextureFroMPCforum?

Opublikowano

@up

Pobaw się!! Zobacz jak wygląda plik gui inwentarza, i wyświtlanie skina czy dodawanie armora. Z tego co wiem w aether modzie jest z 12 slotów na armor. Zobacz strukture tego moda, jakie pliki on edytuje.

Halo!

Opublikowano

Cześć :)

Mam problem...

Od pewnego (bliżej nie okreslonego czasu - miesiąc(?) - ale to nie wazne) próbuje jakoś sobie poradzić z Inną Teksturą Na Każdej Ścianie Bloku. Próbowałem przeszperac przez cały net, ale znalazłem tylko sposób Karola i ten z strony:

http://www.mpcforum.pl/topic/778137-tuttworzenie-modow-do-minecrafta/

.

Przy obu wyskakują mi błędy :(

Po poprawkach, kod wyglada mniej więcej tak:

Kod Karola:

plik BlockXYZ.java:

[...]

 public int getBlockTextureFroMPCforum(int par1)
 {
 if (par1 == 0)
 {
 return ModLoader.addOverride("/terrain.png", "/XYZ1.png");
 }
 else if (par1 == 1)
 {
 return ModLoader.addOverride("/terrain.png", "/XYZ2.png");
 }
 else if (par1 == 2)
 {
 return ModLoader.addOverride("/terrain.png", /XYZ.png");
 }
 return 0;
 }

[...]

Nawet jak zamienie 'par1' na 'i', błąd mam ten sam 8S

Drugi sposób (wg. poradnika http://www.mpcforum....-do-minecrafta/):

plik mod_MOJMODXYZ:

[...]

public class mod_MOJMODXYZ extends BaseMod
{

[...]

public static int XYZBottom = ModLoader.addOverride("/terrain.png", "/XYZ1.png");
public static int XYZTop = ModLoader.addOverride("/terrain.png", "/XYZ2.png");
public static int XYZSides = ModLoader.addOverride("/terrain.png", "/XYZ3.png");

[...]

plik BlockXYZ.java:

[...]

public int getBlockTextureTutekAndMetadata(int i, int j)
 {
 return getBlockTextureTutek(i);
 }
private int getBlockTextureTutek(int i) {
// TODO Auto-generated method stub
return 0;
}
public int getBlockTextureFroTutek(int i)
 {
 if (i == 0)
 {
 return mod_MOJMODXYZ.XYZBottom;
 }
 if (i == 1)
 {
 return mod_MOJMODXYZ.XYZTop;
 }
 else
 {
 return mod_MOJMODXYZ.XYZSides;
 }
 }

[...]

 

Dało by się jakoś pomóc?

To dla mnie bardzo ważne :)

 

Bartek

 

ps. Jak usune wiersz

XYZ.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/XYZ0.png");

, to przy tym drógin sposobem (nie tym od Karola), wczytuje mi na wszytskich stronach teksturke z Sides (z tego co powinno być na bokach bloku).

 

Za wszelką pomoc z góry (jak zawsze...) bardzo dziękuję xD

 

 

@edit (drobne poprawki w wklejonym kodzie)

 

 

@edit2:

Spróbowałem trzeciego sposobu, ale i to nie działą :( .

Plik BlockXYZ.java:

[...][/size]

[size=3]public int getBlockTextureFroMPCforum(int i) {
switch (i) {
case 0:
return mod_SM.blockkillingBottom;
case 1:
return mod_SM.blockkillingTop;
default:
return mod_SM.blockkillingSides;
}
}[/size]

[size=3][...][/size]
[size=3]

Powyższy sposób wczytuje mi ikonke 'XYZ0.png' (poprzednie dwa wymienione sposoby, też) na każdej ścianie :(

 

 

@edit3: (przepraszam za "side" w powyższym kodie (w @edit2), próbowałem to dwa razy usunąć, ale wraca o.O )

 

 

@edit4:

Spróbowałem (w sposobie Karola), pomiędzy

package net.minecraft.src;
import java.util.Random;
public class BlockBlockkilling extends Block
{

, a

public BlockBlockkilling(int i, int j)
 {[/size][/size]

[...]

dodać

private static final int i = 0;

, ale to spowodowało crasha minecrafta (podczas ładowania świata) :unsure:

Kod crashu:

 

 


 Minecraft uległ awarii!	
 -------------------------	
Minecraft przestał działać, ponieważ wystąpił problem.
Exception occured in ModLoader
Pełny raport o błędzie został zapisany w C:\Users\Bartosz Konkol\AppData\Roaming\.minecraft\CrashReports\error(2012-12-04_10.31.52).txt - Proszę dołączyć kopię tego pliku (nie ten ekran) i zgłosić ten wypadek do firmy Mojang AB, bez Twojej pomocy, nie będziemy w stanie naprawić tego błędu.
----- POCZĄTEK RAPORTU BŁĘDÓW 2381f618 -----
Pełny raport w:
C:\Users\Bartosz Konkol\AppData\Roaming\.minecraft\CrashReports\error(2012-12-04_10.31.52).txt
proszę przekazać ten plik do Mojang AB (nie ten ekran).
Wygenerowano 04.12.12 10:31
-- Szczegóły systemowe --
Szczegóły:
Minecraft: 1.4.5
System: Windows 7 (x86) version 6.1
Java: 1.6.0_37, Sun Microsystems Inc.
Java VM: Java HotSpot(TM) Client VM (mixed mode), Sun Microsystems Inc.
Pamięć: 230492664 bytes (219 MB) / 519110656 bytes (495 MB) up to 1037959168 bytes (989 MB)
JVM Flags: 2 total; -Xms512m -Xmx1024m
AABB Pool Size: 18931 (1060136 bytes; 1 MB) allocated, 18931 (1060136 bytes; 1 MB) used
Podejrzane klasy: ModLoader, EntityRendererProxy, ModTextureStatic, ...[reifnsk.minimap.ReiMinimap, WaypointEntity, MinimapException, ...]
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
ModLoader: Mods loaded: 4
ModLoader 1.4.5
mod_ReiMinimap v3.2_05 [1.4.5]
mod_SM -> "Świat Minecrafta (v1.4.5_SM-011)"
mod_TooManyItems 1.4.5 2012-11-19

java.lang.Exception: No more empty terrain sprite indices left!
at ModLoader.getUniqueTerrainSpriteIndex(ModLoader.java:730)
at ModLoader.getUniqueSpriteIndex(ModLoader.java:711)
at ModLoader.addOverride(ModLoader.java:444)
at BlockBlockkilling.a(BlockBlockkilling.java:30)
at amj.a(SourceFile:540)
at reifnsk.minimap.BlockColor.textureColorUpdate(BlockColor.java:600)
at reifnsk.minimap.ReiMinimap.onTickInGame(ReiMinimap.java:524)
at mod_ReiMinimap.onTickInGame(mod_ReiMinimap.java:29)
at ModLoader.onTick(ModLoader.java:1153)
at EntityRendererProxy.b(EntityRendererProxy.java:21)
at net.minecraft.client.Minecraft.J(Minecraft.java:885)
at net.minecraft.client.Minecraft.run(Minecraft.java:781)
at java.lang.Thread.run(Unknown Source)
----- KONIEC RAPORTU BŁĘDÓW 9f1cfb29 -----


 

 

Pomoże mi ktoś? Pomysły mi się już kończą :(

 

 

@edit4:

Sorki za dużo EDIT, ale pisze co się dziej na bieżące (moze to pomoze...).

A więc przetestowałem jeszcze dwa sposoby:

I sposób:

Zamieniłem

public int getBlockTextureFroMPCforum(int par1)

, na

public int getBlockTextureFroMPCforum(int par1, int i)

, ale niestety to wczytało domyślą teksturke. :(

II sposób:

Tak jak w @edit3, tylko ze zamiast dać

private static final int i = 0;

, dałem

private int i;

, niestety i to nie pomogło - otrzymałem identyczny crash jak w @edit3. :(

Pomysły mi się juz skończyły... będe grzecznie czekać aż ktoś dobry mi pomoze :)

Bardzo proszę o pomoc (trafną i szubką - jak się da :) ).

Pozdrawiam i życze dobrego dnia :)

Opublikowano

@2up i @up ale to getBlockTextureFroMPCforum zamieniliście na getBlockTextureFrom-Side(bez myślnika)? Nie wiem czemu zawsze jak coś takiego napiszę to m-Side zamienia się na MPCforum.

Opublikowano

@up ale przecież trzeba jeszcze dać tą drugą funkcje co jest opisana w tucie(chyba getBlockTextureFile, czy coś takiego).

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...