Двери, панели, ступени

397
8
33
Здравствуйте! Я только начинаю свой путь в создании модов. К сожалению, уроки модостроения дают лишь самые основы, а потребности как-никак с каждым днем становятся больше и больше. Вместе с товарищем nai555, мы разобрались, как добавить панель (blockpane) в мод, но увы, совсем не имеем представления, как установить для нее текстуры. ​

Очень прошу объяснить простыми словами, что и куда нужно, или просто скинуть часть кода, отвечающего за это. Увы, я слишком плохо разбираюсь во всем этом. Ну, а так же, если не сложно, то, как сделать свою дверь и ступени? :lol:​
 
Если 1.6.4., то в конструктор блока записать, что-то подобное:
Код:
setTextureName("modid:testBlock");
Если что, смотрите в примеры ванильных блоков.

Простыми словами всё не опишешь, но...
Ступени сделать унаследовать блока ступени.
Дверь, это на подобии настенной панели которое изменяет свои значении (и размеры) от зависимости метадаты.
И т.п и т.д. это было простыми словами. А другими словами...
Всё зависит от вашей реализации. Помочь вам это мало вероятно, но хоть как-то помочь ещё возможно.
 
timaxa007, ну вот ни в какую не хочет он мне ставить текстуру... А если делать как в простом блоке - вылетает при загрузке мира.
 
Версия Minecraft 1.6.4? То что вылетает, возможно должен лог ошибки (я не на столько углублён в изучении кода, чтобы выявлять в чём ошибки от симптомов). Есть лог ошибки?
 
timaxa007, да, версия такая. А лога нет, но могу его быстренько сообразить :lol:
 
Я не имею ввиду файл лога. Обычно когда вылетает он хотя-бы в консоле пишет, что игра остановлена или что-то подобное.
 
Ты можешь выложить сюда на обозрение, чтобы хотя-бы примерно определить, в чём возможна ошибка у тебя?
 
timaxa007, вот значит запускаю проверку, загружается майнкрафт. Вот что выдает с того момента, как загружаю мир:


Код:
2014-09-20 18:58:38 [INFO] [Minecraft-Server] Starting integrated minecraft server version 1.6.4
2014-09-20 18:58:38 [INFO] [Minecraft-Server] Generating keypair
2014-09-20 18:58:38 [INFO] [ForgeModLoader] Loading dimension 0 (New World) (net.minecraft.server.integrated.IntegratedServer@36f48593)
2014-09-20 18:58:38 [INFO] [ForgeModLoader] Loading dimension 1 (New World) (net.minecraft.server.integrated.IntegratedServer@36f48593)
2014-09-20 18:58:38 [INFO] [ForgeModLoader] Loading dimension -1 (New World) (net.minecraft.server.integrated.IntegratedServer@36f48593)
2014-09-20 18:58:38 [INFO] [Minecraft-Server] Preparing start region for level 0
2014-09-20 18:58:39 [INFO] [STDOUT] loading single player
2014-09-20 18:58:39 [INFO] [Minecraft-Server] Player375[/127.0.0.1:0] logged in with entity id 72 at (-342.93220654964466, 4.0, 577.3725115766608)
2014-09-20 18:58:39 [INFO] [Minecraft-Server] Player375 присоединился к игре
2014-09-20 18:58:39 [INFO] [STDOUT] Setting up custom skins
2014-09-20 18:58:40 [INFO] [STDERR] java.lang.NullPointerException
2014-09-20 18:58:40 [INFO] [STDERR]     at net.minecraft.client.renderer.RenderBlocks.renderBlockPane(RenderBlocks.java:3048)
2014-09-20 18:58:40 [INFO] [STDERR]     at net.minecraft.client.renderer.RenderBlocks.renderBlockByRenderType(RenderBlocks.java:475)
2014-09-20 18:58:40 [INFO] [STDERR]     at net.minecraft.client.renderer.WorldRenderer.updateRenderer(WorldRenderer.java:224)
2014-09-20 18:58:40 [INFO] [STDERR]     at net.minecraft.client.renderer.RenderGlobal.updateRenderers(RenderGlobal.java:1551)
2014-09-20 18:58:40 [INFO] [STDERR]     at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1129)
2014-09-20 18:58:40 [INFO] [STDERR]     at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1006)
2014-09-20 18:58:40 [INFO] [STDERR]     at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:946)
2014-09-20 18:58:40 [INFO] [STDERR]     at net.minecraft.client.Minecraft.run(Minecraft.java:838)
2014-09-20 18:58:40 [INFO] [STDERR]     at net.minecraft.client.main.Main.main(Main.java:93)
2014-09-20 18:58:40 [INFO] [STDERR]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2014-09-20 18:58:40 [INFO] [STDERR]     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2014-09-20 18:58:40 [INFO] [STDERR]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2014-09-20 18:58:40 [INFO] [STDERR]     at java.lang.reflect.Method.invoke(Unknown Source)
2014-09-20 18:58:40 [INFO] [STDERR]     at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
2014-09-20 18:58:40 [INFO] [STDERR]     at net.minecraft.launchwrapper.Launch.main(Launch.java:27)
2014-09-20 18:58:40 [INFO] [STDOUT] ---- Minecraft Crash Report ----
2014-09-20 18:58:40 [INFO] [STDOUT] // I blame Dinnerbone.
2014-09-20 18:58:40 [INFO] [STDOUT] 
2014-09-20 18:58:40 [INFO] [STDOUT] Time: 20.09.14 18:58
2014-09-20 18:58:40 [INFO] [STDOUT] Description: Unexpected error
2014-09-20 18:58:40 [INFO] [STDOUT] 
2014-09-20 18:58:40 [INFO] [STDOUT] java.lang.NullPointerException
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.renderer.RenderBlocks.renderBlockPane(RenderBlocks.java:3048)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.renderer.RenderBlocks.renderBlockByRenderType(RenderBlocks.java:475)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.renderer.WorldRenderer.updateRenderer(WorldRenderer.java:224)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.renderer.RenderGlobal.updateRenderers(RenderGlobal.java:1551)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1129)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1006)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:946)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.Minecraft.run(Minecraft.java:838)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.main.Main.main(Main.java:93)
2014-09-20 18:58:40 [INFO] [STDOUT]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2014-09-20 18:58:40 [INFO] [STDOUT]     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2014-09-20 18:58:40 [INFO] [STDOUT]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2014-09-20 18:58:40 [INFO] [STDOUT]     at java.lang.reflect.Method.invoke(Unknown Source)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.launchwrapper.Launch.main(Launch.java:27)
2014-09-20 18:58:40 [INFO] [STDOUT] 
2014-09-20 18:58:40 [INFO] [STDOUT] 
2014-09-20 18:58:40 [INFO] [STDOUT] A detailed walkthrough of the error, its code path and all known details is as follows:
2014-09-20 18:58:40 [INFO] [STDOUT] ---------------------------------------------------------------------------------------
2014-09-20 18:58:40 [INFO] [STDOUT] 
2014-09-20 18:58:40 [INFO] [STDOUT] -- Head --
2014-09-20 18:58:40 [INFO] [STDOUT] Stacktrace:
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.renderer.RenderBlocks.renderBlockPane(RenderBlocks.java:3048)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.renderer.RenderBlocks.renderBlockByRenderType(RenderBlocks.java:475)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.renderer.WorldRenderer.updateRenderer(WorldRenderer.java:224)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.renderer.RenderGlobal.updateRenderers(RenderGlobal.java:1551)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1129)
2014-09-20 18:58:40 [INFO] [STDOUT] 
2014-09-20 18:58:40 [INFO] [STDOUT] -- Affected level --
2014-09-20 18:58:40 [INFO] [STDOUT] Details:
2014-09-20 18:58:40 [INFO] [STDOUT]     Level name: MpServer
2014-09-20 18:58:40 [INFO] [STDOUT]     All players: 1 total; [EntityClientPlayerMP['Player375'/72, l='MpServer', x=-342,93, y=5,62, z=577,37]]
2014-09-20 18:58:40 [INFO] [STDOUT]     Chunk stats: MultiplayerChunkCache: 55
2014-09-20 18:58:40 [INFO] [STDOUT]     Level seed: 0
2014-09-20 18:58:40 [INFO] [STDOUT]     Level generator: ID 01 - flat, ver 0. Features enabled: false
2014-09-20 18:58:40 [INFO] [STDOUT]     Level generator options: 
2014-09-20 18:58:40 [INFO] [STDOUT]     Level spawn location: World: (-293,4,584), Chunk: (at 11,0,8 in -19,36; contains blocks -304,0,576 to -289,255,591), Region: (-1,1; contains chunks -32,32 to -1,63, blocks -512,0,512 to -1,255,1023)
2014-09-20 18:58:40 [INFO] [STDOUT]     Level time: 62245 game time, 4074 day time
2014-09-20 18:58:40 [INFO] [STDOUT]     Level dimension: 0
2014-09-20 18:58:40 [INFO] [STDOUT]     Level storage version: 0x00000 - Unknown?
2014-09-20 18:58:40 [INFO] [STDOUT]     Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
2014-09-20 18:58:40 [INFO] [STDOUT]     Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
2014-09-20 18:58:40 [INFO] [STDOUT]     Forced entities: 22 total; [EntitySlime['Слизень'/38, l='MpServer', x=-276,23, y=4,00, z=605,15], EntityItem['item.item.arrow'/4, l='MpServer', x=-390,69, y=4,13, z=620,00], EntitySlime['Слизень'/39, l='MpServer', x=-279,88, y=4,00, z=614,74], EntitySlime['Слизень'/37, l='MpServer', x=-284,41, y=4,00, z=540,65], EntityBat['Летучая мышь'/11, l='MpServer', x=-336,75, y=15,10, z=598,56], EntityXPOrb['Сфера опыта'/12, l='MpServer', x=-11080,00, y=130,97, z=19250,00], EntityItem['item.item.slimeball'/13, l='MpServer', x=-343,38, y=5,13, z=611,03], EntityXPOrb['Сфера опыта'/14, l='MpServer', x=-10958,00, y=162,97, z=19526,00], EntitySlime['Слизень'/15, l='MpServer', x=-324,58, y=4,46, z=530,26], EntityClientPlayerMP['Player375'/72, l='MpServer', x=-342,93, y=5,62, z=577,37], EntityItem['item.item.rottenFlesh'/17, l='MpServer', x=-333,41, y=4,13, z=629,97], EntityXPOrb['Сфера опыта'/16, l='MpServer', x=-10528,00, y=130,97, z=19194,00], EntityItem['item.item.rottenFlesh'/21, l='MpServer', x=-317,03, y=4,13, z=571,66], EntitySlime['Слизень'/20, l='MpServer', x=-314,63, y=4,00, z=573,63], EntityItem['item.item.bone'/23, l='MpServer', x=-316,97, y=4,13, z=636,06], EntityChicken['Курица'/22, l='MpServer', x=-319,19, y=4,00, z=627,66], EntityXPOrb['Сфера опыта'/24, l='MpServer', x=-10044,00, y=131,19, z=20226,00], EntitySlime['Слизень'/27, l='MpServer', x=-297,99, y=4,00, z=590,70], EntitySkeleton['Скелет'/29, l='MpServer', x=-290,47, y=5,00, z=617,94], EntitySlime['Слизень'/28, l='MpServer', x=-289,31, y=5,00, z=590,98], EntityItem['item.item.bone'/31, l='MpServer', x=-297,69, y=4,13, z=637,34], EntityItem['item.item.arrow'/30, l='MpServer', x=-296,53, y=4,13, z=637,53]]
2014-09-20 18:58:40 [INFO] [STDOUT]     Retry entities: 0 total; []
2014-09-20 18:58:40 [INFO] [STDOUT]     Server brand: fml,forge
2014-09-20 18:58:40 [INFO] [STDOUT]     Server type: Integrated singleplayer server
2014-09-20 18:58:40 [INFO] [STDOUT] Stacktrace:
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:440)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2312)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.Minecraft.run(Minecraft.java:863)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.client.main.Main.main(Main.java:93)
2014-09-20 18:58:40 [INFO] [STDOUT]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2014-09-20 18:58:40 [INFO] [STDOUT]     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2014-09-20 18:58:40 [INFO] [STDOUT]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2014-09-20 18:58:40 [INFO] [STDOUT]     at java.lang.reflect.Method.invoke(Unknown Source)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
2014-09-20 18:58:40 [INFO] [STDOUT]     at net.minecraft.launchwrapper.Launch.main(Launch.java:27)
2014-09-20 18:58:40 [INFO] [STDOUT] 
2014-09-20 18:58:40 [INFO] [STDOUT] -- System Details --
2014-09-20 18:58:40 [INFO] [STDOUT] Details:
2014-09-20 18:58:40 [INFO] [STDOUT]     Minecraft Version: 1.6.4
2014-09-20 18:58:40 [INFO] [STDOUT]     Operating System: Windows 8.1 (amd64) version 6.3
2014-09-20 18:58:40 [INFO] [STDOUT]     Java Version: 1.7.0_67, Oracle Corporation
2014-09-20 18:58:40 [INFO] [STDOUT]     Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
2014-09-20 18:58:40 [INFO] [STDOUT]     Memory: 775318376 bytes (739 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB)
2014-09-20 18:58:40 [INFO] [STDOUT]     JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
2014-09-20 18:58:40 [INFO] [STDOUT]     AABB Pool Size: 21635 (1211560 bytes; 1 MB) allocated, 2401 (134456 bytes; 0 MB) used
2014-09-20 18:58:40 [INFO] [STDOUT]     Suspicious classes: FML and Forge are installed
2014-09-20 18:58:40 [INFO] [STDOUT]     IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
2014-09-20 18:58:40 [INFO] [STDOUT]     FML: MCP v8.11 FML v6.4.49.965 Minecraft Forge 9.11.1.965 4 mods loaded, 4 mods active
2014-09-20 18:58:40 [INFO] [STDOUT]     mcp{8.09} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
2014-09-20 18:58:40 [INFO] [STDOUT]     FML{6.4.49.965} [Forge Mod Loader] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
2014-09-20 18:58:40 [INFO] [STDOUT]     Forge{9.11.1.965} [Minecraft Forge] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
2014-09-20 18:58:40 [INFO] [STDOUT]     citytext{0.0.01} [City Textures] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
2014-09-20 18:58:40 [INFO] [STDOUT]     Launched Version: 1.6
2014-09-20 18:58:40 [INFO] [STDOUT]     LWJGL: 2.9.0
2014-09-20 18:58:40 [INFO] [STDOUT]     OpenGL: Intel(R) HD Graphics 4600 GL version 4.2.0 - Build 10.18.10.3368, Intel
2014-09-20 18:58:40 [INFO] [STDOUT]     Is Modded: Definitely; Client brand changed to 'fml,forge'
2014-09-20 18:58:40 [INFO] [STDOUT]     Type: Client (map_client.txt)
2014-09-20 18:58:40 [INFO] [STDOUT]     Resource Pack: Default
2014-09-20 18:58:40 [INFO] [STDOUT]     Current Language: Русский (Россия)
2014-09-20 18:58:40 [INFO] [STDOUT]     Profiler Position: N/A (disabled)
2014-09-20 18:58:40 [INFO] [STDOUT]     Vec3 Pool Size: 396 (22176 bytes; 0 MB) allocated, 396 (22176 bytes; 0 MB) used
2014-09-20 18:58:40 [INFO] [STDOUT] #@!@# Game crashed! Crash report saved to: #@!@# C:\MOD MAINCRAFT\forge\mcp\jars\.\crash-reports\crash-2014-09-20_18.58.40-client.txt
2014-09-20 18:58:40 [INFO] [Minecraft-Server] Stopping server
2014-09-20 18:58:40 [INFO] [Minecraft-Server] Saving players
AL lib: (EE) alc_cleanup: 1 device not closed
 
Мда... Тут можно только сказать, то что ты сделал, ему не нравиться как это сделал. Точного ответа нет, а примера нет ещё у меня (сейчас попробую у себя).
 
timaxa007, спасибо, а я пока попробую чего-нибудь у себя покрутить там...
 
У меня вот так вот получилось:
Код:
public class BlockPaneWood extends BlockPane {

public BlockPaneWood(int id) {
super(id, "timaxa007:woodFrame", "timaxa007:woodFrame", Material.wood, true);
setHardness(5.0F);
setResistance(10.0F);
setUnlocalizedName("pane_wood");
}

}
 
Код:
super(id, "modid:testBlock1", "modid:testBlock2", Material.wood, true);
id - это ид блока,
"modid:testBlock1" - присваивание основной текстуры,
"modid:testBlock2" - присваивание побочной текстуры (предположительно ребро панели),
Material.wood - Материал блока,
true - типа когда у текстуры есть типа дыра(-ы) (типа стекла или железной решётки), если нет то false.
 
Ооооооо... Вот же я тормоз! Спасибо огромное! А я еще со своим кодом (дали мне) пытался понять, что за две пары кавычек!
[merge_posts_bbcode]Добавлено: 20.09.2014 20:41:44[/merge_posts_bbcode]

Как отлично. А может вы мне еще со ступенями поможете? :happy:
 
Не стал ещё создавать один файл, сделал в этом-же. Получилось так:
Код:
public class BlockPaneWood extends BlockStairs {

public BlockPaneWood(int id) {
super(id, Block.whiteStone, 0);
setLightOpacity(0);
setUnlocalizedName("pane_wood");
}

}
setLightOpacity(0); - типа нужно, чтобы не было проблем с тенями внутри них.
Текстура унаследоваться в данном случаи, от "Block.whiteStone".
[merge_posts_bbcode]Добавлено: 20.09.2014 20:00:59[/merge_posts_bbcode]

Старый вариант был сделан на 1.5.2, потом переделал и вроде как работает на 1.6.4, но я его всё равно удалю, буду ставить новые.
Код:
block_door_wood_color_black = new BlockDoorWoodColor(block_door_wood_color_black_blockID, "Black").setUnlocalizedName("BlockDoorWoodColorBlack");
block_door_wood_color_blue = new BlockDoorWoodColor(block_door_wood_color_blue_blockID, "Blue").setUnlocalizedName("BlockDoorWoodColorBlue");
block_door_wood_color_brown = new BlockDoorWoodColor(block_door_wood_color_brown_blockID, "Brown").setUnlocalizedName("BlockDoorWoodColorBrown");
block_door_wood_color_cyan = new BlockDoorWoodColor(block_door_wood_color_cyan_blockID, "Cyan").setUnlocalizedName("BlockDoorWoodColorCyan");
block_door_wood_color_gray = new BlockDoorWoodColor(block_door_wood_color_gray_blockID, "Gray").setUnlocalizedName("BlockDoorWoodColorGray");
block_door_wood_color_green = new BlockDoorWoodColor(block_door_wood_color_green_blockID, "Green").setUnlocalizedName("BlockDoorWoodColorGreen");
block_door_wood_color_light_blue = new BlockDoorWoodColor(block_door_wood_color_light_blue_blockID, "LightBlue").setUnlocalizedName("BlockDoorWoodColorLightBlue");
block_door_wood_color_light_gray = new BlockDoorWoodColor(block_door_wood_color_light_gray_blockID, "LightGray").setUnlocalizedName("BlockDoorWoodColorLightGray");
block_door_wood_color_light_green = new BlockDoorWoodColor(block_door_wood_color_light_green_blockID, "LightGreen").setUnlocalizedName("BlockDoorWoodColorLightGreen");
block_door_wood_color_magenta = new BlockDoorWoodColor(block_door_wood_color_magenta_blockID, "Magenta").setUnlocalizedName("BlockDoorWoodColorMagenta");
block_door_wood_color_orange = new BlockDoorWoodColor(block_door_wood_color_orange_blockID, "Orange").setUnlocalizedName("BlockDoorWoodColorOrange");
block_door_wood_color_pink = new BlockDoorWoodColor(block_door_wood_color_pink_blockID, "Pink").setUnlocalizedName("BlockDoorWoodColorPink");
block_door_wood_color_purple = new BlockDoorWoodColor(block_door_wood_color_purple_blockID, "Purple").setUnlocalizedName("BlockDoorWoodColorPurple");
block_door_wood_color_red = new BlockDoorWoodColor(block_door_wood_color_red_blockID, "Red").setUnlocalizedName("BlockDoorWoodColorRed");
block_door_wood_color_white = new BlockDoorWoodColor(block_door_wood_color_white_blockID, "White").setUnlocalizedName("BlockDoorWoodColorWhite");
block_door_wood_color_yellow = new BlockDoorWoodColor(block_door_wood_color_yellow_blockID, "Yellow").setUnlocalizedName("BlockDoorWoodColorYellow");

Код:
public class BlockDoorWoodColor extends Block {
private static final String[] doorIconNames = new String[] {
"doorWood_down", 
"doorWood_up", 
"doorIron_lower", 
"doorIron_upper"};

private static String doorTypeColor;
@SideOnly(Side.CLIENT)
private Icon[] iconArray;

public BlockDoorWoodColor(int id, String par2) {
super(id, Material.wood);
this.setStepSound(soundWoodFootstep);
//this.setCreativeTab(PackFurniture.tabFurniturePack);
//this.setHardness(0.5F);
//this.setResistance(10.0F);
//this.setLightOpacity(4);
float f = 0.5F;
float f1 = 1.0F;
this.setBlockBounds(0.5F-f, 0.0F, 0.5F-f, 0.5F+f, f1, 0.5F+f);
this.doorTypeColor = par2;
}

@SideOnly(Side.CLIENT)
public Icon getIcon(int par1, int par2) {return this.iconArray[0];}

@SideOnly(Side.CLIENT)
public Icon getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) {
if (par5 !=  1 && par5 !=  0) {
int i1 = this.getFullMetadata(par1IBlockAccess, par2, par3, par4);
int j1 = i1 & 3;
boolean flag = (i1 & 4) !=  0;
boolean flag1 = false;
boolean flag2 = (i1 & 8) !=  0;

if (flag) {
if (j1 == 0 && par5 == 2) {flag1 = !flag1;}
else if (j1 == 1 && par5 == 5) {flag1 = !flag1;}
else if (j1 == 2 && par5 == 3) {flag1 = !flag1;}
else if (j1 == 3 && par5 == 4) {flag1 = !flag1;}
}else{
if (j1 == 0 && par5 == 5) {flag1 = !flag1;}
else if (j1 == 1 && par5 == 3) {flag1 = !flag1;}
else if (j1 == 2 && par5 == 4) {flag1 = !flag1;}
else if (j1 == 3 && par5 == 2) {flag1 = !flag1;}

if ((i1 & 16) !=  0) {flag1 = !flag1;}
}
return this.iconArray[(flag1 ? doorIconNames.length : 0)+(flag2 ? 1 : 0)];
}else{return this.iconArray[0];}
}

public boolean isOpaqueCube() {return false;}

public boolean getBlocksMovement(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) {
int l = this.getFullMetadata(par1IBlockAccess, par2, par3, par4);
return (l & 4) !=  0;
}

public boolean renderAsNormalBlock() {return false;}

public int getRenderType() {return 7;}

@SideOnly(Side.CLIENT)
public AxisAlignedBB getSelectedBoundingBoxFromPool(World par1World, int par2, int par3, int par4) {
this.setBlockBoundsBasedOnState(par1World, par2, par3, par4);
return super.getSelectedBoundingBoxFromPool(par1World, par2, par3, par4);
}

public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4) {
this.setBlockBoundsBasedOnState(par1World, par2, par3, par4);
return super.getCollisionBoundingBoxFromPool(par1World, par2, par3, par4);
}

public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) {
this.setDoorRotation(this.getFullMetadata(par1IBlockAccess, par2, par3, par4));
}

public int getDoorOrientation(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) {
return this.getFullMetadata(par1IBlockAccess, par2, par3, par4) & 3;
}

public boolean isDoorOpen(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) {
return (this.getFullMetadata(par1IBlockAccess, par2, par3, par4) & 4) !=  0;
}

private void setDoorRotation(int par1) {
float f = 0.1875F;
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F);
int j = par1 & 3;
boolean flag = (par1 & 4) !=  0;
boolean flag1 = (par1 & 16) !=  0;

if (j == 0) {
if (flag) {
if (!flag1) {this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f);}
else{this.setBlockBounds(0.0F, 0.0F, 1.0F-f, 1.0F, 1.0F, 1.0F);}
}
else{this.setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F);}
}
else if (j == 1) {
if (flag) {
if (!flag1) {this.setBlockBounds(1.0F-f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);}
else{this.setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F);}
}
else{this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f);}
}
else if (j == 2) {
if (flag) {
if (!flag1) {this.setBlockBounds(0.0F, 0.0F, 1.0F-f, 1.0F, 1.0F, 1.0F);}
else{this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f);}
}
else{this.setBlockBounds(1.0F-f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);}
}
else if (j == 3) {
if (flag) {
if (!flag1) {this.setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F);}
else{this.setBlockBounds(1.0F-f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);}
}
else{this.setBlockBounds(0.0F, 0.0F, 1.0F-f, 1.0F, 1.0F, 1.0F);
}
}
}

public void onBlockClicked(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) {}

public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) {
if (this.blockMaterial == Material.iron) {return false;}
else{
int i1 = this.getFullMetadata(par1World, par2, par3, par4);
int j1 = i1 & 7;
j1 ^=  4;

if ((i1 & 8) == 0) {
par1World.setBlockMetadataWithNotify(par2, par3, par4, j1, 2);
par1World.markBlockRangeForRenderUpdate(par2, par3, par4, par2, par3, par4);
}
else{
par1World.setBlockMetadataWithNotify(par2, par3-1, par4, j1, 2);
par1World.markBlockRangeForRenderUpdate(par2, par3-1, par4, par2, par3, par4);
}
par1World.playAuxSFXAtEntity(par5EntityPlayer, 1003, par2, par3, par4, 0);
return true;
}
}

public void onPoweredBlockChange(World par1World, int par2, int par3, int par4, boolean par5) {
int l = this.getFullMetadata(par1World, par2, par3, par4);
boolean flag1 = (l & 4) !=  0;

if (flag1 !=  par5) {
int i1 = l & 7;
i1 ^=  4;

if ((l & 8) == 0) {
par1World.setBlockMetadataWithNotify(par2, par3, par4, i1, 2);
par1World.markBlockRangeForRenderUpdate(par2, par3, par4, par2, par3, par4);
}
else{
par1World.setBlockMetadataWithNotify(par2, par3-1, par4, i1, 2);
par1World.markBlockRangeForRenderUpdate(par2, par3-1, par4, par2, par3, par4);
}
par1World.playAuxSFXAtEntity((EntityPlayer)null, 1003, par2, par3, par4, 0);
}
}

public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5) {
int i1 = par1World.getBlockMetadata(par2, par3, par4);

if ((i1 & 8) == 0) {
boolean flag = false;

if (par1World.getBlockId(par2, par3+1, par4) !=  this.blockID) {
par1World.setBlockToAir(par2, par3, par4);
flag = true;
}

if (!par1World.doesBlockHaveSolidTopSurface(par2, par3-1, par4)) {
par1World.setBlockToAir(par2, par3, par4);
flag = true;

if (par1World.getBlockId(par2, par3+1, par4) == this.blockID) {par1World.setBlockToAir(par2, par3+1, par4);}
}

if (flag) {
if (!par1World.isRemote) {this.dropBlockAsItem(par1World, par2, par3, par4, i1, 0);}
}else{
boolean flag1 = par1World.isBlockIndirectlyGettingPowered(par2, par3, par4) || par1World.isBlockIndirectlyGettingPowered(par2, par3+1, par4);

if ((flag1 || par5 > 0 && Block.blocksList[par5].canProvidePower()) && par5 !=  this.blockID) {
this.onPoweredBlockChange(par1World, par2, par3, par4, flag1);
}
}
}else{
if (par1World.getBlockId(par2, par3-1, par4) !=  this.blockID) {par1World.setBlockToAir(par2, par3, par4);}
if (par5 > 0 && par5 !=  this.blockID) {this.onNeighborBlockChange(par1World, par2, par3-1, par4, par5);}
}
}

public int idDropped(int par1, Random par2Random, int par3) {
return (par1 & 8) !=  0 ? 0 : (this.blockMaterial == Material.iron ? Item.doorIron.itemID : Item.doorWood.itemID);
}

public MovingObjectPosition collisionRayTrace(World par1World, int par2, int par3, int par4, Vec3 par5Vec3, Vec3 par6Vec3) {
this.setBlockBoundsBasedOnState(par1World, par2, par3, par4);
return super.collisionRayTrace(par1World, par2, par3, par4, par5Vec3, par6Vec3);
}

public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) {
return par3 >=  255 ? false : par1World.doesBlockHaveSolidTopSurface(par2, par3-1, par4) && super.canPlaceBlockAt(par1World, par2, par3, par4) && super.canPlaceBlockAt(par1World, par2, par3+1, par4);
}

public int getMobilityFlag() {return 1;}

public int getFullMetadata(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) {
int l = par1IBlockAccess.getBlockMetadata(par2, par3, par4);
boolean flag = (l & 8) !=  0;
int i1;
int j1;

if (flag) {
i1 = par1IBlockAccess.getBlockMetadata(par2, par3-1, par4);
j1 = l;
}else{
i1 = l;
j1 = par1IBlockAccess.getBlockMetadata(par2, par3+1, par4);
}

boolean flag1 = (j1 & 1) !=  0;
return i1 & 7 | (flag ? 8 : 0) | (flag1 ? 16 : 0);
}
/*
@SideOnly(Side.CLIENT)
public int idPicked(World par1World, int par2, int par3, int par4) {
return this.blockMaterial == Material.iron ? Item.doorIron.itemID : Item.doorWood.itemID;
}
*/
public void onBlockHarvested(World par1World, int par2, int par3, int par4, int par5, EntityPlayer par6EntityPlayer) {
if (par6EntityPlayer.capabilities.isCreativeMode && (par5 & 8) !=  0 && par1World.getBlockId(par2, par3-1, par4) == this.blockID) {
par1World.setBlockToAir(par2, par3-1, par4);
}
}


@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister ir) {
this.iconArray = new Icon[doorIconNames.length * 2];
if (this.blockID == PackFurniture.proxy.block_door_wood_color_black.blockID) {doorTypeColor = "black";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_blue.blockID) {doorTypeColor = "blue";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_brown.blockID) {doorTypeColor = "brown";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_cyan.blockID) {doorTypeColor = "cyan";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_gray.blockID) {doorTypeColor = "gray";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_green.blockID) {doorTypeColor = "green";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_light_blue.blockID) {doorTypeColor = "light_blue";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_light_gray.blockID) {doorTypeColor = "light_gray";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_light_green.blockID) {doorTypeColor = "light_green";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_magenta.blockID) {doorTypeColor = "magenta";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_orange.blockID) {doorTypeColor = "orange";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_pink.blockID) {doorTypeColor = "pink";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_purple.blockID) {doorTypeColor = "purple";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_red.blockID) {doorTypeColor = "red";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_white.blockID) {doorTypeColor = "white";} 
else if (this.blockID == PackFurniture.proxy.block_door_wood_color_yellow.blockID) {doorTypeColor = "yellow";} 
else {doorTypeColor = "none";}

this.iconArray[0] = ir.registerIcon("timaxa007:" + "door/" + "doorWood_down_" + doorTypeColor);
this.iconArray[1] = ir.registerIcon("timaxa007:" + "door/" + "doorWood_up_" + doorTypeColor);
this.iconArray[2] = ir.registerIcon("timaxa007:" + "door/" + "doorWood_down_" + doorTypeColor);
this.iconArray[3] = ir.registerIcon("timaxa007:" + "door/" + "doorWood_up_" + doorTypeColor);
for(byte i = 0; i < doorIconNames.length; ++i) {
this.iconArray[i + doorIconNames.length] = new IconFlipped(this.iconArray[i], true, false);
}
}

}
 
timaxa007, вот спасибо! Еще проще, чем найденный мною код) А как сделать, чтобы текстура наследовалась от блока, введенного мною в мод?
 
Типа заменить "Block.whiteStone" на свой блок, наподобие:
Код:
super(id, MyMod.blockTest, 0);
И чтобы переменая blockIcon был указан путь к текстуре, можно использовать это:
Код:
setTextureName("modid:testBlock");
... а можно:
Код:
public void registerIcons(IconRegister ir) {
blockIcon = ir.registerIcon("modid:testBlocks");
}
и т.п.
 
timaxa007, нуу, огромное спасибо) Огромную помощь оказали) Теперь про дверь спрашивать даже как-то и неудобно) А то я же нупик совсем в этом. Попытался что-то сковырять сам из кода - оказалась дверь невидимая и выпадала, если ставил рядом блок...
 
В 16 сообщении этой темы в сполере - про дверь писал, но забыл добавить, что лучше ставить дверь итемом. Так как должна строиться структура, блок двери плохо строиться структура двери.
Код:
public class ItemSetupBlock extends Item {

@SideOnly(Side.CLIENT) private Icon[] iconArray;

public static final String[] typeSetupBlocks = new String[] {
"door_wood_black", 
"door_wood_blue", 
"door_wood_brown", 
"door_wood_cyan", 
"door_wood_gray", 
"door_wood_green", 
"door_wood_light_blue", 
"door_wood_light_gray", 
"door_wood_light_green", 
"door_wood_magenta", 
"door_wood_orange", 
"door_wood_pink", 
"door_wood_purple", 
"door_wood_red", 
"door_wood_white", 
"door_wood_yellow"
};

public ItemSetupBlock(int id) {
super(id);
setHasSubtypes(true);
setMaxDamage(0);
setMaxStackSize(1);
setCreativeTab(PackFurniture.proxy.tabFurniturePack);
setUnlocalizedName("item_setup_block");
}

public boolean onItemUse(ItemStack is, EntityPlayer player, World wrd, int x, int y, int z, int meta, float par8, float par9, float par10) {
if (meta != 1) {return false;}
else{
++y;
Block block;
if (is.getItemDamage() == 0) {block = PackFurniture.proxy.block_door_wood_color_black;}
else if (is.getItemDamage() == 1) {block = PackFurniture.proxy.block_door_wood_color_blue;}
else if (is.getItemDamage() == 2) {block = PackFurniture.proxy.block_door_wood_color_brown;}
else if (is.getItemDamage() == 3) {block = PackFurniture.proxy.block_door_wood_color_cyan;}
else if (is.getItemDamage() == 4) {block = PackFurniture.proxy.block_door_wood_color_gray;}
else if (is.getItemDamage() == 5) {block = PackFurniture.proxy.block_door_wood_color_green;}
else if (is.getItemDamage() == 6) {block = PackFurniture.proxy.block_door_wood_color_light_blue;}
else if (is.getItemDamage() == 7) {block = PackFurniture.proxy.block_door_wood_color_light_gray;}
else if (is.getItemDamage() == 8) {block = PackFurniture.proxy.block_door_wood_color_light_green;}
else if (is.getItemDamage() == 9) {block = PackFurniture.proxy.block_door_wood_color_magenta;}
else if (is.getItemDamage() == 10) {block = PackFurniture.proxy.block_door_wood_color_orange;}
else if (is.getItemDamage() == 11) {block = PackFurniture.proxy.block_door_wood_color_pink;}
else if (is.getItemDamage() == 12) {block = PackFurniture.proxy.block_door_wood_color_purple;}
else if (is.getItemDamage() == 13) {block = PackFurniture.proxy.block_door_wood_color_red;}
else if (is.getItemDamage() == 14) {block = PackFurniture.proxy.block_door_wood_color_white;}
else if (is.getItemDamage() == 15) {block = PackFurniture.proxy.block_door_wood_color_yellow;}
else{block = PackFurniture.proxy.block_door_wood_color_yellow;}

if (player.canPlayerEdit(x, y, z, meta, is) && player.canPlayerEdit(x, y+1, z, meta, is)) {
if (!block.canPlaceBlockAt(wrd, x, y, z)) {return false;}
else{
int i1 = MathHelper.floor_double((double)((player.rotationYaw+180.0F) * 4.0F / 360.0F)-0.5D) & 3;
placeDoorWoodBlock(wrd, x, y, z, i1, block);
--is.stackSize;
return true;
}
}else{return false;}
}
}

public static void placeDoorWoodBlock(World par0World, int par1, int par2, int par3, int par4, Block par5Block) {
byte b0 = 0;
byte b1 = 0;

if (par4 == 0) {b1 = 1;}
if (par4 == 1) {b0 = -1;}
if (par4 == 2) {b1 = -1;}
if (par4 == 3) {b0 = 1;}

int i1 = (par0World.isBlockNormalCube(par1-b0, par2, par3-b1) ? 1 : 0)+(par0World.isBlockNormalCube(par1-b0, par2+1, par3-b1) ? 1 : 0);
int j1 = (par0World.isBlockNormalCube(par1+b0, par2, par3+b1) ? 1 : 0)+(par0World.isBlockNormalCube(par1+b0, par2+1, par3+b1) ? 1 : 0);
boolean flag = par0World.getBlockId(par1-b0, par2, par3-b1) == par5Block.blockID || par0World.getBlockId(par1-b0, par2+1, par3-b1) == par5Block.blockID;
boolean flag1 = par0World.getBlockId(par1+b0, par2, par3+b1) == par5Block.blockID || par0World.getBlockId(par1+b0, par2+1, par3+b1) == par5Block.blockID;
boolean flag2 = false;

if (flag && !flag1) {flag2 = true;}
else if (j1 > i1) {flag2 = true;}

par0World.setBlock(par1, par2, par3, par5Block.blockID, par4, 2);
par0World.setBlock(par1, par2+1, par3, par5Block.blockID, 8 | (flag2 ? 1 : 0), 2);
par0World.notifyBlocksOfNeighborChange(par1, par2, par3, par5Block.blockID);
par0World.notifyBlocksOfNeighborChange(par1, par2+1, par3, par5Block.blockID);
}

@SideOnly(Side.CLIENT)
public Icon getIconFromDamage(int par1) {
int j = MathHelper.clamp_int(par1, 0, (typeSetupBlocks.length)-1);
return iconArray[j];
}

public String getUnlocalizedName(ItemStack is) {
int i = MathHelper.clamp_int(is.getItemDamage(), 0, (typeSetupBlocks.length)-1);
return super.getUnlocalizedName()+"."+typeSetupBlocks[i];
}

@SideOnly(Side.CLIENT)
public void getSubItems(int id, CreativeTabs table, List list) {
for(int j = 0;j<typeSetupBlocks.length;++j) {
list.add(new ItemStack(id, 1, j));
}
}

@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister ir) {
iconArray = new Icon[typeSetupBlocks.length];

for(int i = 0;i<typeSetupBlocks.length;++i) {
iconArray[i]  =  ir.registerIcon("timaxa007:" + "door/" + typeSetupBlocks[i]);
}
}

}
А так, я с дверью больше помочь не смогу.
 
Назад
Сверху