From f9d7cac243f6bd42adfc17726bc2f65d23616ff9 Mon Sep 17 00:00:00 2001 From: Zach Date: Sun, 16 Mar 2014 18:40:38 -0400 Subject: [PATCH 01/80] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b65a8e..718993c 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,7 @@ ironchest Iron Chest minecraft mod - now dormant -This was the home of IronChest a GPL v3 licensed mod by cpw. It lies dormant, awaiting someone to awaken it again. +a GPL v3 licensed mod by cpw + +Currently Maintained by ProgWML6 + From 4b69ec3a75f10d455654ea2270b90bd58d3ed06e Mon Sep 17 00:00:00 2001 From: Zach Date: Sun, 16 Mar 2014 19:25:58 -0400 Subject: [PATCH 02/80] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 718993c..f149a3f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ironchest ========= -Iron Chest minecraft mod - now dormant +Iron Chest minecraft mod a GPL v3 licensed mod by cpw From 9a94e1cbf6a610310035a2812270cbcb7b205bde Mon Sep 17 00:00:00 2001 From: Zach Date: Sun, 16 Mar 2014 19:30:02 -0400 Subject: [PATCH 03/80] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f149a3f..7c2d0e9 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,4 @@ a GPL v3 licensed mod by cpw Currently Maintained by ProgWML6 +See http://files.minecraftforge.net/IronChests2/ for downloads From 3b393684968e18fa384d2c5c2bd2fef494a99a7e Mon Sep 17 00:00:00 2001 From: Zach Date: Sun, 16 Mar 2014 19:45:58 -0400 Subject: [PATCH 04/80] update repo location for POM --- build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 1a48096..f6403cc 100644 --- a/build.gradle +++ b/build.gradle @@ -125,14 +125,14 @@ uploadArchives { url 'https://github.com/cpw/IronChest' scm { - url 'https://github.com/cpw/IronChest' - connection 'scm:git:git://github.com/cpw/IronChest.git' - developerConnection 'scm:git:git@github.com:cpw/IronChest.git' + url 'https://github.com/progwml6/IronChest' + connection 'scm:git:git://github.com/progwml6/IronChest.git' + developerConnection 'scm:git:git@github.com:progwml6/IronChest.git' } issueManagement { system 'github' - url 'https://github.com/cpw/IronChest/issues' + url 'https://github.com/progwml6/IronChest/issues' } licenses { From 77ed46ffe83f01e4e7352e269182357ec8e44b92 Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Wed, 19 Mar 2014 23:26:10 +0000 Subject: [PATCH 05/80] Update --- .../textures/blocks/dirtchest9000_front.png | Bin 0 -> 3194 bytes .../textures/blocks/dirtchest9000_side.png | Bin 0 -> 3202 bytes .../textures/blocks/dirtchest9000_top.png | Bin 0 -> 3212 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png create mode 100644 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png create mode 100644 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1e1fdd307ba264954c8c52e8d9d20737923625 GIT binary patch literal 3194 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png new file mode 100644 index 0000000000000000000000000000000000000000..ebda19fd06b24959429d20ffb2f6fc6d9220cad6 GIT binary patch literal 3202 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png new file mode 100644 index 0000000000000000000000000000000000000000..a92c5f17eb6c7855a2f9baa3a6f7fd454b5b81e4 GIT binary patch literal 3212 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 Date: Sun, 30 Mar 2014 20:48:46 -0400 Subject: [PATCH 06/80] Rogue apostrophe --- src/main/java/cpw/mods/ironchest/IronChest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 27737e7..f3b0d16 100644 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -49,7 +49,7 @@ public class IronChest { } catch (Exception e) { - FMLLog.log(Level.ERROR, e, "IronChest has a problem loading it's configuration"); + FMLLog.log(Level.ERROR, e, "IronChest has a problem loading its configuration"); } finally { From 103a22860b5e35306e60a9fb78e3be2b7043d2cd Mon Sep 17 00:00:00 2001 From: progwml6 Date: Fri, 4 Apr 2014 20:49:09 -0400 Subject: [PATCH 07/80] restore compatibility with inventory tweaks --- .../api/container/ChestContainer.java | 28 +++++++++++++++++++ .../mods/ironchest/ContainerIronChest.java | 7 +++++ 2 files changed, 35 insertions(+) create mode 100644 src/api/java/invtweaks/api/container/ChestContainer.java diff --git a/src/api/java/invtweaks/api/container/ChestContainer.java b/src/api/java/invtweaks/api/container/ChestContainer.java new file mode 100644 index 0000000..4722921 --- /dev/null +++ b/src/api/java/invtweaks/api/container/ChestContainer.java @@ -0,0 +1,28 @@ +package invtweaks.api.container; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * A marker for containers that have a chest-like persistant storage component. Enables the Inventroy Tweaks sorting + * buttons for this container. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface ChestContainer { + // Size of a chest row + int rowSize() default 9; + + // Uses 'large chest' mode for sorting buttons + // (Renders buttons vertically down the right side of the GUI) + boolean isLargeChest() default false; + + // Annotation for method to get size of a chest row if it is not a fixed size for this container class + // Signature int func() + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface RowSizeCallback { + } +} \ No newline at end of file diff --git a/src/main/java/cpw/mods/ironchest/ContainerIronChest.java b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java index e4900cb..92f111d 100644 --- a/src/main/java/cpw/mods/ironchest/ContainerIronChest.java +++ b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java @@ -16,7 +16,9 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import invtweaks.api.container.ChestContainer; +@ChestContainer(isLargeChest = true) public class ContainerIronChest extends Container { private IronChestType type; private EntityPlayer player; @@ -115,4 +117,9 @@ public class ContainerIronChest extends Container { { return player; } + + @ChestContainer.RowSizeCallback + public int getNumColumns() { + return type.getRowLength(); + } } From 3ae2335887dc732b9aebf5e827883f5d6d913a6e Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:39:56 +0400 Subject: [PATCH 08/80] Create pt_PT.lang --- .../resources/assets/ironchest/lang/pt_PT.lang | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/pt_PT.lang diff --git a/src/main/resources/assets/ironchest/lang/pt_PT.lang b/src/main/resources/assets/ironchest/lang/pt_PT.lang new file mode 100644 index 0000000..cb29cb2 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/pt_PT.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Baú de Ferro +tile.ironchest:GOLD.name=Baú de Ouro +tile.ironchest:DIAMOND.name=Baú de Diamante +tile.ironchest:COPPER.name=Baú de Cobre +tile.ironchest:SILVER.name=Baú de Prata +tile.ironchest:CRYSTAL.name=Baú de Cristal +tile.ironchest:OBSIDIAN.name=Baú de Obsidiana + +item.ironchest:IRONGOLD.name=Melhoria de Baú de Ferro para Ouro +item.ironchest:GOLDDIAMOND.name=Melhoria de Baú de Ouro para Diamante +item.ironchest:COPPERSILVER.name=Melhoria de Baú de Cobre para Prata +item.ironchest:SILVERGOLD.name=Melhoria de Baú de Prata para Ouro +item.ironchest:COPPERIRON.name=Melhoria de Baú de Cobre para Ferro +item.ironchest:DIAMONDCRYSTAL.name=Melhoria de Baú de Diamante para Cristal +item.ironchest:WOODIRON.name=Melhoria de Baú de Madeira para Ferro +item.ironchest:WOODCOPPER.name=Melhoria de Baú de Madeira para Cobre +item.ironchest:DIAMONDOBSIDIAN.name=Melhoria de Baú de Diamante para Obsidiana From 27a35b0b43faf6da39e6442a3a092f10fd5d012f Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:41:39 +0400 Subject: [PATCH 09/80] Create pt_BR.lang --- .../assets/ironchest/lang/pt_BR.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/pt_BR.lang diff --git a/src/main/resources/assets/ironchest/lang/pt_BR.lang b/src/main/resources/assets/ironchest/lang/pt_BR.lang new file mode 100644 index 0000000..38c0e34 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/pt_BR.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Baú de Ferro +tile.ironchest:GOLD.name=Baú de Ouro +tile.ironchest:DIAMOND.name=Baú de Diamante +tile.ironchest:COPPER.name=Baú de Cobre +tile.ironchest:SILVER.name=Baú de Prata +tile.ironchest:CRYSTAL.name=Baú de Cristal +tile.ironchest:OBSIDIAN.name=Baú de Obsidiana +tile.ironchest:DIRTCHEST9000.name=BaúDeSujeira 9000! + +item.ironchest:IRONGOLD.name=Aprimoramento de Baú de Ferro para Ouro +item.ironchest:GOLDDIAMOND.name=Aprimoramento de Baú de Ouro para Diamante +item.ironchest:COPPERSILVER.name=Aprimoramento de Baú de Cobre para Prata +item.ironchest:SILVERGOLD.name=Aprimoramento de Baú de Prata para Ouro +item.ironchest:COPPERIRON.name=Aprimoramento de Baú de Cobre para Ferro +item.ironchest:DIAMONDCRYSTAL.name=Aprimoramento de Baú de Diamante para Cristal +item.ironchest:WOODIRON.name=Aprimoramento de Baú de Madeira para Ferro +item.ironchest:WOODCOPPER.name=Aprimoramento de Baú de Madeira para Cobre +item.ironchest:DIAMONDOBSIDIAN.name=Aprimoramento de Baú de Diamante para Obsidiana + +book.ironchest:dirtchest9000.title=Como utilizar seu BaúDeSujeira 9000! +book.ironchest:dirtchest9000.page1=Bem-vindo ao seu novo BaúDeSujeira 9000! Esperamos que desfrute de muitos anos felizes de armazenagem de sua pilha de sujeira em nosso utilitário de armazenamento. +book.ironchest:dirtchest9000.page2=Uso: basta inserir o monte de sujeira de sua escolha no slot altamente receptivo e apreciar a grande conveniência de ter essa sujeira disponíveis para você, a qualquer momento que você passar pelo baú! +book.ironchest:dirtchest9000.page3=Esperamos que tenham gostado de rever este manual de instruções, e espero que você considere o uso de nossos produtos no futuro! Atenciosamente, manual do BaúDeSujeira 9000 escritores incorporados. +book.ironchest:dirtchest9000.page4=Garantia: Este produto não tem qualquer tipo de garantia. Sua sujeira pode não ser armazenada, pode vazar lentamente para o ambiente, ou alternativamente, pode não fazer absolutamente nada. +book.ironchest:dirtchest9000.page5=BaúDeSujeira 9000 é bom para o meio ambiente. Elimine este guia de forma responsável, e não o que você faz apenas lançando-o em alguma lava. Ficaríamos muito triste. From dc3098d00a00e0199723f8f291f144934c21c8f8 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:43:52 +0400 Subject: [PATCH 10/80] Create el_GR.lang --- .../resources/assets/ironchest/lang/el_GR.lang | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/el_GR.lang diff --git a/src/main/resources/assets/ironchest/lang/el_GR.lang b/src/main/resources/assets/ironchest/lang/el_GR.lang new file mode 100644 index 0000000..67285bb --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/el_GR.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Σιδερένιο Σεντούκι +tile.ironchest:GOLD.name=Χρυσό Σεντούκι +tile.ironchest:DIAMOND.name=Διαμαντένιο Σεντούκι +tile.ironchest:COPPER.name=Χάλκινο Σεντούκι +tile.ironchest:SILVER.name=Ασημένιο Σεντούκι +tile.ironchest:CRYSTAL.name=Κρυστάλλινο Σεντούκι +tile.ironchest:OBSIDIAN.name=Σεντούκι Οψιδιανού + +item.ironchest:IRONGOLD.name=Αναβάθμιση από Σιδερένιο σε Χρυσό Σεντούκι +item.ironchest:GOLDDIAMOND.name=Αναβάθμιση από Χρυσό σε Διαμαντένιο Σεντούκι +item.ironchest:COPPERSILVER.name=Αναβάθμιση από Χάλκινο σε Ασημένιο Σεντούκι +item.ironchest:SILVERGOLD.name=Αναβάθμιση από Ασημένιο σε Χρυσό Σεντούκι +item.ironchest:COPPERIRON.name=Αναβάθμιση από Χάλκινο σε Σιδερένιο Σεντούκι +item.ironchest:DIAMONDCRYSTAL.name=Αναβάθμιση από Διαμαντένιο σε Κρυστάλλινο Σεντούκι +item.ironchest:WOODIRON.name=Αναβάθμιση από Ξύλινο σε Σιδερένιο Σεντούκι +item.ironchest:WOODCOPPER.name=Αναβάθμιση από Ξύλινο σε Χάλκινο Σεντούκι +item.ironchest:DIAMONDOBSIDIAN.name=Αναβάθμιση από Διαμαντένιο σε Σεντούκι Οψιδιανού From 4c480dd8383df1d6e6c9d81e081629758f00d4a5 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:45:37 +0400 Subject: [PATCH 11/80] Create nl_NL.lang --- .../assets/ironchest/lang/nl_NL.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/nl_NL.lang diff --git a/src/main/resources/assets/ironchest/lang/nl_NL.lang b/src/main/resources/assets/ironchest/lang/nl_NL.lang new file mode 100644 index 0000000..fb3a2f5 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/nl_NL.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Ijzeren Kist +tile.ironchest:GOLD.name=Gouden Kist +tile.ironchest:DIAMOND.name=Diamanten Kist +tile.ironchest:COPPER.name=Koperen Kist +tile.ironchest:SILVER.name=Zilveren Kist +tile.ironchest:CRYSTAL.name=Kristallen Kist +tile.ironchest:OBSIDIAN.name=Obsidiaanen Kist +tile.ironchest:DIRTCHEST9000.name=Aarden Kist 9000! + +item.ironchest:IRONGOLD.name=Ijzeren naar Gouden Kist Transformatie +item.ironchest:GOLDDIAMOND.name=Gouden naar Diamanten Kist Transformatie +item.ironchest:COPPERSILVER.name=Koperen naar Zilveren Kist Transformatie +item.ironchest:SILVERGOLD.name=Zilveren naar Gouden Kist Transformatie +item.ironchest:COPPERIRON.name=Koperen naar Ijzeren Kist Transformatie +item.ironchest:DIAMONDCRYSTAL.name=Diamanten naar Kristallen Kist Transformatie +item.ironchest:WOODIRON.name=Houten naar Ijzeren Kist Transformatie +item.ironchest:WOODCOPPER.name=Houten naar Koperen Kist Transformatie +item.ironchest:DIAMONDOBSIDIAN.name=Diamanten naar Obsidiaanen Kist Transformatie + +book.ironchest:dirtchest9000.title=Hoe gebruik je uw Aarden Kist 9000! +book.ironchest:dirtchest9000.page1=Welkom voor uw nieuwe Aarden Kist 9000! We hopen dat je veel geluk zal beleven om uw hoop aarde te bewaren in onze stokeer faciliteit. +book.ironchest:dirtchest9000.page2=Gebruik: Plaats simpelweg uw hoop aarde naar uw keuze in de zeer ontvankelijke gleuf en geniet van de geriefelijkheid om dat hoop aarde altijd beschikbaar tot u te hebben, wanneer dan ook! +book.ironchest:dirtchest9000.page3=We hopen dat u heeft genoten om deze handleiding te lezen en we hopen dat u overweegt om onze producten in de toekomst te gebruiken! Met vriendelijke groeten, De Aarden Kist 9000 Handleiding Auteurs. +book.ironchest:dirtchest9000.page4=Garantie: Deze product biedt geen enkele garantie. Uw aarde kan mogenlijk niet gestockeerd worden, het kan langzaam verdampen of het kan ook helemaal niks doen. +book.ironchest:dirtchest9000.page5=Aarden Kist 9000 is mileuvriendelijk. Gelieve deze handleiding verantwoordlijk te ontdoen en gooi het niet zomaar in wat lava. We zouden zeer verdrietig zijn. From d0980a29770426a7389565ff9a9fd3c6b85b6c47 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:47:00 +0400 Subject: [PATCH 12/80] Create zh_CN.lang --- .../assets/ironchest/lang/zh_CN.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/zh_CN.lang diff --git a/src/main/resources/assets/ironchest/lang/zh_CN.lang b/src/main/resources/assets/ironchest/lang/zh_CN.lang new file mode 100644 index 0000000..974ada4 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/zh_CN.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=铁箱子 +tile.ironchest:GOLD.name=金箱子 +tile.ironchest:DIAMOND.name=钻石箱子 +tile.ironchest:COPPER.name=铜箱子 +tile.ironchest:SILVER.name=银箱子 +tile.ironchest:CRYSTAL.name=水晶箱子 +tile.ironchest:OBSIDIAN.name=黑曜石箱子 +tile.ironchest:DIRTCHEST9000.name=泥箱子9000! + +item.ironchest:IRONGOLD.name=升级:铁>金 +item.ironchest:GOLDDIAMOND.name=升级:金>钻石 +item.ironchest:COPPERSILVER.name=升级:铜>银 +item.ironchest:SILVERGOLD.name=升级:银>金 +item.ironchest:COPPERIRON.name=升级:铜>铁 +item.ironchest:DIAMONDCRYSTAL.name=升级:钻石>水晶 +item.ironchest:WOODIRON.name=升级:木>铁 +item.ironchest:WOODCOPPER.name=升级:木>铜 +item.ironchest:DIAMONDOBSIDIAN.name=升级:钻石>黑曜石 + +book.ironchest:dirtchest9000.title=傻瓜也一定会用的泥箱子9000! +book.ironchest:dirtchest9000.page1=欢迎使用这台全新的泥箱子9000!希望你能愉快地常年使用我们的设备来储存(大量)泥土(大雾)。 +book.ironchest:dirtchest9000.page2=使用方法: 把一组泥土丢进去就行了。每次您经过的时候都可以打开它(很方便地)取出来用。 +book.ironchest:dirtchest9000.page3=希望您阅读本手册愉快,并选择使用我们的产品。作为泥箱子9000手册作者我谨向您致以诚挚问候。 +book.ironchest:dirtchest9000.page4=质量保障: 恕本产品不提供任何质量保障。您的泥土或者能安全存储其内,或者会逐渐流失到环境中,或者什么也不会发生。(读者:我了个去!) +book.ironchest:dirtchest9000.page5=泥箱子9000十分环保。请小心收藏好本手册,如果您随手丢进岩浆的话,我们可会伤心的。 From cc1069967de56dc0d81c6b599247450cdd286f9f Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:48:08 +0400 Subject: [PATCH 13/80] Create nb_NO.lang --- .../assets/ironchest/lang/nb_NO.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/nb_NO.lang diff --git a/src/main/resources/assets/ironchest/lang/nb_NO.lang b/src/main/resources/assets/ironchest/lang/nb_NO.lang new file mode 100644 index 0000000..c5beb18 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/nb_NO.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Jernkiste +tile.ironchest:GOLD.name=Gullkiste +tile.ironchest:DIAMOND.name=Diamantkiste +tile.ironchest:COPPER.name=Kobberkiste +tile.ironchest:SILVER.name=Sølvkiste +tile.ironchest:CRYSTAL.name=Krystallkiste +tile.ironchest:OBSIDIAN.name=Obsidiankiste +tile.ironchest:DIRTCHEST9000.name=JordKiste 9000! + +item.ironchest:IRONGOLD.name=Jern til Gull Kisteoppgradering +item.ironchest:GOLDDIAMOND.name=Gull til Diamant Kisteoppgradering +item.ironchest:COPPERSILVER.name=Kobber til Sølv Kisteoppgradering +item.ironchest:SILVERGOLD.name=Sølv til Gull Kisteoppgradering +item.ironchest:COPPERIRON.name=Kobber til Jern Kisteoppgradering +item.ironchest:DIAMONDCRYSTAL.name=Diamant til Krystall Kisteoppgradering +item.ironchest:WOODIRON.name=Tre til Jern Kisteoppgradering +item.ironchest:WOODCOPPER.name=Tre til Kobber Kisteoppgradering +item.ironchest:DIAMONDOBSIDIAN.name=Diamant til Obsidian Kisteoppgradering + +book.ironchest:dirtchest9000.title=Hvordan bruker din JordKiste 9000! +book.ironchest:dirtchest9000.page1=Velkommen til din nye JordKiste9000! Vi håper du vil nyte mange lykkelige år med lagring av din stabel av jord i vå lager verktøy. +book.ironchest:dirtchest9000.page2=Bruk: bare å sette bunken med jord av ditt valg i den svært mottakelige sporet og nyte den store fordelen med åa den jorden tilgjengelig for deg, nådu passerer denne kisten! +book.ironchest:dirtchest9000.page3=Vi håper du har hatt en god fornøyelse gjennom denne bruksanvisningen, og hår du vil vurdere å bruke vå produkter i fremtiden! Vennlig hilsen, JordKiste9000 manual forfattere innarbeidet. +book.ironchest:dirtchest9000.page4=Garanti: Dette produktet har ingen garantier av noe slag. Din jord kan ikke lagres, det kan sakte lekke ut i miljøet, eller alternativt, kan det ikke gjøre noe i det hele tatt. +book.ironchest:dirtchest9000.page5=JordKiste 9000 er snill mot miljøet. Vennligst ta hånd om denne veileder boken ansvarlig, og hva du enn gjør ikke kast den inn i noe lav. Vi ville bli veldig trist. From f93a9058ee70c929cba9ed4d739674d117961c2b Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:49:46 +0400 Subject: [PATCH 14/80] Create tr_TR.lang --- .../assets/ironchest/lang/tr_TR.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/tr_TR.lang diff --git a/src/main/resources/assets/ironchest/lang/tr_TR.lang b/src/main/resources/assets/ironchest/lang/tr_TR.lang new file mode 100644 index 0000000..9c86204 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/tr_TR.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Demir Sandık +tile.ironchest:GOLD.name=Altın Sandık +tile.ironchest:DIAMOND.name=Elmas Sandık +tile.ironchest:COPPER.name=Bakır Sandık +tile.ironchest:SILVER.name=Gümüş Sandık +tile.ironchest:CRYSTAL.name=Kristal Sandık +tile.ironchest:OBSIDIAN.name=Obsidyen Sandık +tile.ironchest:DIRTCHEST9000.name=Toprak Sandık-9000! + +item.ironchest:IRONGOLD.name=Demir Sandığı Altın Sandığa Yükselt +item.ironchest:GOLDDIAMOND.name=Altın Sandığı Elmas Sandığa Yükselt +item.ironchest:COPPERSILVER.name=Bakır Sandığı Gümüş Sandığa Yükselt +item.ironchest:SILVERGOLD.name=Gümüş Sandığı Altın Sandığa Yükselt +item.ironchest:COPPERIRON.name=Bakır Sandığı Demir Sandığa Yükselt +item.ironchest:DIAMONDCRYSTAL.name=Elmas Sandığı Kristal Sandığa Yükselt +item.ironchest:WOODIRON.name=Tahta Sandığı Demir Sandığa Yükselt +item.ironchest:WOODCOPPER.name=Tahta Sandığı Bakır Sandığa Yükselt +item.ironchest:DIAMONDOBSIDIAN.name=Elmas Sandığı Obsidyen Sandığa Yükselt + +book.ironchest:dirtchest9000.title=Toprak Sandık-9000 Kullanım Kılavuzu +book.ironchest:dirtchest9000.page1=Yeni sandık olan Toprak Sandık-9000 yaptığınız için teşekkürler.Bu sandık ile topraklarınızı depolayabilirsiniz. +book.ironchest:dirtchest9000.page2=Kullanımı: 64 adet toprak alarak içine koyunuz. Böylece sadece toprak depolanır. +book.ironchest:dirtchest9000.page3=Biz bu kılavuzu gözden keyif aldık umuyoruz, ve gelecekte ürünlerimizi kullanmayı düşünün umuyoruz! Saygılarımızla, dahil DirtChest 9000 manuel yazar. +book.ironchest:dirtchest9000.page4=Garanti: Bu ürün herhangi bir garanti vardır. Sizin kir depolanabilir değil, yavaş yavaş çevreye sülük olabilir, ya da alternatif olarak, hiç bir şey yapamazsınız. +book.ironchest:dirtchest9000.page5=Toprak Sandık-9000 çevreye türüdür. Sorumlu bu rehber kitap imha edin ve ne olursa olsun sadece bazı lav içine ayna yok yok. Bizim için çok üzücü olacaktır. From 0a1323320ce4777d360e6a7ce8ac5070ed843c43 Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:50:29 +0400 Subject: [PATCH 15/80] Create et_EE.lang --- .../resources/assets/ironchest/lang/et_EE.lang | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/et_EE.lang diff --git a/src/main/resources/assets/ironchest/lang/et_EE.lang b/src/main/resources/assets/ironchest/lang/et_EE.lang new file mode 100644 index 0000000..704ca36 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/et_EE.lang @@ -0,0 +1,18 @@ +tile.ironchest:IRON.name=Rauast kirst +tile.ironchest:GOLD.name=Kullast kirst +tile.ironchest:DIAMOND.name=Teemandist kirst +tile.ironchest:COPPER.name=Vasest kirst +tile.ironchest:SILVER.name=Hõbedast kirst +tile.ironchest:CRYSTAL.name=Kristallist kirst +tile.ironchest:OBSIDIAN.name=Obsidiaanist kirst +tile.ironchest:DIRTCHEST9000.name=MullastKirst 9000! + +item.ironchest:IRONGOLD.name=Uuenda rauast kirst kullast kirstuks +item.ironchest:GOLDDIAMOND.name=Uuenda kullast kirst teemandist kirstuks +item.ironchest:COPPERSILVER.name=Uuenda vasest kirst hõbedast kirstuks +item.ironchest:SILVERGOLD.name=Uuenda hõbedast kirst kullast kirstuks +item.ironchest:COPPERIRON.name=Uuenda vasest kirst rauast kirstuks +item.ironchest:DIAMONDCRYSTAL.name=Uuenda teemandist kirst kristallist kirstuks +item.ironchest:WOODIRON.name=Uuenda puust kirst rauast kirstuks +item.ironchest:WOODCOPPER.name=Uuenda puust kirst vasest kirstuks +item.ironchest:DIAMONDOBSIDIAN.name=Uuenda teemandist kirst obsidiaanist kirstuks From 6752d84a9260de2febde76c8103855df3cdf7b4c Mon Sep 17 00:00:00 2001 From: Anton Date: Fri, 23 May 2014 21:51:27 +0400 Subject: [PATCH 16/80] Update de_DE.lang --- src/main/resources/assets/ironchest/lang/de_DE.lang | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/resources/assets/ironchest/lang/de_DE.lang b/src/main/resources/assets/ironchest/lang/de_DE.lang index 26a8bd9..fd6c403 100644 --- a/src/main/resources/assets/ironchest/lang/de_DE.lang +++ b/src/main/resources/assets/ironchest/lang/de_DE.lang @@ -5,6 +5,7 @@ tile.ironchest:COPPER.name=Kupfertruhe tile.ironchest:SILVER.name=Silbertruhe tile.ironchest:CRYSTAL.name=Kristalltruhe tile.ironchest:OBSIDIAN.name=Obsidiantruhe +tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! item.ironchest:IRONGOLD.name=Eisen-zu-Goldtruhen-Upgrade item.ironchest:GOLDDIAMOND.name=Gold-zu-Diamanttruhen-Upgrade @@ -15,3 +16,10 @@ item.ironchest:DIAMONDCRYSTAL.name=Diamant-zu-Kristalltruhen-Upgrade item.ironchest:WOODIRON.name=Holz-zu-Eisentruhen-Upgrade item.ironchest:WOODCOPPER.name=Holz-zu-Kupfertruhen-Upgrade item.ironchest:DIAMONDOBSIDIAN.name=Diamant-zu-Obsidiantruhen-Upgrade + +book.ironchest:dirtchest9000.title=Wie du deine neue DirtChest 9000 nutzt! +book.ironchest:dirtchest9000.page1=Willkommen zu Ihrer neuen DirtChest 9000! Wir hoffen, dass Sie viele freudige Jahre genießen werden, wenn Sie Ihre Erd-Stacks in unserem nützlichen Speichergerät lagern. +book.ironchest:dirtchest9000.page2=Nutzung: Werfen Sie einfach den Erd-Stack Ihrer Wahl in den äußerst rezeptiven Slot und genießen Sie die Annehmlichkeit, diese Erde für Sie verfügbar zu haben, jedes mal, wenn Sie diese Truhe passieren! +book.ironchest:dirtchest9000.page3=Wir hoffen, Sie haben das Durchgehen dieser Bedienungsanleitung genossen, und hoffen, dass sie sich weiterhin entscheiden werden, in Zukunft unsere Produkte zu nutzen! Mit freundlichen Grüßen, Die DirtChest 9000 manual writers incorporated. +book.ironchest:dirtchest9000.page4=Garantie: Dieses Produkt hat keine Garantie jeglicher Sorte. Ihre Erde könnte nicht gespeichert werden, er könnte langsam in die Umwelt gesaugt werden, oder stattdessen könnte das Produkt gar nichts machen. +book.ironchest:dirtchest9000.page5=DirtChest 9000 ist freundlich zur Umwelt. Bitte entsorgen Sie diesen Guide verantwortungsbewusst, und tun sie nicht, was Sie immer tun und schmeißen ihn in irgendwelche Lava. Wir würden sehr traurig sein. From 44871dc5cf4e9bad6f38f5b12b5f7d55bcfc19ef Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Thu, 29 May 2014 08:28:35 +0300 Subject: [PATCH 17/80] Fixed Estonian translation --- .../assets/ironchest/lang/et_EE.lang | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/main/resources/assets/ironchest/lang/et_EE.lang b/src/main/resources/assets/ironchest/lang/et_EE.lang index 704ca36..c0b3776 100644 --- a/src/main/resources/assets/ironchest/lang/et_EE.lang +++ b/src/main/resources/assets/ironchest/lang/et_EE.lang @@ -1,18 +1,18 @@ -tile.ironchest:IRON.name=Rauast kirst -tile.ironchest:GOLD.name=Kullast kirst -tile.ironchest:DIAMOND.name=Teemandist kirst -tile.ironchest:COPPER.name=Vasest kirst -tile.ironchest:SILVER.name=Hõbedast kirst -tile.ironchest:CRYSTAL.name=Kristallist kirst -tile.ironchest:OBSIDIAN.name=Obsidiaanist kirst -tile.ironchest:DIRTCHEST9000.name=MullastKirst 9000! +tile.ironchest:IRON.name=Raudkirst +tile.ironchest:GOLD.name=Kuldkirst +tile.ironchest:DIAMOND.name=Teemantkirst +tile.ironchest:COPPER.name=Vaskkirst +tile.ironchest:SILVER.name=Hõbekirst +tile.ironchest:CRYSTAL.name=Kristallkirst +tile.ironchest:OBSIDIAN.name=Obsidiaankirst +tile.ironchest:DIRTCHEST9000.name=Muldkirst 9000! -item.ironchest:IRONGOLD.name=Uuenda rauast kirst kullast kirstuks -item.ironchest:GOLDDIAMOND.name=Uuenda kullast kirst teemandist kirstuks -item.ironchest:COPPERSILVER.name=Uuenda vasest kirst hõbedast kirstuks -item.ironchest:SILVERGOLD.name=Uuenda hõbedast kirst kullast kirstuks -item.ironchest:COPPERIRON.name=Uuenda vasest kirst rauast kirstuks -item.ironchest:DIAMONDCRYSTAL.name=Uuenda teemandist kirst kristallist kirstuks -item.ironchest:WOODIRON.name=Uuenda puust kirst rauast kirstuks -item.ironchest:WOODCOPPER.name=Uuenda puust kirst vasest kirstuks -item.ironchest:DIAMONDOBSIDIAN.name=Uuenda teemandist kirst obsidiaanist kirstuks +item.ironchest:IRONGOLD.name=Raudkirst kuld kirstuks +item.ironchest:GOLDDIAMOND.name=Kuldkirst teemandist kirstuks +item.ironchest:COPPERSILVER.name=Vaskkirst hõbedast kirstuks +item.ironchest:SILVERGOLD.name=Hõbekirst kullast kirstuks +item.ironchest:COPPERIRON.name=Vaskkirst rauast kirstuks +item.ironchest:DIAMONDCRYSTAL.name=Teemantkirst kristallist kirstuks +item.ironchest:WOODIRON.name=Puukirst rauast kirstuks +item.ironchest:WOODCOPPER.name=Puukirst vasest kirstuks +item.ironchest:DIAMONDOBSIDIAN.name=Teemantkirst obsidiaanist kirstuks From 6a95a896042fad6095796e3d6cf85c9c184f27f8 Mon Sep 17 00:00:00 2001 From: TheVikingWarrior Date: Sun, 8 Jun 2014 13:52:29 +0200 Subject: [PATCH 18/80] Create it_IT.lang --- .../assets/ironchest/lang/it_IT.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/it_IT.lang diff --git a/src/main/resources/assets/ironchest/lang/it_IT.lang b/src/main/resources/assets/ironchest/lang/it_IT.lang new file mode 100644 index 0000000..9578e14 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/it_IT.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Cassa di Ferro +tile.ironchest:GOLD.name=Cassa d'Oro +tile.ironchest:DIAMOND.name=Cassa di Diamante +tile.ironchest:COPPER.name=Cassa di Rame +tile.ironchest:SILVER.name=Cassa d'Argento +tile.ironchest:CRYSTAL.name=Cassa di Cristallo +tile.ironchest:OBSIDIAN.name=Cassa di Ossidiana +tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! + +item.ironchest:IRONGOLD.name=Miglioramento da Ferro a Oro +item.ironchest:GOLDDIAMOND.name=Miglioramento da Oro a Diamante +item.ironchest:COPPERSILVER.name=Miglioramento da Rame a Argento +item.ironchest:SILVERGOLD.name=Miglioramento da Argento a Oro +item.ironchest:COPPERIRON.name=Miglioramento da Rame a Ferro +item.ironchest:DIAMONDCRYSTAL.name=Miglioramento da Diamante a Cristallo +item.ironchest:WOODIRON.name=Miglioramento da Legno a Ferro +item.ironchest:WOODCOPPER.name=Miglioramento da Legno a Rame +item.ironchest:DIAMONDOBSIDIAN.name=Miglioramento da Diamante a Ossidiana + +book.ironchest:dirtchest9000.title=Come usare la tua DirtChest 9000! +book.ironchest:dirtchest9000.page1=Benvenuto alla tua nuova DirtChest 9000! Speriamo che possiate godere di molti anni felici in cui imagazzinate grandi quantità di terra nei nostri contenitori. +book.ironchest:dirtchest9000.page2=Uso: inserisci uno stack di terra nello slot e goditi la grande convenienza di avere della terra a tua disposizione ogni volta che passi vicino alla cassa! +book.ironchest:dirtchest9000.page3=Speriamo che questo manuale vi sia stato utile, e speriamo che prenderete in considerazione usare i nostri prodotti in futuro ! I migliori saluti, i scrittori del manuale per la DirtChest 9000. +book.ironchest:dirtchest9000.page4=Garanzia: Questo prodotto non ha nessuna garanzia di alcun tipo. La tua terra potrebbe non essere imagazzinata, potrebbe lentamente fuoriuscire nell'ambiente, oppure, non farà niente. +book.ironchest:dirtchest9000.page5=La DirtChest 9000 è amico dell'ambiente. Per favore conservate questo libro in un modo responsabile, e non buttatelo nella lava come un oggetto qualsiasi. Saremmo veramente tristi. From eddab41b99665af9211e8b4a621e48e54f02b456 Mon Sep 17 00:00:00 2001 From: Cricket Date: Mon, 9 Jun 2014 14:12:56 -0400 Subject: [PATCH 19/80] Pirate Speak! --- .../assets/ironchest/lang/en_PT.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/en_PT.lang diff --git a/src/main/resources/assets/ironchest/lang/en_PT.lang b/src/main/resources/assets/ironchest/lang/en_PT.lang new file mode 100644 index 0000000..ea69e27 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/en_PT.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Steel Coffer +tile.ironchest:GOLD.name=Gold Coffer +tile.ironchest:DIAMOND.name=Diamond Coffer +tile.ironchest:COPPER.name=Copper Coffer +tile.ironchest:SILVER.name=Silver Coffer +tile.ironchest:CRYSTAL.name=Shinin' Coffer +tile.ironchest:OBSIDIAN.name=Coffer o' tears +tile.ironchest:DIRTCHEST9000.name=FilthCoffer 9000! + +item.ironchest:IRONGOLD.name=Steel to Gold Coffer Upgradin' +item.ironchest:GOLDDIAMOND.name=Gold to Diamond Coffer Upgradin' +item.ironchest:COPPERSILVER.name=Copper to Silver Coffer Upgradin' +item.ironchest:SILVERGOLD.name=Silver to Gold Coffer Upgradin' +item.ironchest:COPPERIRON.name=Copper to Steel Coffer Upgradin' +item.ironchest:DIAMONDCRYSTAL.name=Diamond to Shinin' Coffer Upgradin' +item.ironchest:WOODIRON.name=Timber to Steel Coffer Upgradin' +item.ironchest:WOODCOPPER.name=Wood to Copper Coffer Upgradin' +item.ironchest:DIAMONDOBSIDIAN.name=Diamond to Coffer o' Tears Upgradin' + +book.ironchest:dirtchest9000.title=How to use yer FilthCoffer 9000! +book.ironchest:dirtchest9000.page1=Welcome to yer new FilthCoffer 9000! We hope ye will enjoy many happy years of storing yer filth wit yer coffer . +book.ironchest:dirtchest9000.page2=Usage: simply put yer filth in yer slot and yer got yerself some filth any time ye need it! +book.ironchest:dirtchest9000.page3=We hope you have enjoyed reviewing this instruction manual, and hope you will consider using our products in future! Kind regards, The DirtChest 9000 manual writers incorporated. +book.ironchest:dirtchest9000.page4=Warranty: We can't keep yer filth from pirates. Yer filth may not be stored, it may slowly return to yer world, or it may stay in yer coffer. +book.ironchest:dirtchest9000.page5=FilthCoffer 9000 is kind to yer voyage. Throw yer paper in a coffer near by wit yer booty, and don't just chuck it into some molten rock. We wouldn't be the happiest o' pirates. From b3b17d886798b925cfb3a96ae8c923bca2952e00 Mon Sep 17 00:00:00 2001 From: Negaihoshi Date: Tue, 17 Jun 2014 23:31:13 +0800 Subject: [PATCH 20/80] add zh-TW lang --- .../assets/ironchest/lang/zh_TW.lang | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/zh_TW.lang diff --git a/src/main/resources/assets/ironchest/lang/zh_TW.lang b/src/main/resources/assets/ironchest/lang/zh_TW.lang new file mode 100644 index 0000000..d4755f6 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/zh_TW.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=鐵箱 +tile.ironchest:GOLD.name=黃金箱 +tile.ironchest:DIAMOND.name=鑽石箱 +tile.ironchest:COPPER.name=銅箱 +tile.ironchest:SILVER.name=銀箱 +tile.ironchest:CRYSTAL.name=水晶箱 +tile.ironchest:OBSIDIAN.name=黑曜石箱 +tile.ironchest:DIRTCHEST9000.name=泥土箱9000! + +item.ironchest:IRONGOLD.name=鐵箱升級成金箱 +item.ironchest:GOLDDIAMOND.name=金箱升級成鑽石箱 +item.ironchest:COPPERSILVER.name=銅箱升級成銀箱 +item.ironchest:SILVERGOLD.name=銀箱升級成金箱 +item.ironchest:COPPERIRON.name=銅箱升級成鐵箱 +item.ironchest:DIAMONDCRYSTAL.name=鑽石箱升級成水晶箱 +item.ironchest:WOODIRON.name=木箱升級成鐵箱 +item.ironchest:WOODCOPPER.name=木箱升級成銅箱 +item.ironchest:DIAMONDOBSIDIAN.name=鑽石箱升級成黑曜石箱 + +book.ironchest:dirtchest9000.title=笨蛋也一定會用的泥土箱9000! +book.ironchest:dirtchest9000.page1=歡迎使用這台全新的泥土箱9000!希望你能愉快地常年使用我們的設備來儲存泥土。 +book.ironchest:dirtchest9000.page2=使用方法:把一組泥土丟進去就行了。每次您經過的時候都可以打開它很方便地取出來用。 +book.ironchest:dirtchest9000.page3=希望您閱讀本手冊愉快,並選擇使用我們的產品。作為泥土箱9000手冊作者我謹向您致以誠摯問候。 +book.ironchest:dirtchest9000.page4=質量保障:恕本產品不提供任何質量保障。您的泥土或許能安全存儲其內,或許會逐漸流失到環境中,或者什麼也不會發生。 +book.ironchest:dirtchest9000.page5=泥土箱9000十分環保。請小心收藏好本手冊,如果您隨手丟進岩漿的話,我們可會傷心的。 \ No newline at end of file From f05b509f1efde82bcb6a3522b263f4787f1ce6c4 Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Wed, 25 Jun 2014 17:41:06 +0100 Subject: [PATCH 21/80] Update TileEntityIronChest.java AxisAlignedBB.getAABBPool().getAABB is deprecated --- src/main/java/cpw/mods/ironchest/TileEntityIronChest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 404757e..be2481b 100644 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -279,7 +279,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { this.numUsingPlayers = 0; float var1 = 5.0F; @SuppressWarnings("unchecked") - List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getAABBPool().getAABB((double)((float)this.xCoord - var1), (double)((float)this.yCoord - var1), (double)((float)this.zCoord - var1), (double)((float)(this.xCoord + 1) + var1), (double)((float)(this.yCoord + 1) + var1), (double)((float)(this.zCoord + 1) + var1))); + List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox((double)((float)this.xCoord - var1), (double)((float)this.yCoord - var1), (double)((float)this.zCoord - var1), (double)((float)(this.xCoord + 1) + var1), (double)((float)(this.yCoord + 1) + var1), (double)((float)(this.zCoord + 1) + var1))); Iterator var3 = var2.iterator(); while (var3.hasNext()) From bfbbab21f048b94047ffddc56144c04d7bd0aa8e Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Wed, 25 Jun 2014 17:57:28 +0100 Subject: [PATCH 22/80] Better textures for wood updates --- .../textures/items/woodCopperUpgrade.png | Bin 480 -> 542 bytes .../textures/items/woodIronUpgrade.png | Bin 480 -> 540 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/ironchest/textures/items/woodCopperUpgrade.png b/src/main/resources/assets/ironchest/textures/items/woodCopperUpgrade.png index 92202fd06d7c44c6f5d214eca9471bf3c0a6c72b..4273a54660295d9d4c22a9001afc1b31522da67d 100644 GIT binary patch delta 528 zcmV+r0`L9c1D*ts8Gi-<001BJ|6u?C00v@9M??Vs0RI60puMM)00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-vn84xulDy!ac00052Nkl9=Pzh@7}{X_uU8o2`8V^+!szhr>n&YvKmsS9(~sXQN6o#)%P8(`GPAlR>_G~Odz%0}np-p~%7;5w zYHWb{S1)wUYkwlG3qdQp4wY)1?e{NH?FL#Ygp>eAz9EQ7$%lmprn%dw@h1qWxI+M_ zrgx`GE1Hd>;JPO4kufr_KN198L)ee&umOZ6**SV>k})Y+cv9x`Nt}1j1}m@u0;O1* zJvYg0Duw@RjknW20HNPRYmE@%c7m9cq=yp##N(0gvwv2TYNs8|z;8uspw#UII#h&y zmzeC*@+039)(~aci4+8#!4`xi86HcRM8S2*rczW+Ypj3YH^ra6TKp^&#SH?0k|!v6 zbpSHSaY`Pf$CG4|qrLk&BZ-?91i45bDP46hOx7_4S6Fo+k-*%fF5ln4*- z32_C|muo{lUOn;t!lAb(cf38d>(znPuMVz#zJ0;-9gD7?5502QgUh}G@7v_ z$S;_|;n|He5GTpo-9=^&iz7Rb!&%@FS;35t-o?B5kww4Mp8Z)4zf7DxCNU*FYTf^14`az>ww1RV zgf)S-s+PD$l%ynSgc&?t{an^LB{Ts5d~2@5 diff --git a/src/main/resources/assets/ironchest/textures/items/woodIronUpgrade.png b/src/main/resources/assets/ironchest/textures/items/woodIronUpgrade.png index 5100b04ba2ee90334de5bc593f8b039f3395d538..e6e62bb956036eeb0da647c08d792685ea909ff4 100644 GIT binary patch delta 526 zcmV+p0`dLe1Dphq8Gi-<001BJ|6u?C00v@9M??Vs0RI60puMM)00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-vn84xxSAToIe00050Nkl&MO}($K_NSdn`{Ir_!0&40NoTSu6+XGF7gn%aN#Da(0^522&HsYLqe&sG`C62 z&Ha-*E^a!-rj61A2Zl2+0aBHqPIXy9V5^-y;X|-E6uZzgPE>|iQ z6bgWZ1b}+IPIbE~a|PU*YsxRmhzQ2ak~j7nRJW_*%p+**HvlM=N{FPrn$0FN7AocE zrau^=)fJG4(0{uava|P|%_o}}V-OJz4i79ofCG@xn%%8?_Hz8Y&uNs<^A-RYjYqdq zDgcvA=y;w@XK9(@%MV0R3_#!qHm`>RAWHN3`>HKwv}SAljIT#o-o6Gu@NXq>0HVo+ zH_y&(aidTmXno|>9vg)My>_48r+4=7mv4$6ou4uz0MH!>-N6um zVt$400M=IW6!Z6|`$Lv;lNka5c>3s}xqQ=P`nwfoy1w%5k3){ze-r!xs!_Z0q*ojI Q00000Ne4wvM6N<$f}X7E7XSbN literal 480 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5ln4*- z32_C|Gw05H_Tt&Y#}9AayLIQ@oh#R_T)lqv^!d|gE}Xf3KJ?0Ik0Zy996oyZ*@KQ7 zmz#F&+jakDWnXvO#nZ)`w{AXtEc?j5q*d!yEm^i?@zTX}7tWotV9x*l|Ap?yHvx@i zED7=pW^j0RBMrn!@^*KTnZx494&-nactjR6FmMZlFeAgPITAp@EKe855Q)p7XI~37 z2#B}^#=mIl3i5jYf8Io)-|dNWjhiRPc*xF*a?sRe?I}K1=XiVTMjeJ#hiR*)1j!}hs2`FES`7qZhmCZFSTcXmcuU-XOBrtNsn6h|JcJ=GMR1V z?FL~@pslJUt`Q|Ei6yC4$wjF^iowXh&{)^NP}j&P#L&#j(A>(@QrE!L%D~{MMe0u! c4Y~O#nQ4`{HB3pp3kqQdPgg&ebxsLQ0BMb}>i_@% From c6cb9bc2c8a5949b337210e261f06ed75edd0da8 Mon Sep 17 00:00:00 2001 From: progwml6 Date: Wed, 25 Jun 2014 20:04:18 -0400 Subject: [PATCH 23/80] update to 1.7.10_pre4 --- build.gradle | 4 ++-- src/main/java/cpw/mods/ironchest/IronChest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index f6403cc..7be4947 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:1.1-SNAPSHOT' + classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' } } @@ -37,7 +37,7 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { - version = "1.7.2-10.12.0.1024" + version = "1.7.10_pre4-10.12.2.1143-prerelease" } // This wrangles the resources for the jar files- stuff like textures and languages diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index f3b0d16..9cf3e85 100644 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -24,7 +24,7 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; -@Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:Forge@[7.0,);required-after:FML@[5.0.5,)") +@Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:Forge@[10.10,);required-after:FML@[7.2,)") public class IronChest { public static BlockIronChest ironChestBlock; @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.CommonProxy") From a14b2c46c56b078e4300b8629fcf0c2cc49190cb Mon Sep 17 00:00:00 2001 From: progwml6 Date: Wed, 25 Jun 2014 20:33:12 -0400 Subject: [PATCH 24/80] add IDEA & extra eclipse stuff to .gitignore --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index 281ec46..8eef75c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,10 @@ build/ eclipse/ bin/ repo/ +/run/ +.settings/ +#IDEA files from Gradle +.idea/ +/*.iml +/*.ipr +/*.iws From fd8dd9931d3de74da62c76ea2ce0add7607cee1e Mon Sep 17 00:00:00 2001 From: progwml6 Date: Thu, 26 Jun 2014 15:41:53 -0400 Subject: [PATCH 25/80] bump to 1.7.10 :D --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7be4947..a24a928 100644 --- a/build.gradle +++ b/build.gradle @@ -37,7 +37,7 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { - version = "1.7.10_pre4-10.12.2.1143-prerelease" + version = "1.7.10-10.13.0.1150" } // This wrangles the resources for the jar files- stuff like textures and languages From 892709daed4dc316f7d3770daab70792e46bd87c Mon Sep 17 00:00:00 2001 From: TheVikingWarrior Date: Fri, 27 Jun 2014 23:50:48 +0200 Subject: [PATCH 26/80] Update it_IT.lang Here's the new update for 1.7.10. The italian vanilla localization have changed a lot of words and the capital letter in the words that are not the first in the localization (a part from a few mobs and others). --- .../assets/ironchest/lang/it_IT.lang | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/resources/assets/ironchest/lang/it_IT.lang b/src/main/resources/assets/ironchest/lang/it_IT.lang index 9578e14..f84955f 100644 --- a/src/main/resources/assets/ironchest/lang/it_IT.lang +++ b/src/main/resources/assets/ironchest/lang/it_IT.lang @@ -1,21 +1,21 @@ -tile.ironchest:IRON.name=Cassa di Ferro -tile.ironchest:GOLD.name=Cassa d'Oro -tile.ironchest:DIAMOND.name=Cassa di Diamante -tile.ironchest:COPPER.name=Cassa di Rame -tile.ironchest:SILVER.name=Cassa d'Argento -tile.ironchest:CRYSTAL.name=Cassa di Cristallo -tile.ironchest:OBSIDIAN.name=Cassa di Ossidiana +tile.ironchest:IRON.name=Baule di ferro +tile.ironchest:GOLD.name=Baule d'oro +tile.ironchest:DIAMOND.name=Baule di diamante +tile.ironchest:COPPER.name=Baule di rame +tile.ironchest:SILVER.name=Baule d'argento +tile.ironchest:CRYSTAL.name=Baule di cristallo +tile.ironchest:OBSIDIAN.name=Baule di ossidiana tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! -item.ironchest:IRONGOLD.name=Miglioramento da Ferro a Oro -item.ironchest:GOLDDIAMOND.name=Miglioramento da Oro a Diamante -item.ironchest:COPPERSILVER.name=Miglioramento da Rame a Argento -item.ironchest:SILVERGOLD.name=Miglioramento da Argento a Oro -item.ironchest:COPPERIRON.name=Miglioramento da Rame a Ferro -item.ironchest:DIAMONDCRYSTAL.name=Miglioramento da Diamante a Cristallo -item.ironchest:WOODIRON.name=Miglioramento da Legno a Ferro -item.ironchest:WOODCOPPER.name=Miglioramento da Legno a Rame -item.ironchest:DIAMONDOBSIDIAN.name=Miglioramento da Diamante a Ossidiana +item.ironchest:IRONGOLD.name=Miglioramento da ferro a oro +item.ironchest:GOLDDIAMOND.name=Miglioramento da oro a diamante +item.ironchest:COPPERSILVER.name=Miglioramento da rame a argento +item.ironchest:SILVERGOLD.name=Miglioramento da argento a oro +item.ironchest:COPPERIRON.name=Miglioramento da rame a ferro +item.ironchest:DIAMONDCRYSTAL.name=Miglioramento da diamante a cristallo +item.ironchest:WOODIRON.name=Miglioramento da legno a ferro +item.ironchest:WOODCOPPER.name=Miglioramento da legno a rame +item.ironchest:DIAMONDOBSIDIAN.name=Miglioramento da diamante a ossidiana book.ironchest:dirtchest9000.title=Come usare la tua DirtChest 9000! book.ironchest:dirtchest9000.page1=Benvenuto alla tua nuova DirtChest 9000! Speriamo che possiate godere di molti anni felici in cui imagazzinate grandi quantità di terra nei nostri contenitori. From c1f2bb6003f022f2d4af174b92a78ba6c8836b8e Mon Sep 17 00:00:00 2001 From: TheVikingWarrior Date: Thu, 31 Jul 2014 18:49:32 +0200 Subject: [PATCH 27/80] Update it_IT.lang --- .../resources/assets/ironchest/lang/it_IT.lang | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/resources/assets/ironchest/lang/it_IT.lang b/src/main/resources/assets/ironchest/lang/it_IT.lang index f84955f..fc3d82c 100644 --- a/src/main/resources/assets/ironchest/lang/it_IT.lang +++ b/src/main/resources/assets/ironchest/lang/it_IT.lang @@ -7,15 +7,15 @@ tile.ironchest:CRYSTAL.name=Baule di cristallo tile.ironchest:OBSIDIAN.name=Baule di ossidiana tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! -item.ironchest:IRONGOLD.name=Miglioramento da ferro a oro -item.ironchest:GOLDDIAMOND.name=Miglioramento da oro a diamante -item.ironchest:COPPERSILVER.name=Miglioramento da rame a argento -item.ironchest:SILVERGOLD.name=Miglioramento da argento a oro -item.ironchest:COPPERIRON.name=Miglioramento da rame a ferro -item.ironchest:DIAMONDCRYSTAL.name=Miglioramento da diamante a cristallo -item.ironchest:WOODIRON.name=Miglioramento da legno a ferro -item.ironchest:WOODCOPPER.name=Miglioramento da legno a rame -item.ironchest:DIAMONDOBSIDIAN.name=Miglioramento da diamante a ossidiana +item.ironchest:IRONGOLD.name=Potenziamento da ferro a oro +item.ironchest:GOLDDIAMOND.name=Potenziamento da oro a diamante +item.ironchest:COPPERSILVER.name=Potenziamento da rame a argento +item.ironchest:SILVERGOLD.name=Potenziamento da argento a oro +item.ironchest:COPPERIRON.name=Potenziamento da rame a ferro +item.ironchest:DIAMONDCRYSTAL.name=Potenziamento da diamante a cristallo +item.ironchest:WOODIRON.name=Potenziamento da legno a ferro +item.ironchest:WOODCOPPER.name=Potenziamento da legno a rame +item.ironchest:DIAMONDOBSIDIAN.name=Potenziamento da diamante a ossidiana book.ironchest:dirtchest9000.title=Come usare la tua DirtChest 9000! book.ironchest:dirtchest9000.page1=Benvenuto alla tua nuova DirtChest 9000! Speriamo che possiate godere di molti anni felici in cui imagazzinate grandi quantità di terra nei nostri contenitori. From 000ef0bc5144db1fb4e9a3147db9cb5a001057f8 Mon Sep 17 00:00:00 2001 From: FireBall1725 Date: Thu, 31 Jul 2014 19:42:02 -0400 Subject: [PATCH 28/80] Fixed comparator support for chests --- src/main/java/cpw/mods/ironchest/BlockIronChest.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index e5f03a1..da4c957 100644 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -256,11 +256,20 @@ public class BlockIronChest extends BlockContainer { return super.getExplosionResistance(par1Entity, world, x, y, z, explosionX, explosionY, explosionZ); } + @Override + public boolean hasComparatorInputOverride() { + return true; + } @Override public int getComparatorInputOverride(World par1World, int par2, int par3, int par4, int par5) { - return Container.calcRedstoneFromInventory((TileEntityIronChest) par1World.getTileEntity(par2, par3, par4)); + TileEntity te = par1World.getTileEntity(par2, par3, par4); + if (te instanceof IInventory) + { + return Container.calcRedstoneFromInventory((IInventory)te); + } + return 0; } @@ -299,4 +308,5 @@ public class BlockIronChest extends BlockContainer { } return false; } + } From e9e50c855d3f3b8788426ec9786dda1b49b6a8c9 Mon Sep 17 00:00:00 2001 From: Zach Date: Sun, 10 Aug 2014 16:36:58 -0400 Subject: [PATCH 29/80] Update mcmod.info --- src/main/resources/mcmod.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index d3ab3dc..c2a7c0a 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -4,7 +4,7 @@ "name": "Iron Chest", "description": "New chests with larger sizes, with in-place upgrade items.\nThe feature chest is the crystal chest, which is transparent - some inventory contents are visible without opening the chest", "version": "${version}", - "mcversion": ${mcversion}", + "mcversion": "${mcversion}", "url": "http://www.minecraftforum.net/topic/981855-", "updateUrl": "", "authors": [ From a85429632a26e3a7c14d5d3ba63c85317f533963 Mon Sep 17 00:00:00 2001 From: "MMKP Team Public." Date: Wed, 13 Aug 2014 09:41:08 +0900 Subject: [PATCH 30/80] Create ko_KR.lang --- .../assets/ironchest/lang/ko_KR.lang | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/resources/assets/ironchest/lang/ko_KR.lang diff --git a/src/main/resources/assets/ironchest/lang/ko_KR.lang b/src/main/resources/assets/ironchest/lang/ko_KR.lang new file mode 100644 index 0000000..e37d644 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/ko_KR.lang @@ -0,0 +1,26 @@ +tile.ironchest:IRON.name=철 상자 +tile.ironchest:GOLD.name=금 상자 +tile.ironchest:DIAMOND.name=다이아몬드 상자 +tile.ironchest:COPPER.name=구리 상자 +tile.ironchest:SILVER.name=은 상자 +tile.ironchest:CRYSTAL.name=수정 상자 +tile.ironchest:OBSIDIAN.name=흑요석 상자 +tile.ironchest:DIRTCHEST9000.name=흙 상자 9000! + +item.ironchest:IRONGOLD.name=철 상자를 금 상자로 업그레이드 +item.ironchest:GOLDDIAMOND.name=금 상자를 다이아몬드 상자로 업그레이드 +item.ironchest:COPPERSILVER.name=구리 상자를 은 상자로 업그레이드 +item.ironchest:SILVERGOLD.name=은 상자를 금 상자로 업그레이드 +item.ironchest:COPPERIRON.name=구리 상자를 철 상자로 업그레이드 +item.ironchest:DIAMONDCRYSTAL.name=다이아몬드 상자를 수정 상자로 업그레이드 +item.ironchest:WOODIRON.name=나무 상자를 철 상자로 업그레이드 +item.ironchest:WOODCOPPER.name=나무 상자를 구리 상자로 업그레이드 +item.ironchest:DIAMONDOBSIDIAN.name=다이아몬드 상자를 흑요석 상자로 업그레이드 + +book.ironchest:dirtchest9000.title=흙상자 9000을 사용하는 방법! +book.ironchest:dirtchest9000.page1=새로운 흙 상자 9000을 사용하게 되신 것을 환영합니다! 우리는 당신이 이 저장 도구에서 흙들을 많은 해 동안 행복하게 저장하기를 기원합니다. +사용법: 단순히 흙 뭉치들을 아이템 슬롯에 넣고 이 상자를 지나갈 때마다 언제나 당신에게 제공되어지는 흙들의 편리함을 누리세요! +book.ironchest:dirtchest9000.page3=우리는 당신이 이 사용설명서를 즐겁게 읽었고, 나중에 이 제품을 사용하기를 바랍니다! 흙 상자 9000 매뉴얼 +book.ironchest:dirtchest9000.page4=주의: 이 제품에는 어떤 종류의 보증도 하지 않습니다 당신의 흙들은 저장되지 않을 수도 있습니다. 그러면 이 흙 상자는 천천히 환경 속으로 돌아가거나, 혹은 아무것도 하지 않을 것입니다. +book.ironchest:dirtchest9000.page5=흙상자 9000은 환경 친화적입니다. 가이드북의 처분에는 책임이 따릅니다, 그러니 어떠한 경우라도 용암에 버리지 마세요. + 우리는 매우 슬플 것입니다. From 5cf5be53c76a051c1e00f1d562c025ff33ee4ad8 Mon Sep 17 00:00:00 2001 From: "MMKP Team Public." Date: Wed, 13 Aug 2014 09:41:34 +0900 Subject: [PATCH 31/80] Update ko_KR.lang --- src/main/resources/assets/ironchest/lang/ko_KR.lang | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/resources/assets/ironchest/lang/ko_KR.lang b/src/main/resources/assets/ironchest/lang/ko_KR.lang index e37d644..7cd5931 100644 --- a/src/main/resources/assets/ironchest/lang/ko_KR.lang +++ b/src/main/resources/assets/ironchest/lang/ko_KR.lang @@ -22,5 +22,4 @@ book.ironchest:dirtchest9000.page1=새로운 흙 상자 9000을 사용하게 되 사용법: 단순히 흙 뭉치들을 아이템 슬롯에 넣고 이 상자를 지나갈 때마다 언제나 당신에게 제공되어지는 흙들의 편리함을 누리세요! book.ironchest:dirtchest9000.page3=우리는 당신이 이 사용설명서를 즐겁게 읽었고, 나중에 이 제품을 사용하기를 바랍니다! 흙 상자 9000 매뉴얼 book.ironchest:dirtchest9000.page4=주의: 이 제품에는 어떤 종류의 보증도 하지 않습니다 당신의 흙들은 저장되지 않을 수도 있습니다. 그러면 이 흙 상자는 천천히 환경 속으로 돌아가거나, 혹은 아무것도 하지 않을 것입니다. -book.ironchest:dirtchest9000.page5=흙상자 9000은 환경 친화적입니다. 가이드북의 처분에는 책임이 따릅니다, 그러니 어떠한 경우라도 용암에 버리지 마세요. - 우리는 매우 슬플 것입니다. +book.ironchest:dirtchest9000.page5=흙상자 9000은 환경 친화적입니다. 가이드북의 처분에는 책임이 따릅니다, 그러니 어떠한 경우라도 용암에 버리지 마세요. 우리는 매우 슬플 것입니다. From 0a51d58ff86821acc6d74040c472691013b30968 Mon Sep 17 00:00:00 2001 From: anesin1109 Date: Mon, 25 Aug 2014 20:01:00 +0900 Subject: [PATCH 32/80] Update ko_KR.lang --- src/main/resources/assets/ironchest/lang/ko_KR.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/ironchest/lang/ko_KR.lang b/src/main/resources/assets/ironchest/lang/ko_KR.lang index 7cd5931..837ae58 100644 --- a/src/main/resources/assets/ironchest/lang/ko_KR.lang +++ b/src/main/resources/assets/ironchest/lang/ko_KR.lang @@ -17,9 +17,9 @@ item.ironchest:WOODIRON.name=나무 상자를 철 상자로 업그레이드 item.ironchest:WOODCOPPER.name=나무 상자를 구리 상자로 업그레이드 item.ironchest:DIAMONDOBSIDIAN.name=다이아몬드 상자를 흑요석 상자로 업그레이드 -book.ironchest:dirtchest9000.title=흙상자 9000을 사용하는 방법! +book.ironchest:dirtchest9000.title=흙 상자 9000을 사용하는 방법! book.ironchest:dirtchest9000.page1=새로운 흙 상자 9000을 사용하게 되신 것을 환영합니다! 우리는 당신이 이 저장 도구에서 흙들을 많은 해 동안 행복하게 저장하기를 기원합니다. 사용법: 단순히 흙 뭉치들을 아이템 슬롯에 넣고 이 상자를 지나갈 때마다 언제나 당신에게 제공되어지는 흙들의 편리함을 누리세요! book.ironchest:dirtchest9000.page3=우리는 당신이 이 사용설명서를 즐겁게 읽었고, 나중에 이 제품을 사용하기를 바랍니다! 흙 상자 9000 매뉴얼 book.ironchest:dirtchest9000.page4=주의: 이 제품에는 어떤 종류의 보증도 하지 않습니다 당신의 흙들은 저장되지 않을 수도 있습니다. 그러면 이 흙 상자는 천천히 환경 속으로 돌아가거나, 혹은 아무것도 하지 않을 것입니다. -book.ironchest:dirtchest9000.page5=흙상자 9000은 환경 친화적입니다. 가이드북의 처분에는 책임이 따릅니다, 그러니 어떠한 경우라도 용암에 버리지 마세요. 우리는 매우 슬플 것입니다. +book.ironchest:dirtchest9000.page5=흙 상자 9000은 환경 친화적입니다. 가이드북의 처분에는 책임이 따릅니다, 그러니 어떠한 경우라도 용암에 버리지 마세요. 우리는 매우 슬플 것입니다. From 92ffc8bcd7fb713faa2475a4e55579da537e59d6 Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Thu, 4 Sep 2014 20:29:25 -0400 Subject: [PATCH 33/80] get rid of useless excess method in ironchesttype --- src/main/java/cpw/mods/ironchest/IronChestType.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 0c7a7d3..981c478 100644 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -104,10 +104,6 @@ public enum IronChestType { return null; } - public static void registerTranslations() - { - } - public static void registerBlocksAndRecipes(BlockIronChest blockResult) { ItemStack previous = new ItemStack(Blocks.chest); From b8f8d10f68c97b53c10499811ce6200266953dfc Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Thu, 4 Sep 2014 20:36:25 -0400 Subject: [PATCH 34/80] minor cleanup c/o IDEA code analysis --- src/main/java/cpw/mods/ironchest/IronChestType.java | 12 ++++++------ .../mods/ironchest/OcelotsSitOnChestsHandler.java | 7 ++----- .../java/cpw/mods/ironchest/TileEntityIronChest.java | 9 ++------- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 981c478..119f5a6 100644 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -140,27 +140,27 @@ public enum IronChestType { public static Object translateOreName(String mat) { - if (mat == "ingotIron") + if (mat.equals("ingotIron")) { return Items.iron_ingot; } - else if (mat == "ingotGold") + else if (mat.equals("ingotGold")) { return Items.gold_ingot; } - else if (mat == "gemDiamond") + else if (mat.equals("gemDiamond")) { return Items.diamond; } - else if (mat == "blockGlass") + else if (mat.equals("blockGlass")) { return Blocks.glass; } - else if (mat == "obsidian") + else if (mat.equals("obsidian")) { return Blocks.obsidian; } - else if (mat == "dirt") + else if (mat.equals("dirt")) { return Blocks.dirt; } diff --git a/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java b/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java index 3e3283e..1e42515 100644 --- a/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java +++ b/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java @@ -17,11 +17,8 @@ public class OcelotsSitOnChestsHandler { @SuppressWarnings("unchecked") List tasks = ocelot.tasks.taskEntries; - for (int i = 0; i < tasks.size(); i++) - { - EntityAITasks.EntityAITaskEntry task = tasks.get(i); - if (task.priority == 6 && (task.action instanceof EntityAIOcelotSit) && !(task.action instanceof IronChestAIOcelotSit)) - { + for (EntityAITasks.EntityAITaskEntry task : tasks) { + if (task.priority == 6 && (task.action instanceof EntityAIOcelotSit) && !(task.action instanceof IronChestAIOcelotSit)) { task.action = new IronChestAIOcelotSit(ocelot, 0.4F); } } diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index be2481b..17f8fd8 100644 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -280,14 +280,9 @@ public class TileEntityIronChest extends TileEntity implements IInventory { float var1 = 5.0F; @SuppressWarnings("unchecked") List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox((double)((float)this.xCoord - var1), (double)((float)this.yCoord - var1), (double)((float)this.zCoord - var1), (double)((float)(this.xCoord + 1) + var1), (double)((float)(this.yCoord + 1) + var1), (double)((float)(this.zCoord + 1) + var1))); - Iterator var3 = var2.iterator(); - while (var3.hasNext()) - { - EntityPlayer var4 = var3.next(); - - if (var4.openContainer instanceof ContainerIronChest) - { + for (EntityPlayer var4 : var2) { + if (var4.openContainer instanceof ContainerIronChest) { ++this.numUsingPlayers; } } From 0c086f55697e93110fb7573f2e85c88dc62391a0 Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Thu, 4 Sep 2014 20:52:03 -0400 Subject: [PATCH 35/80] synch NBT as well for crystal chest --- .../cpw/mods/ironchest/PacketHandler.java | 27 +++++++++--------- .../mods/ironchest/TileEntityIronChest.java | 28 ++++++------------- 2 files changed, 23 insertions(+), 32 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/PacketHandler.java b/src/main/java/cpw/mods/ironchest/PacketHandler.java index 8c8aa05..3a77a7e 100644 --- a/src/main/java/cpw/mods/ironchest/PacketHandler.java +++ b/src/main/java/cpw/mods/ironchest/PacketHandler.java @@ -10,10 +10,13 @@ ******************************************************************************/ package cpw.mods.ironchest; +import cpw.mods.fml.common.network.ByteBufUtils; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import java.util.EnumMap; + +import net.minecraft.item.ItemStack; import net.minecraft.network.Packet; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -85,7 +88,7 @@ public enum PacketHandler { { TileEntityIronChest icte = (TileEntityIronChest) te; icte.setFacing(msg.facing); - icte.handlePacketData(msg.type, msg.items); + icte.handlePacketData(msg.type, msg.itemStacks); } } } @@ -106,7 +109,7 @@ public enum PacketHandler { int z; int type; int facing; - int[] items; + ItemStack[] itemStacks; } /** @@ -135,14 +138,12 @@ public enum PacketHandler { target.writeInt(msg.z); int typeAndFacing = ((msg.type & 0x0F) | ((msg.facing & 0x0F) << 4)) & 0xFF; target.writeByte(typeAndFacing); - target.writeBoolean(msg.items != null); - if (msg.items != null) + target.writeBoolean(msg.itemStacks != null); + if (msg.itemStacks != null) { - int[] items = msg.items; - for (int j = 0; j < items.length; j++) + for (ItemStack i: msg.itemStacks) { - int i = items[j]; - target.writeInt(i); + ByteBufUtils.writeItemStack(target, i); } } } @@ -157,13 +158,13 @@ public enum PacketHandler { msg.type = (byte)(typDat & 0xf); msg.facing = (byte)((typDat >> 4) & 0xf); boolean hasStacks = dat.readBoolean(); - msg.items = new int[0]; + msg.itemStacks = new ItemStack[0]; if (hasStacks) { - msg.items = new int[24]; - for (int i = 0; i < msg.items.length; i++) + msg.itemStacks = new ItemStack[8]; + for (int i = 0; i < msg.itemStacks.length; i++) { - msg.items[i] = dat.readInt(); + msg.itemStacks[i] = ByteBufUtils.readItemStack(dat); } } } @@ -194,7 +195,7 @@ public enum PacketHandler { msg.z = tileEntityIronChest.zCoord; msg.type = tileEntityIronChest.getType().ordinal(); msg.facing = tileEntityIronChest.getFacing(); - msg.items = tileEntityIronChest.buildIntDataList(); + msg.itemStacks = tileEntityIronChest.buildItemStackDataList(); return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg); } } diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 17f8fd8..44c4359 100644 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -15,10 +15,10 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; +import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -421,7 +421,7 @@ public class TileEntityIronChest extends TileEntity implements IInventory { return PacketHandler.getPacket(this); } - public void handlePacketData(int typeData, int[] intData) + public void handlePacketData(int typeData, ItemStack[] intData) { TileEntityIronChest chest = this; if (this.type.ordinal() != typeData) @@ -431,46 +431,36 @@ public class TileEntityIronChest extends TileEntity implements IInventory { if (IronChestType.values()[typeData].isTransparent() && intData != null) { int pos = 0; - if (intData.length < chest.topStacks.length * 3) - { - return; - } for (int i = 0; i < chest.topStacks.length; i++) { - if (intData[pos + 2] != 0) + if (intData[pos] != null) { - Item it = Item.getItemById(intData[pos]); - ItemStack is = new ItemStack(it, intData[pos + 2], intData[pos + 1]); - chest.topStacks[i] = is; + chest.topStacks[i] = intData[pos]; } else { chest.topStacks[i] = null; } - pos += 3; + pos ++; } } } - public int[] buildIntDataList() + public ItemStack[] buildItemStackDataList() { if (type.isTransparent()) { - int[] sortList = new int[topStacks.length * 3]; + ItemStack[] sortList = new ItemStack[topStacks.length]; int pos = 0; for (ItemStack is : topStacks) { if (is != null) { - sortList[pos++] = Item.getIdFromItem(is.getItem()); - sortList[pos++] = is.getItemDamage(); - sortList[pos++] = is.stackSize; + sortList[pos++] = is; } else { - sortList[pos++] = 0; - sortList[pos++] = 0; - sortList[pos++] = 0; + sortList[pos++] = null; } } return sortList; From 8dcee374b531f7a98b281fb10ac75047f031ca2e Mon Sep 17 00:00:00 2001 From: Zach Date: Tue, 9 Sep 2014 22:54:36 -0400 Subject: [PATCH 36/80] update to gradle 2 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d9425c6..ec94fc4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.8-bin.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-2.0-bin.zip From e86aad017ab03360199b0fabb5f4c1c48a283e94 Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Wed, 10 Sep 2014 01:33:28 -0400 Subject: [PATCH 37/80] actually commit updated wrapper jar as well --- gradle/wrapper/gradle-wrapper.jar | Bin 50514 -> 51017 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 667288ad6c2b3b87c990ece1267e56f0bcbf3622..b7612167031001b7b84baf2a959e8ea8ad03c011 100644 GIT binary patch delta 24889 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%0A`3;a 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 UFo_-vTpnOKhXa$yss0-AKkzv|fB*mh delta 24379 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 Date: Fri, 19 Sep 2014 20:58:20 +0100 Subject: [PATCH 38/80] Added ore dictionary support --- src/main/java/cpw/mods/ironchest/IronChest.java | 5 +++++ src/main/java/cpw/mods/ironchest/IronChestType.java | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 9cf3e85..2cce098 100644 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -10,9 +10,13 @@ ******************************************************************************/ package cpw.mods.ironchest; +import net.minecraft.init.Blocks; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.oredict.OreDictionary; + import org.apache.logging.log4j.Level; + import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; @@ -69,6 +73,7 @@ public class IronChest { GameRegistry.registerTileEntityWithAlternatives(typ.clazz, "IronChest."+typ.name(), typ.name()); proxy.registerTileEntitySpecialRenderer(typ); } + OreDictionary.registerOre("chestWood", Blocks.chest); IronChestType.registerBlocksAndRecipes(ironChestBlock); ChestChangerType.generateRecipes(); NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy); diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 119f5a6..787eb81 100644 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -106,7 +106,7 @@ public enum IronChestType { public static void registerBlocksAndRecipes(BlockIronChest blockResult) { - ItemStack previous = new ItemStack(Blocks.chest); + Object previous = "chestWood"; for (IronChestType typ : values()) { generateRecipesForType(blockResult, previous, typ); @@ -127,7 +127,7 @@ public enum IronChestType { mainMaterial = translateOreName(mat); addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit, 'm', mainMaterial, 'P', previousTier, /* previous tier of chest */ - 'G', Blocks.glass, 'C', Blocks.chest, + 'G', Blocks.glass, 'C', "chestWood", '0', new ItemStack(blockResult, 1, 0), /* Iron Chest */ '1', new ItemStack(blockResult, 1, 1), /* Gold Chest */ '2', new ItemStack(blockResult, 1, 2), /* Diamond Chest */ From 17bc3355c0ee3b1a02e5c861e049bfe4299c3209 Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Sat, 20 Sep 2014 18:51:54 +0100 Subject: [PATCH 39/80] Added ore dict support for glass, iron, gold and diamond as well That will allow crafting the chests with stained glass... if that's not intended change "blockGlass" to "blockGlassColorless". --- .../cpw/mods/ironchest/IronChestType.java | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 787eb81..3a9c9d3 100644 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -127,12 +127,12 @@ public enum IronChestType { mainMaterial = translateOreName(mat); addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit, 'm', mainMaterial, 'P', previousTier, /* previous tier of chest */ - 'G', Blocks.glass, 'C', "chestWood", + 'G', "blockGlass", 'C', "chestWood", '0', new ItemStack(blockResult, 1, 0), /* Iron Chest */ '1', new ItemStack(blockResult, 1, 1), /* Gold Chest */ '2', new ItemStack(blockResult, 1, 2), /* Diamond Chest */ '3', new ItemStack(blockResult, 1, 3), /* Copper Chest */ - '4', new ItemStack(blockResult, 1, 4)/* Silver Chest */ + '4', new ItemStack(blockResult, 1, 4) /* Silver Chest */ ); } } @@ -140,23 +140,7 @@ public enum IronChestType { public static Object translateOreName(String mat) { - if (mat.equals("ingotIron")) - { - return Items.iron_ingot; - } - else if (mat.equals("ingotGold")) - { - return Items.gold_ingot; - } - else if (mat.equals("gemDiamond")) - { - return Items.diamond; - } - else if (mat.equals("blockGlass")) - { - return Blocks.glass; - } - else if (mat.equals("obsidian")) + if (mat.equals("obsidian")) { return Blocks.obsidian; } From 567bd1b72c671ffbaa3827a78d7253f4e23aa259 Mon Sep 17 00:00:00 2001 From: Adubbz Date: Wed, 24 Sep 2014 22:32:58 +1000 Subject: [PATCH 40/80] Initial update to 1.8, not tested (it only compiles) with huge portions commented out (due to a lack of Forge) --- .gitignore | 14 + README.md | 10 + build.gradle | 196 +++++++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 51017 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 164 ++++++ gradlew.bat | 90 +++ .../api/container/ChestContainer.java | 28 + .../cpw/mods/ironchest/BlockIronChest.java | 275 +++++++++ .../cpw/mods/ironchest/ChestChangerType.java | 93 +++ .../java/cpw/mods/ironchest/CommonProxy.java | 56 ++ .../mods/ironchest/ContainerIronChest.java | 124 ++++ .../java/cpw/mods/ironchest/IronChest.java | 78 +++ .../mods/ironchest/IronChestAIOcelotSit.java | 22 + .../cpw/mods/ironchest/IronChestType.java | 240 ++++++++ .../cpw/mods/ironchest/ItemChestChanger.java | 106 ++++ .../cpw/mods/ironchest/ItemIronChest.java | 36 ++ .../ironchest/MappableItemStackWrapper.java | 33 ++ .../ironchest/OcelotsSitOnChestsHandler.java | 27 + .../cpw/mods/ironchest/PacketHandler.java | 203 +++++++ .../mods/ironchest/TileEntityCopperChest.java | 19 + .../ironchest/TileEntityCrystalChest.java | 18 + .../ironchest/TileEntityDiamondChest.java | 18 + .../mods/ironchest/TileEntityDirtChest.java | 42 ++ .../mods/ironchest/TileEntityGoldChest.java | 19 + .../mods/ironchest/TileEntityIronChest.java | 549 ++++++++++++++++++ .../ironchest/TileEntityObsidianChest.java | 9 + .../mods/ironchest/TileEntitySilverChest.java | 18 + .../cpw/mods/ironchest/ValidatingSlot.java | 21 + src/main/java/cpw/mods/ironchest/Version.java | 36 ++ .../mods/ironchest/client/ClientProxy.java | 56 ++ .../cpw/mods/ironchest/client/GUIChest.java | 98 ++++ .../client/IronChestRenderHelper.java | 48 ++ .../client/TileEntityIronChestRenderer.java | 184 ++++++ .../assets/ironchest/lang/cs_CZ.lang | 17 + .../assets/ironchest/lang/da_DK.lang | 17 + .../assets/ironchest/lang/de_DE.lang | 25 + .../assets/ironchest/lang/el_GR.lang | 17 + .../assets/ironchest/lang/en_PT.lang | 25 + .../assets/ironchest/lang/en_US.lang | 25 + .../assets/ironchest/lang/es_ES.lang | 17 + .../assets/ironchest/lang/et_EE.lang | 18 + .../assets/ironchest/lang/fr_FR.lang | 19 + .../assets/ironchest/lang/it_IT.lang | 25 + .../assets/ironchest/lang/ko_KR.lang | 25 + .../assets/ironchest/lang/nb_NO.lang | 25 + .../assets/ironchest/lang/nl_NL.lang | 25 + .../assets/ironchest/lang/pl_PL.lang | 17 + .../assets/ironchest/lang/pt_BR.lang | 25 + .../assets/ironchest/lang/pt_PT.lang | 17 + .../assets/ironchest/lang/ru_RU.lang | 17 + .../assets/ironchest/lang/sv_SE.lang | 17 + .../assets/ironchest/lang/tr_TR.lang | 25 + .../assets/ironchest/lang/zh_CN.lang | 25 + .../assets/ironchest/lang/zh_TW.lang | 25 + .../textures/blocks/copper_front.png | Bin 0 -> 679 bytes .../ironchest/textures/blocks/copper_side.png | Bin 0 -> 661 bytes .../ironchest/textures/blocks/copper_top.png | Bin 0 -> 546 bytes .../textures/blocks/crystal_front.png | Bin 0 -> 396 bytes .../textures/blocks/crystal_side.png | Bin 0 -> 396 bytes .../ironchest/textures/blocks/crystal_top.png | Bin 0 -> 382 bytes .../textures/blocks/diamond_front.png | Bin 0 -> 762 bytes .../textures/blocks/diamond_side.png | Bin 0 -> 719 bytes .../ironchest/textures/blocks/diamond_top.png | Bin 0 -> 572 bytes .../textures/blocks/dirtchest9000_front.png | Bin 0 -> 3194 bytes .../textures/blocks/dirtchest9000_side.png | Bin 0 -> 3202 bytes .../textures/blocks/dirtchest9000_top.png | Bin 0 -> 3212 bytes .../ironchest/textures/blocks/gold_front.png | Bin 0 -> 784 bytes .../ironchest/textures/blocks/gold_side.png | Bin 0 -> 726 bytes .../ironchest/textures/blocks/gold_top.png | Bin 0 -> 572 bytes .../ironchest/textures/blocks/iron_front.png | Bin 0 -> 787 bytes .../ironchest/textures/blocks/iron_side.png | Bin 0 -> 726 bytes .../ironchest/textures/blocks/iron_top.png | Bin 0 -> 572 bytes .../textures/blocks/obsidian_front.png | Bin 0 -> 586 bytes .../textures/blocks/obsidian_side.png | Bin 0 -> 593 bytes .../textures/blocks/obsidian_top.png | Bin 0 -> 604 bytes .../textures/blocks/silver_front.png | Bin 0 -> 625 bytes .../ironchest/textures/blocks/silver_side.png | Bin 0 -> 608 bytes .../ironchest/textures/blocks/silver_top.png | Bin 0 -> 527 bytes .../textures/gui/coppercontainer.png | Bin 0 -> 3677 bytes .../textures/gui/diamondcontainer.png | Bin 0 -> 3826 bytes .../ironchest/textures/gui/dirtcontainer.png | Bin 0 -> 3588 bytes .../ironchest/textures/gui/goldcontainer.png | Bin 0 -> 4242 bytes .../ironchest/textures/gui/ironcontainer.png | Bin 0 -> 3724 bytes .../textures/gui/silvercontainer.png | Bin 0 -> 3818 bytes .../textures/items/copperIronUpgrade.png | Bin 0 -> 480 bytes .../textures/items/copperSilverUpgrade.png | Bin 0 -> 480 bytes .../textures/items/diamondCrystalUpgrade.png | Bin 0 -> 418 bytes .../textures/items/diamondObsidianUpgrade.png | Bin 0 -> 466 bytes .../textures/items/goldDiamondUpgrade.png | Bin 0 -> 480 bytes .../textures/items/ironGoldUpgrade.png | Bin 0 -> 526 bytes .../textures/items/silverGoldUpgrade.png | Bin 0 -> 526 bytes .../textures/items/woodCopperUpgrade.png | Bin 0 -> 542 bytes .../textures/items/woodIronUpgrade.png | Bin 0 -> 540 bytes .../ironchest/textures/model/copperchest.png | Bin 0 -> 4073 bytes .../ironchest/textures/model/crystalchest.png | Bin 0 -> 4096 bytes .../ironchest/textures/model/diamondchest.png | Bin 0 -> 4094 bytes .../ironchest/textures/model/dirtchest.png | Bin 0 -> 6110 bytes .../ironchest/textures/model/goldchest.png | Bin 0 -> 4284 bytes .../ironchest/textures/model/ironchest.png | Bin 0 -> 4295 bytes .../textures/model/obsidianchest.png | Bin 0 -> 2042 bytes .../ironchest/textures/model/silverchest.png | Bin 0 -> 3934 bytes src/main/resources/itemsheet.xcf | Bin 0 -> 11427 bytes src/main/resources/mcmod.info | 21 + src/main/resources/texturesheet.xcf | Bin 0 -> 21529 bytes 105 files changed, 3405 insertions(+) create mode 100755 .gitignore create mode 100755 README.md create mode 100755 build.gradle create mode 100755 gradle/wrapper/gradle-wrapper.jar create mode 100755 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100755 gradlew.bat create mode 100755 src/api/java/invtweaks/api/container/ChestContainer.java create mode 100755 src/main/java/cpw/mods/ironchest/BlockIronChest.java create mode 100755 src/main/java/cpw/mods/ironchest/ChestChangerType.java create mode 100755 src/main/java/cpw/mods/ironchest/CommonProxy.java create mode 100755 src/main/java/cpw/mods/ironchest/ContainerIronChest.java create mode 100755 src/main/java/cpw/mods/ironchest/IronChest.java create mode 100755 src/main/java/cpw/mods/ironchest/IronChestAIOcelotSit.java create mode 100755 src/main/java/cpw/mods/ironchest/IronChestType.java create mode 100755 src/main/java/cpw/mods/ironchest/ItemChestChanger.java create mode 100755 src/main/java/cpw/mods/ironchest/ItemIronChest.java create mode 100755 src/main/java/cpw/mods/ironchest/MappableItemStackWrapper.java create mode 100755 src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java create mode 100755 src/main/java/cpw/mods/ironchest/PacketHandler.java create mode 100755 src/main/java/cpw/mods/ironchest/TileEntityCopperChest.java create mode 100755 src/main/java/cpw/mods/ironchest/TileEntityCrystalChest.java create mode 100755 src/main/java/cpw/mods/ironchest/TileEntityDiamondChest.java create mode 100755 src/main/java/cpw/mods/ironchest/TileEntityDirtChest.java create mode 100755 src/main/java/cpw/mods/ironchest/TileEntityGoldChest.java create mode 100755 src/main/java/cpw/mods/ironchest/TileEntityIronChest.java create mode 100755 src/main/java/cpw/mods/ironchest/TileEntityObsidianChest.java create mode 100755 src/main/java/cpw/mods/ironchest/TileEntitySilverChest.java create mode 100755 src/main/java/cpw/mods/ironchest/ValidatingSlot.java create mode 100755 src/main/java/cpw/mods/ironchest/Version.java create mode 100755 src/main/java/cpw/mods/ironchest/client/ClientProxy.java create mode 100755 src/main/java/cpw/mods/ironchest/client/GUIChest.java create mode 100755 src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java create mode 100755 src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java create mode 100755 src/main/resources/assets/ironchest/lang/cs_CZ.lang create mode 100755 src/main/resources/assets/ironchest/lang/da_DK.lang create mode 100755 src/main/resources/assets/ironchest/lang/de_DE.lang create mode 100755 src/main/resources/assets/ironchest/lang/el_GR.lang create mode 100755 src/main/resources/assets/ironchest/lang/en_PT.lang create mode 100755 src/main/resources/assets/ironchest/lang/en_US.lang create mode 100755 src/main/resources/assets/ironchest/lang/es_ES.lang create mode 100755 src/main/resources/assets/ironchest/lang/et_EE.lang create mode 100755 src/main/resources/assets/ironchest/lang/fr_FR.lang create mode 100755 src/main/resources/assets/ironchest/lang/it_IT.lang create mode 100755 src/main/resources/assets/ironchest/lang/ko_KR.lang create mode 100755 src/main/resources/assets/ironchest/lang/nb_NO.lang create mode 100755 src/main/resources/assets/ironchest/lang/nl_NL.lang create mode 100755 src/main/resources/assets/ironchest/lang/pl_PL.lang create mode 100755 src/main/resources/assets/ironchest/lang/pt_BR.lang create mode 100755 src/main/resources/assets/ironchest/lang/pt_PT.lang create mode 100755 src/main/resources/assets/ironchest/lang/ru_RU.lang create mode 100755 src/main/resources/assets/ironchest/lang/sv_SE.lang create mode 100755 src/main/resources/assets/ironchest/lang/tr_TR.lang create mode 100755 src/main/resources/assets/ironchest/lang/zh_CN.lang create mode 100755 src/main/resources/assets/ironchest/lang/zh_TW.lang create mode 100755 src/main/resources/assets/ironchest/textures/blocks/copper_front.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/copper_side.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/copper_top.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/crystal_front.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/crystal_side.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/crystal_top.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/diamond_front.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/diamond_side.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/diamond_top.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/gold_front.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/gold_side.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/gold_top.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/iron_front.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/iron_side.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/iron_top.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/obsidian_front.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/obsidian_side.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/obsidian_top.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/silver_front.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/silver_side.png create mode 100755 src/main/resources/assets/ironchest/textures/blocks/silver_top.png create mode 100755 src/main/resources/assets/ironchest/textures/gui/coppercontainer.png create mode 100755 src/main/resources/assets/ironchest/textures/gui/diamondcontainer.png create mode 100755 src/main/resources/assets/ironchest/textures/gui/dirtcontainer.png create mode 100755 src/main/resources/assets/ironchest/textures/gui/goldcontainer.png create mode 100755 src/main/resources/assets/ironchest/textures/gui/ironcontainer.png create mode 100755 src/main/resources/assets/ironchest/textures/gui/silvercontainer.png create mode 100755 src/main/resources/assets/ironchest/textures/items/copperIronUpgrade.png create mode 100755 src/main/resources/assets/ironchest/textures/items/copperSilverUpgrade.png create mode 100755 src/main/resources/assets/ironchest/textures/items/diamondCrystalUpgrade.png create mode 100755 src/main/resources/assets/ironchest/textures/items/diamondObsidianUpgrade.png create mode 100755 src/main/resources/assets/ironchest/textures/items/goldDiamondUpgrade.png create mode 100755 src/main/resources/assets/ironchest/textures/items/ironGoldUpgrade.png create mode 100755 src/main/resources/assets/ironchest/textures/items/silverGoldUpgrade.png create mode 100755 src/main/resources/assets/ironchest/textures/items/woodCopperUpgrade.png create mode 100755 src/main/resources/assets/ironchest/textures/items/woodIronUpgrade.png create mode 100755 src/main/resources/assets/ironchest/textures/model/copperchest.png create mode 100755 src/main/resources/assets/ironchest/textures/model/crystalchest.png create mode 100755 src/main/resources/assets/ironchest/textures/model/diamondchest.png create mode 100755 src/main/resources/assets/ironchest/textures/model/dirtchest.png create mode 100755 src/main/resources/assets/ironchest/textures/model/goldchest.png create mode 100755 src/main/resources/assets/ironchest/textures/model/ironchest.png create mode 100755 src/main/resources/assets/ironchest/textures/model/obsidianchest.png create mode 100755 src/main/resources/assets/ironchest/textures/model/silverchest.png create mode 100755 src/main/resources/itemsheet.xcf create mode 100755 src/main/resources/mcmod.info create mode 100755 src/main/resources/texturesheet.xcf diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..8eef75c --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +build/ +.classpath +.project +.gradle/ +eclipse/ +bin/ +repo/ +/run/ +.settings/ +#IDEA files from Gradle +.idea/ +/*.iml +/*.ipr +/*.iws diff --git a/README.md b/README.md new file mode 100755 index 0000000..7c2d0e9 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +ironchest +========= + +Iron Chest minecraft mod + +a GPL v3 licensed mod by cpw + +Currently Maintained by ProgWML6 + +See http://files.minecraftforge.net/IronChests2/ for downloads diff --git a/build.gradle b/build.gradle new file mode 100755 index 0000000..a24a928 --- /dev/null +++ b/build.gradle @@ -0,0 +1,196 @@ +// This sets us up for building a forge project - you need all of these +buildscript { + repositories { + mavenCentral() + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + maven { + name = "sonatype" + url = "https://oss.sonatype.org/content/repositories/snapshots/" + } + } + dependencies { + classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' + } +} + +// Apply the forge plugin - this adds all the magic for automatically obfuscating, deobfuscating etc +apply plugin: 'forge' + +// This is a simple flatdir repository for "uploadArchives" when you don't have a remote repo to target +repositories { + flatDir { + name "fileRepo" + dirs "repo" + } +} +// IronChest uses git tagging to mark major versions. This sets up the project version to that version data +def versionInfo = getGitVersion() +version = "${versionInfo['IronChest.version']}" + +// This is our group. I'm cpw.mods +group= "cpw.mods" // http://maven.apache.org/guides/mini/guide-naming-conventions.html +// This is our actual project within the group. Note: FML has "fml" here. But this is ironchest. +archivesBaseName = "ironchest" + +// Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here +minecraft { + version = "1.7.10-10.13.0.1150" +} + +// This wrangles the resources for the jar files- stuff like textures and languages +processResources +{ + // we're omitting the .xcf files - they're development only + exclude '**/*.xcf' + // we only want to do search/replace stuff in mcmod.info, nothing else + from(sourceSets.main.resources.srcDirs) { + include 'mcmod.info' + + // replace version and mcversion + expand 'version':project.version, 'mcversion':project.minecraft.version + } + + // copy everything else, thats not the mcmod.info + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' + } + + // generate version.properties file from the git version data earlier + doLast { + def propsFile = new File(destinationDir, 'version.properties') + def properties = new Properties() + properties.putAll(versionInfo) + properties['IronChest.build.mcversion'] = project.minecraft.version + properties.store(propsFile.newWriter(), null) + } +} + +// this sets our output jar to have a 'tag' of 'universal' on it +// It also adds the minecraft version in a custom version name +// The result is files named ---universal.jar +jar { + classifier = 'universal' + version = "${project.minecraft.version}-${project.version}" + +} + +println "FISHBUM ${jar.version}" + +// Add in a source jar for people, should they desire to download such a thing +task sourceJar(type: Jar) { + from sourceSets.main.allSource + classifier = 'src' + version = "${project.minecraft.version}-${project.version}" +} + +// Add in an mcp named jar, for those who wish to run in a development environment (assuming mcp naming matches) +task deobfJar(type: Jar) { + from sourceSets.main.output + classifier = 'deobf' + version = "${project.minecraft.version}-${project.version}" +} + +// Tell the artifact system about our extra jars +artifacts { + archives sourceJar, deobfJar +} + +// Configure an upload task. this is setup for uploading to files.minecraftforge.net. There are other examples around +uploadArchives { + dependsOn 'reobf' + repositories { + if (project.hasProperty("filesmaven")) { + logger.info('Publishing to files server') + + mavenDeployer { + configuration = configurations.deployJars + + repository(url: project.filesmaven.url) { + authentication(userName: project.filesmaven.username, privateKey: project.filesmaven.key) + } + + // This is just the pom data for the maven repo + pom { + groupId = project.group + // Force the maven upload to use the - syntax preferred at files + version = "${project.minecraft.version}-${project.version}" + artifactId = project.archivesBaseName + project { + name project.archivesBaseName + packaging 'jar' + description 'IronChest' + url 'https://github.com/cpw/IronChest' + + scm { + url 'https://github.com/progwml6/IronChest' + connection 'scm:git:git://github.com/progwml6/IronChest.git' + developerConnection 'scm:git:git@github.com:progwml6/IronChest.git' + } + + issueManagement { + system 'github' + url 'https://github.com/progwml6/IronChest/issues' + } + + licenses { + license { + name 'GNU Public License (GPL), Version 3.0' + url 'http://www.gnu.org/licenses/gpl-3.0.txt' + distribution 'repo' + } + } + + developers { + developer { + id 'cpw' + name 'cpw' + roles { role 'developer' } + } + } + } + } + } + } else { + logger.info('Publishing to repo folder') + + mavenDeployer { + pom.version = "${project.minecraft.version}-${project.version}" + repository(url: 'file://localhost/' + project.file('repo').getAbsolutePath()) + } + } + } +} + +// This is a special task for pulling the version information from git and the environment (for BUILD_NUMBER) +def getGitVersion() +{ + def out = [:] + + // call git command. + def outStream = new ByteArrayOutputStream() + def result = exec { + executable = 'git' + args = [ 'describe', '--long', "--match=[^(jenkins)]*"] + standardOutput = outStream + } + + def fullVersion = outStream.toString().trim() + def matcher = fullVersion =~ /(\d+).(\d+)-(\d+)-(.*)/ + + def maj = matcher[0][1] + def min = matcher[0][2] + def rev = matcher[0][3] + def bn = System.getenv("BUILD_NUMBER") ?: "1" + + out['IronChest.build.major.number'] = maj.toString() + out['IronChest.build.minor.number'] = min.toString() + out['IronChest.build.revision.number'] = rev.toString() + out['IronChest.build.githash'] = matcher[0][4].toString() + out['IronChest.build.number' ] = bn.toString() + out['IronChest.version' ] = "${maj}.${min}.${rev}.${bn}".toString() + + return out +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100755 index 0000000000000000000000000000000000000000..b7612167031001b7b84baf2a959e8ea8ad03c011 GIT binary patch literal 51017 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

N(DARnfPMFG|;(rIGZH1uB1rN;y7UlJ8 znb!RwO#5WS_%cPPlwSw94PTKP64}}J!~E1}ch9``2jvUrB*#@up8L&*`tqgq ztTAS@^33w-5hFZAH&{j)?l0<)9X(d`N|yLk!E=iT%PD-FTJ!|hqyj%RFFP`SaL;|_ z$(+VYhKm)K@Oe~+eZK(6ElQNdfimBrdKjeVl57_7p^|)jrzt|wyRonj$j9Bji!


f)EE4q$t9yObmyG04W0z zwEAra3WPkn>3Fb9s8^;JsD2U=J6G7s&CUebJEw+&=yoE*5?$-5j`#sxPl0^y-Nr5f zqODD$5Yec*Q%egs>4=qVe6nv3ffzozQ=Q){+(I-_?VSTi`{dk4@98oU1+Xtx3~B}K zYz=68@z@s5-T1<7tXF^>56vl# z58_Nqz!y-iJ+67h#|Q=}D!^}=s*eO@Y-td)8erJkZxGjR*`DK^rOIeP2<-!0FE>;# z_OWgl^eNX*lnJve=cWYR46lVZ=AlV|p3D5zU?m3qyx2*j8=?;SN-bYo6*=D1Sg&7Y3#^FT*@Odq-Z;-7>QjtU_L^=fm4iA4$-Q>6hmA zRIlHQF-50@Wj_&2!!tn^AW)czs8ybBv96Z%y6@Zh++jREJP+vPs$8uLU;6v)1AzzoXl^+Y(8ayi``o z&7K1gRo6gigwS58-c-J= zk~u7=EQOuN0vTL~k)W5tRTNoAFD8;wMuU8oLTCO5`(q=uhmAg@)=PHx5BZWJV3$9>@tgfGF?th{E_!`6G3pbet--D+P?`sQ$q;Zx z%t`hA!7mSNYBqbm(<&6CGMIfI1yAS~T5gA6nXvS$h>h>wN#+4=OY?AM^bd_h=<%PE%0+efQ zT519u=4vMv>vGC$(Oiv-Z@$I?SJ}mxji%pfti(2zDbrPwfIBq0P-pPg!!Jv~tQD1F zTv)BN(-QI>NYha>=3JRhcV%iBL`_Q!Xat>vr_(U{?OHzS0)dsC3fx41)1>vdi15?TlT$mal%d(AU}&53zZYUUxEieJ z<+tX27~QLrZAwE*+E3R9Nj6(q7ssUbir40&RAiUQoTDqy^EO$UV-mM7JtLpMVa>cui;PDaQ8w<{p=jt0S%`-6Dhm zWls zyQ*A00#tGit}tCy=>eITPG#jlVU^%6m0z(zZ*XiX8}_S9yL!tt5P{BQ)qc?qmxZiH!IXdss0`rYp5n# z9oA?qNyp`%*q~AVu8Y8;=Hg%;;Z)__( z=xL^@qCVbhoXRP`|Kt{~g;>p7?6~^|7h0Y!jnMPgs3+a3u{Wu_ka<&$KAaHcve?M5 z*W=6Q_Nruw^4y&qKoQxui1+J>U{eY#N`&ah(VE59r_frKCL!uBcmUJN`EDfJR-r6p z##}B56~NoHD1Jdi++w6l`B4nLXBk2hSZ&KgKW@C{A7i#pk#9z^H& zPZIxP#3CC)9s^{IT?H!89Y0(MV&8k#CA%C6Dg~9j=gA=V0?ZXa@*QB7`I9n@4yOTE zItq!LXP4b{JHSw50JHrxJtvG0&pqxwvfKDCWSaxo1}y407iZgen=BF{$sIEKCwYajZAQ_j`7Wo3m7%)cYm94mCz{x< zte2=rYlGL>GhB0ITZamFt$Xl?vrot#zt`2%g1gCH-|PbF{ay_cuYeoFr%!t|e-|id zDCDAT3dAnKOZy4lQZ8BjKoHk}F*p143&wCtu2q?%UDE1MKEIknUX5^^o!?R^St54< zyDkS?@9_V0hy9`i6T*L)49#c&02Kc@dH8SQji{Tkq4R%p?~~PC^{|&Qf3k_i8yxJz ztW5X)AON`=jG3h+gv@w=N_5oaltNq1e|M~*8)b83Go49jnyJ%TOQO$#;-1@>g~PT9 zNN>(9bidMVd(O$ed%K#R7ilfrh3+0`IH9j-9wp!Qc5mi1c> zw9!Ur;6w@aTNv!=5um|0bP}q#(DlYBMP@wJUVc13(Ai}N0KTI=qiH5XJ+_CNV zNQZO=A6+AM37@!5%yb@IDuCRkyz?@3u?M`4fBInZA@qYAf5*Xu4z`g8z(>x+Lfm#M zIvs?mv(oA^KRD}xyhaYg2QgB!z>ke*KRnMf;6)vH;Y95brsK!#86tY|1c(#8iGbur z?I|~SvqXs(u2C4}ro1yV;b{Af-u;e$XlLNV7p3nZkm|u0PQ5c`yrx$4Le-5txO@`> z*;T3QDy3)TT3Bs1Zn8DA8%>G-#vLRU9_%JAG=wtv>TKH9FjbqBbtYP;MZs@)#}1*n~=)XfJe-TDf9D-jJB{iK$w(g16V)y*_UNhqV5!X}8mbdyTE=p{I>UHuV-sbK#}b96 z&^f1XpDOFbmcb#UTd|+izeSDM8wb9HN`azk+;yvyz50~bN$91h|E!viQ#|#Embdn| zN35bAR1CW47}}(Qozx}PFG0Ch?$)R$$vP;Ld8yPxZNBgn7>b~K+L7Ib<|yKYEd%59 z7}QI=Y^lYJYSR{T7%g1D%mpjWRw+4739FpVl7J4G-|F5gOH6}3BG#OgETFAn@rK3c z8!D2>?jH_QimsmC7`rA*H*ekeW;oGX!zi>5Q1rt7s;Efvn zO|?tR7x`%U^TNe5NGZYt38ym%h+qM^%!2kKROY;hf}yZRfsgP@#eik?#oCNgGnJp* z0rww?`rUH3J*w<21FlrN`5J8%kSQ&J-{jPk#CFS38y#hvU0S)>8DC{5@fe^$7m{hC zO0q;;BU|b#%(z5)0#tu`yUJE`Q=v2}&$f*hG+mN5D49nzVv+j>&pclt%>C$X?nQ_x1>RX!2; zk%IY6%Cn6oD%WBvRiX?cBdXU*4%RW0^$W`e`sh&k`{m1N4yhaHs`Dz}F!6rfJ8YF5 zoEFps7^pXrt9}Ym_)vykG>h?xra7lR|8lsyi~vqOWOumJtSF>1~RNWW!4#>2b8XQ=thuT1fi6eN#2^v|}E&rvRR>c+bwm z2QFq@s(LpD`54^VJk3Nu#9WMqx9X@OT7foumh$2z-CV!ynNv(_Pn%lKL#esBfQX;H z1nuD!8$UfV`rKA5pWazsrBR%KZMf~W?K z(AbBjx)Yo9+J*R*Neucs*z+JB)hlu+oIYb-a&k-ABVt)mhKjdbT9huyGbXk?>-y!- z0(QkGlMPjT>DH8FqCa4HvnETjbyE{g540?X+hV%Ip}LztD50lqjEo| zPx*FYM)E=}7j^pcd|1O{D|A>0Rj|(05E;f?w4QDLBnr z?c9uk9uYbs^QAcb2O@tEhmfqr=i(&r1P!sHJ8=JOZrlnhAL!uC>W#CcaOKt;Gszmh z!>Gv|s<_s!Z)=`kWuM$+-`osmcQbEwtKRIS&+J?Xo9UoC@bGUwcggbT;$;X<4!+JE zG#(`n&Of(9myY>rBMey347i&Oy~Esra=@Y|oDh-JrRbs;!e2r>dT0g09`z<6(e+QS zg>}}A_n!k1*)gXGjmk|Bp{4Z|1+HzwxkNmYhASO0oU)qE{yY=V@9*M!WU1aH>dh~dAVC3@ysAiglYcrUWP5-gLWNqRPAqe z^B>(kzh8y&WqoYsJJ~>bgbuHWluQwmW)5%e+^AJYmujIk-Qd5>skriFtlx?qc9Sdz zD8@ONpc{Goib=ts)VUZU4N2YSdJr>zc?Ka>0TMWv&4tbZzRX?#83<5k|x5DoqdM5+EW5dGKhYyXC${}r46cRkw;c@*^< zd{W1~8;ls+O0W)17DwjPp zRLwgt&MpBsdX+mO)MJNs9D21oBzm2T;cAB$CRF-SYLqS|(dMn%k;P(4(kwdHSIJ^2TjZz%#_H}N++3cLG(h2F%W zuQ1n_+&nB^dA?=}edrx>{3YOq9tKn#7NmvY<#hfRc+Bw)PeH6DqYEJdc}H%xyZ$%d z3c9vV@U%$%rMQWx=Qh&(w*B1QtBFO}rMFA0LT4M&PA8%)l*^@A2uB+E0mw-|fUq&6CFMb^f~e^-hV4NpL_ zG}Ev>9;82|UDVl&n9~s1(z+}>RIvo}SZGL%fz+>XL_!Wi;o+R)^QPB5A-nra9!4|b z9p8G<7)cgKH&~5C8BLUwP2N*Tr5eKdBcGv=niowuFG`zu#OEzGNPiy`qPxF}b>J2ga@n8Q+i#2dDK~g~5ALr@C%8>tsZB#x zw_)74%99h8?h$l;c7?Ng2eU;%`#L&YGLen3Qhk1-G7;9;MoPM!dvs^&A5AyZsjj1h zM!rB^m~un$2mLd-U-3+#;xg+>y-We=#TM$jW*`5pG{jeu{#!HR1%GSI!y2boLv~5hy3W553S&&&T z5u|~{UrS0k$cadZ&eeAt8>A#s{*Y<0=ify(CgS7{RW?`H8{fU8d z@)}Q@=be+ro2d}$xyEVGhBn_D{k)+g(V`SYx0_9M^Ut;TO7e8)7AC-fnK&$K}ru2%w{>TNOOo4 zHy0>z?sp#h8gU@>q&&JSq}qKM&nkHlsN>t%ckHr7cwy~!xSZ_9DRr_xMv%o_mTV~h z4`b&TT?x0X>56UJww+XL+qUggDzJY-`^?Ri%iT;t zTGRFQ`rdezhA5`VMuMq4P*Tu?tHOST#N$ZCSJWTH5#ZI(WxRH=;jiN>u$pE9cL z98HeORByGr!#qTztg6ui|Y(v^qXBd`6|#3HmJBE_``TzGCc+{s7{R=$_NxddPK{FcS+9td=A~<7{wWUIEo{cuDYLTl zg+JjIa!sn*L}mA9{j_|tzO|mrF+}Y#XyE~|dvIsxb+5N`ozqje{HEOgZ;Mh3lF>sY)WZ|M~1LJ(9nL>1ij)E1&!BX$8R3?=S$Y<)L z^HC=xwEc>CCVg5MNRsGjS@&cQ092Yy^u_tUHRKVvu*!&2l_~cubzB;H+hnyd6BU-R zrin?Z9lZbuda4szuGA2Vqd{>ly`;H
I?(=FkI4HG5z>aYtPkihJ!5A^TdrGx%b< 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 t|KH7qPwVTc?c*oWQQiM74F8)Y \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100755 index 0000000..aec9973 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/src/api/java/invtweaks/api/container/ChestContainer.java b/src/api/java/invtweaks/api/container/ChestContainer.java new file mode 100755 index 0000000..4722921 --- /dev/null +++ b/src/api/java/invtweaks/api/container/ChestContainer.java @@ -0,0 +1,28 @@ +package invtweaks.api.container; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * A marker for containers that have a chest-like persistant storage component. Enables the Inventroy Tweaks sorting + * buttons for this container. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface ChestContainer { + // Size of a chest row + int rowSize() default 9; + + // Uses 'large chest' mode for sorting buttons + // (Renders buttons vertically down the right side of the GUI) + boolean isLargeChest() default false; + + // Annotation for method to get size of a chest row if it is not a fixed size for this container class + // Signature int func() + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface RowSizeCallback { + } +} \ No newline at end of file diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java new file mode 100755 index 0000000..ff79cf7 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -0,0 +1,275 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import com.google.common.collect.Lists; + +public class BlockIronChest extends BlockContainer { + + private Random random; + + public BlockIronChest() + { + super(Material.iron); + setUnlocalizedName("IronChest"); + setHardness(3.0F); + setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); + random = new Random(); + setCreativeTab(CreativeTabs.tabDecorations); + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return 22; + } + + @Override + public TileEntity createNewTileEntity(World world, int metadata) + { + return IronChestType.makeEntity(metadata); + } + + /*@Override + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) + { + ArrayList items = Lists.newArrayList(); + ItemStack stack = new ItemStack(this,1,metadata); + IronChestType.values()[IronChestType.validateMeta(metadata)].adornItemDrop(stack); + items.add(stack); + return items; + }*/ + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState blockState, EntityPlayer player, EnumFacing direction, float p_180639_6_, float p_180639_7_, float p_180639_8_) + { + TileEntity te = world.getTileEntity(pos); + + if (te == null || !(te instanceof TileEntityIronChest)) + { + return true; + } + + /*if (world.isSideSolid(i, j + 1, k, ForgeDirection.DOWN)) + { + return true; + }*/ + + if (world.isRemote) + { + return true; + } + + player.openGui(IronChest.instance, ((TileEntityIronChest) te).getType().ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public void onBlockAdded(World world, BlockPos pos, IBlockState blockState) + { + super.onBlockAdded(world, pos, blockState); + world.markBlockForUpdate(pos); + } + + @Override + public void onBlockPlacedBy(World world, BlockPos pos, IBlockState blockState, EntityLivingBase entityliving, ItemStack itemStack) + { + byte chestFacing = 0; + int facing = MathHelper.floor_double((double) ((entityliving.rotationYaw * 4F) / 360F) + 0.5D) & 3; + if (facing == 0) + { + chestFacing = 2; + } + if (facing == 1) + { + chestFacing = 5; + } + if (facing == 2) + { + chestFacing = 3; + } + if (facing == 3) + { + chestFacing = 4; + } + TileEntity te = world.getTileEntity(pos); + if (te != null && te instanceof TileEntityIronChest) + { + TileEntityIronChest teic = (TileEntityIronChest) te; + teic.wasPlaced(entityliving, itemStack); + teic.setFacing(chestFacing); + world.markBlockForUpdate(pos); + } + } + + /*@Override + public int damageDropped(int i) + { + return i; + }*/ + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState blockState) + { + TileEntityIronChest tileentitychest = (TileEntityIronChest) world.getTileEntity(pos); + if (tileentitychest != null) + { + tileentitychest.removeAdornments(); + dropContent(0, tileentitychest, world, tileentitychest.getPos()); + } + super.breakBlock(world, pos, blockState); + } + + public void dropContent(int newSize, IInventory chest, World world, BlockPos pos) + { + for (int l = newSize; l < chest.getSizeInventory(); l++) + { + ItemStack itemstack = chest.getStackInSlot(l); + if (itemstack == null) + { + continue; + } + float f = random.nextFloat() * 0.8F + 0.1F; + float f1 = random.nextFloat() * 0.8F + 0.1F; + float f2 = random.nextFloat() * 0.8F + 0.1F; + while (itemstack.stackSize > 0) + { + int i1 = random.nextInt(21) + 10; + if (i1 > itemstack.stackSize) + { + i1 = itemstack.stackSize; + } + itemstack.stackSize -= i1; + EntityItem entityitem = new EntityItem(world, (float) pos.getX() + f, (float) pos.getY() + (newSize > 0 ? 1 : 0) + f1, (float) pos.getZ() + f2, + new ItemStack(itemstack.getItem(), i1, itemstack.getMetadata())); + float f3 = 0.05F; + entityitem.motionX = (float) random.nextGaussian() * f3; + entityitem.motionY = (float) random.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) random.nextGaussian() * f3; + if (itemstack.hasTagCompound()) + { + entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + } + world.spawnEntityInWorld(entityitem); + } + } + } + + @Override + @SuppressWarnings({ "rawtypes", "unchecked" }) + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) + { + for (IronChestType type : IronChestType.values()) + { + if (type.isValidForCreativeMode()) + { + par3List.add(new ItemStack(this, 1, type.ordinal())); + } + } + } + + /*@Override + public float getExplosionResistance(Entity par1Entity, World world, int x, int y, int z, double explosionX, double explosionY, double explosionZ) + { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof TileEntityIronChest) + { + TileEntityIronChest teic = (TileEntityIronChest) te; + if (teic.getType().isExplosionResistant()) + { + return 10000f; + } + } + return super.getExplosionResistance(par1Entity, world, x, y, z, explosionX, explosionY, explosionZ); + }*/ + + @Override + public boolean hasComparatorInputOverride() { + return true; + } + + @Override + public int getComparatorInputOverride(World world, BlockPos pos) + { + TileEntity te = world.getTileEntity(pos); + if (te instanceof IInventory) + { + return Container.calcRedstoneFromInventory((IInventory)te); + } + return 0; + } + + /*private static final ForgeDirection[] validRotationAxes = new ForgeDirection[] { UP, DOWN }; + @Override + public ForgeDirection[] getValidRotations(World worldObj, int x, int y, int z) + { + return validRotationAxes; + } + + @Override + public boolean rotateBlock(World worldObj, int x, int y, int z, ForgeDirection axis) + { + if (worldObj.isRemote) + { + return false; + } + if (axis == UP || axis == DOWN) + { + TileEntity tileEntity = worldObj.getTileEntity(x, y, z); + if (tileEntity instanceof TileEntityIronChest) { + TileEntityIronChest icte = (TileEntityIronChest) tileEntity; + icte.rotateAround(axis); + } + return true; + } + return false; + }*/ + +} diff --git a/src/main/java/cpw/mods/ironchest/ChestChangerType.java b/src/main/java/cpw/mods/ironchest/ChestChangerType.java new file mode 100755 index 0000000..354c9f4 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/ChestChangerType.java @@ -0,0 +1,93 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. All rights reserved. This program and the accompanying materials are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at http://www.gnu.org/licenses/gpl.html + * + * Contributors: cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import static cpw.mods.ironchest.IronChestType.COPPER; +import static cpw.mods.ironchest.IronChestType.CRYSTAL; +import static cpw.mods.ironchest.IronChestType.DIAMOND; +import static cpw.mods.ironchest.IronChestType.GOLD; +import static cpw.mods.ironchest.IronChestType.IRON; +import static cpw.mods.ironchest.IronChestType.OBSIDIAN; +import static cpw.mods.ironchest.IronChestType.SILVER; +import static cpw.mods.ironchest.IronChestType.WOOD; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.registry.GameRegistry; + +public enum ChestChangerType { + IRONGOLD(IRON, GOLD, "ironGoldUpgrade", "Iron to Gold Chest Upgrade", "mmm", "msm", "mmm"), + GOLDDIAMOND(GOLD, DIAMOND, "goldDiamondUpgrade", "Gold to Diamond Chest Upgrade", "GGG", "msm", "GGG"), + COPPERSILVER(COPPER, SILVER, "copperSilverUpgrade", "Copper to Silver Chest Upgrade", "mmm", "msm", "mmm"), + SILVERGOLD(SILVER, GOLD, "silverGoldUpgrade", "Silver to Gold Chest Upgrade", "mGm", "GsG", "mGm"), + COPPERIRON(COPPER, IRON, "copperIronUpgrade", "Copper to Iron Chest Upgrade", "mGm", "GsG", "mGm"), + DIAMONDCRYSTAL(DIAMOND, CRYSTAL, "diamondCrystalUpgrade", "Diamond to Crystal Chest Upgrade", "GGG", "GOG", "GGG"), + WOODIRON(WOOD, IRON, "woodIronUpgrade", "Normal chest to Iron Chest Upgrade", "mmm", "msm", "mmm"), + WOODCOPPER(WOOD, COPPER, "woodCopperUpgrade", "Normal chest to Copper Chest Upgrade", "mmm", "msm", "mmm"), + DIAMONDOBSIDIAN(DIAMOND, OBSIDIAN, "diamondObsidianUpgrade", "Diamond to Obsidian Chest Upgrade", "mmm", "mGm", "mmm"); + + private IronChestType source; + private IronChestType target; + public String itemName; + public String descriptiveName; + private ItemChestChanger item; + private String[] recipe; + + private ChestChangerType(IronChestType source, IronChestType target, String itemName, String descriptiveName, String... recipe) + { + this.source = source; + this.target = target; + this.itemName = itemName; + this.descriptiveName = descriptiveName; + this.recipe = recipe; + } + + public boolean canUpgrade(IronChestType from) + { + return from == this.source; + } + + public int getTarget() + { + return this.target.ordinal(); + } + + public ItemChestChanger buildItem() + { + item = new ItemChestChanger(this); + GameRegistry.registerItem(item, itemName); + return item; + } + + public void addRecipes() + { + for (String sourceMat : source.getMatList()) + { + for (String targetMat : target.getMatList()) + { + Object targetMaterial = IronChestType.translateOreName(targetMat); + Object sourceMaterial = IronChestType.translateOreName(sourceMat); + IronChestType.addRecipe(new ItemStack(item), recipe, 'm', targetMaterial, 's', sourceMaterial, 'G', Blocks.glass, 'O', Blocks.obsidian); + } + } + } + + public static void buildItems() + { + for (ChestChangerType type : values()) + { + type.buildItem(); + } + } + + public static void generateRecipes() + { + for (ChestChangerType item : values()) + { + item.addRecipes(); + } + } +} diff --git a/src/main/java/cpw/mods/ironchest/CommonProxy.java b/src/main/java/cpw/mods/ironchest/CommonProxy.java new file mode 100755 index 0000000..4e86f81 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/CommonProxy.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.IGuiHandler; + +public class CommonProxy implements IGuiHandler { + public void registerRenderInformation() + { + + } + + public void registerTileEntitySpecialRenderer(IronChestType typ) + { + + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) + { + return null; + } + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) + { + TileEntity te = world.getTileEntity(new BlockPos(x, y, z)); + if (te != null && te instanceof TileEntityIronChest) + { + TileEntityIronChest icte = (TileEntityIronChest) te; + return new ContainerIronChest(player.inventory, icte, icte.getType(), 0, 0); + } + else + { + return null; + } + } + + public World getClientWorld() + { + return null; + } + +} diff --git a/src/main/java/cpw/mods/ironchest/ContainerIronChest.java b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java new file mode 100755 index 0000000..2257aeb --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java @@ -0,0 +1,124 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +//@ChestContainer(isLargeChest = true) +public class ContainerIronChest extends Container { + private IronChestType type; + private EntityPlayer player; + private IInventory chest; + + public ContainerIronChest(IInventory playerInventory, IInventory chestInventory, IronChestType type, int xSize, int ySize) + { + chest = chestInventory; + player = ((InventoryPlayer) playerInventory).player; + this.type = type; + chestInventory.openInventory(player); + layoutContainer(playerInventory, chestInventory, type, xSize, ySize); + } + + @Override + public boolean canInteractWith(EntityPlayer player) + { + return chest.isUseableByPlayer(player); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p, int i) + { + ItemStack itemstack = null; + Slot slot = (Slot) inventorySlots.get(i); + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + if (i < type.size) + { + if (!mergeItemStack(itemstack1, type.size, inventorySlots.size(), true)) + { + return null; + } + } + else if (!type.acceptsStack(itemstack1)) + { + return null; + } + else if (!mergeItemStack(itemstack1, 0, type.size, false)) + { + return null; + } + if (itemstack1.stackSize == 0) + { + slot.putStack(null); + } + else + { + slot.onSlotChanged(); + } + } + return itemstack; + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + chest.closeInventory(entityplayer); + } + + protected void layoutContainer(IInventory playerInventory, IInventory chestInventory, IronChestType type, int xSize, int ySize) + { + if (type == IronChestType.DIRTCHEST9000) { + addSlotToContainer(type.makeSlot(chestInventory, 0, 12 + 4 * 18, 8 + 2 * 18)); + } else { + for (int chestRow = 0; chestRow < type.getRowCount(); chestRow++) + { + for (int chestCol = 0; chestCol < type.getRowLength(); chestCol++) + { + addSlotToContainer(type.makeSlot(chestInventory, chestCol + chestRow * type.getRowLength(), 12 + chestCol * 18, 8 + chestRow * 18)); + } + } + } + + int leftCol = (xSize - 162) / 2 + 1; + for (int playerInvRow = 0; playerInvRow < 3; playerInvRow++) + { + for (int playerInvCol = 0; playerInvCol < 9; playerInvCol++) + { + addSlotToContainer(new Slot(playerInventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4 - playerInvRow) * 18 + - 10)); + } + + } + + for (int hotbarSlot = 0; hotbarSlot < 9; hotbarSlot++) + { + addSlotToContainer(new Slot(playerInventory, hotbarSlot, leftCol + hotbarSlot * 18, ySize - 24)); + } + } + + public EntityPlayer getPlayer() + { + return player; + } + + //@ChestContainer.RowSizeCallback + public int getNumColumns() { + return type.getRowLength(); + } +} diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java new file mode 100755 index 0000000..36eb2a0 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -0,0 +1,78 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import net.minecraft.init.Blocks; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventHandler; +import net.minecraftforge.fml.common.Mod.Instance; +import net.minecraftforge.fml.common.SidedProxy; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.registry.GameRegistry; + +@Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:Forge@[10.10,);required-after:FML@[7.2,)") +public class IronChest { + public static BlockIronChest ironChestBlock; + @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.CommonProxy") + public static CommonProxy proxy; + @Instance("IronChest") + public static IronChest instance; + public static boolean CACHE_RENDER = true; + public static boolean OCELOTS_SITONCHESTS = true; + + @EventHandler + public void preInit(FMLPreInitializationEvent event) + { + Version.init(event.getVersionProperties()); + event.getModMetadata().version = Version.fullVersionString(); + /*TODO Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); + try + { + cfg.load(); + ChestChangerType.buildItems(cfg); + CACHE_RENDER = cfg.get(Configuration.CATEGORY_GENERAL, "cacheRenderingInformation", true).getBoolean(true); + OCELOTS_SITONCHESTS = cfg.get(Configuration.CATEGORY_GENERAL, "ocelotsSitOnChests", true).getBoolean(true); + } + catch (Exception e) + { + FMLLog.log(Level.ERROR, e, "IronChest has a problem loading its configuration"); + } + finally + { + if (cfg.hasChanged()) + cfg.save(); + }*/ + ironChestBlock = new BlockIronChest(); + GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); + PacketHandler.INSTANCE.ordinal(); + } + + @EventHandler + public void load(FMLInitializationEvent evt) + { + for (IronChestType typ : IronChestType.values()) + { + GameRegistry.registerTileEntityWithAlternatives(typ.clazz, "IronChest."+typ.name(), typ.name()); + proxy.registerTileEntitySpecialRenderer(typ); + } + //OreDictionary.registerOre("chestWood", Blocks.chest); + IronChestType.registerBlocksAndRecipes(ironChestBlock); + ChestChangerType.generateRecipes(); + NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy); + proxy.registerRenderInformation(); +// if (OCELOTS_SITONCHESTS) +// { +// MinecraftForge.EVENT_BUS.register(new OcelotsSitOnChestsHandler()); +// } + } +} diff --git a/src/main/java/cpw/mods/ironchest/IronChestAIOcelotSit.java b/src/main/java/cpw/mods/ironchest/IronChestAIOcelotSit.java new file mode 100755 index 0000000..07e41f8 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/IronChestAIOcelotSit.java @@ -0,0 +1,22 @@ +package cpw.mods.ironchest; + +import net.minecraft.entity.ai.EntityAIOcelotSit; +import net.minecraft.entity.passive.EntityOcelot; + +public class IronChestAIOcelotSit extends EntityAIOcelotSit +{ + public IronChestAIOcelotSit(EntityOcelot par1EntityOcelot, float par2) + { + super(par1EntityOcelot, par2); + } + +/* @Override + protected boolean func_151486_a(World world, int x, int y, int z) + { + if (world.getBlock(x, y, z) == IronChest.ironChestBlock) + { + return true; + } + return super.func_151486_a(world, x, y, z); + } +*/} diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java new file mode 100755 index 0000000..bf589ac --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -0,0 +1,240 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagByte; +import net.minecraftforge.fml.common.registry.GameRegistry; + +public enum IronChestType { + IRON(54, 9, true, "Iron Chest", "ironchest.png", 0, Arrays.asList("ingotIron", "ingotRefinedIron"), TileEntityIronChest.class, "mmmmPmmmm", "mGmG3GmGm"), + GOLD(81, 9, true, "Gold Chest", "goldchest.png", 1, Arrays.asList("ingotGold"), TileEntityGoldChest.class, "mmmmPmmmm", "mGmG4GmGm"), + DIAMOND(108, 12, true, "Diamond Chest", "diamondchest.png", 2, Arrays.asList("gemDiamond"), TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), + COPPER(45, 9, false, "Copper Chest", "copperchest.png", 3, Arrays.asList("ingotCopper"), TileEntityCopperChest.class, "mmmmCmmmm"), + SILVER(72, 9, false, "Silver Chest", "silverchest.png", 4, Arrays.asList("ingotSilver"), TileEntitySilverChest.class, "mmmm3mmmm", "mGmG0GmGm"), + CRYSTAL(108, 12, true, "Crystal Chest", "crystalchest.png", 5, Arrays.asList("blockGlass"), TileEntityCrystalChest.class, "GGGGPGGGG"), + OBSIDIAN(108, 12, false, "Obsidian Chest", "obsidianchest.png", 6, Arrays.asList("obsidian"), TileEntityObsidianChest.class, "mmmm2mmmm"), + DIRTCHEST9000(1, 1, false, "Dirt Chest 9000", "dirtchest.png",7,Arrays.asList("dirt"), TileEntityDirtChest.class,Item.getItemFromBlock(Blocks.dirt),"mmmmCmmmm"), + WOOD(0, 0, false, "", "", -1, Arrays.asList("plankWood"), null); + int size; + private int rowLength; + public String friendlyName; + private boolean tieredChest; + private String modelTexture; + private int textureRow; + public Class clazz; + private String[] recipes; + private ArrayList matList; + private Item itemFilter; + + IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String modelTexture, int textureRow, List mats, + Class clazz, String... recipes) + { + this(size, rowLength, tieredChest, friendlyName, modelTexture, textureRow, mats, clazz, (Item)null, recipes); + } + IronChestType(int size, int rowLength, boolean tieredChest, String friendlyName, String modelTexture, int textureRow, List mats, + Class clazz, Item itemFilter, String... recipes) + { + this.size = size; + this.rowLength = rowLength; + this.tieredChest = tieredChest; + this.friendlyName = friendlyName; + this.modelTexture = modelTexture; + this.textureRow = textureRow; + this.clazz = clazz; + this.itemFilter = itemFilter; + this.recipes = recipes; + this.matList = new ArrayList(); + matList.addAll(mats); + } + + public String getModelTexture() + { + return modelTexture; + } + + public int getTextureRow() + { + return textureRow; + } + + public static TileEntityIronChest makeEntity(int metadata) + { + // Compatibility + int chesttype = validateMeta(metadata); + if (chesttype == metadata) + { + try + { + TileEntityIronChest te = values()[chesttype].clazz.newInstance(); + return te; + } + catch (InstantiationException e) + { + // unpossible + e.printStackTrace(); + } + catch (IllegalAccessException e) + { + // unpossible + e.printStackTrace(); + } + } + return null; + } + + public static void registerBlocksAndRecipes(BlockIronChest blockResult) + { + Object previous = "chestWood"; + for (IronChestType typ : values()) + { + generateRecipesForType(blockResult, previous, typ); + ItemStack chest = new ItemStack(blockResult, 1, typ.ordinal()); + if (typ.isValidForCreativeMode()) GameRegistry.registerCustomItemStack(typ.friendlyName, chest); + if (typ.tieredChest) previous = chest; + } + } + + public static void generateRecipesForType(BlockIronChest blockResult, Object previousTier, IronChestType type) + { + for (String recipe : type.recipes) + { + String[] recipeSplit = new String[] { recipe.substring(0, 3), recipe.substring(3, 6), recipe.substring(6, 9) }; + Object mainMaterial = null; + for (String mat : type.matList) + { + mainMaterial = translateOreName(mat); + addRecipe(new ItemStack(blockResult, 1, type.ordinal()), recipeSplit, + 'm', mainMaterial, 'P', previousTier, /* previous tier of chest */ + 'G', "blockGlass", 'C', "chestWood", + '0', new ItemStack(blockResult, 1, 0), /* Iron Chest */ + '1', new ItemStack(blockResult, 1, 1), /* Gold Chest */ + '2', new ItemStack(blockResult, 1, 2), /* Diamond Chest */ + '3', new ItemStack(blockResult, 1, 3), /* Copper Chest */ + '4', new ItemStack(blockResult, 1, 4) /* Silver Chest */ + ); + } + } + } + + public static Object translateOreName(String mat) + { + if (mat.equals("obsidian")) + { + return Blocks.obsidian; + } + else if (mat.equals("dirt")) + { + return Blocks.dirt; + } + return mat; + } + + public static void addRecipe(ItemStack is, Object... parts) + { + //ShapedOreRecipe oreRecipe = new ShapedOreRecipe(is, parts); + //GameRegistry.addRecipe(oreRecipe); + } + + public int getRowCount() + { + return size / rowLength; + } + + public int getRowLength() + { + return rowLength; + } + + public boolean isTransparent() + { + return this == CRYSTAL; + } + + public List getMatList() + { + return matList; + } + + public static int validateMeta(int i) + { + if (i < values().length && values()[i].size > 0) + { + return i; + } + else + { + return 0; + } + } + + public boolean isValidForCreativeMode() + { + return validateMeta(ordinal()) == ordinal(); + } + + public boolean isExplosionResistant() + { + return this == OBSIDIAN; + } + + /*TODO @SideOnly(Side.CLIENT) + private IIcon[] icons; + + @SideOnly(Side.CLIENT) + public void makeIcons(IIconRegister par1IconRegister) + { + if (isValidForCreativeMode()) + { + icons = new IIcon[3]; + int i = 0; + for (String s : sideNames) + { + icons[i++] = par1IconRegister.registerIcon(String.format("ironchest:%s_%s",name().toLowerCase(),s)); + } + } + } + + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side) + { + + return icons[sideMapping[side]]; + }*/ + + private static String[] sideNames = { "top", "front", "side" }; + private static int[] sideMapping = { 0, 0, 2, 1, 2, 2, 2 }; + + public Slot makeSlot(IInventory chestInventory, int index, int x, int y) + { + return new ValidatingSlot(chestInventory, index, x, y, this); + } + + public boolean acceptsStack(ItemStack itemstack) + { + return itemFilter == null || itemstack == null || itemstack.getItem() == itemFilter; + } + public void adornItemDrop(ItemStack item) + { + if (this == DIRTCHEST9000) + { + item.setTagInfo("dirtchest", new NBTTagByte((byte) 1)); + } + } +} diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java new file mode 100755 index 0000000..2195f3d --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -0,0 +1,106 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemChestChanger extends Item { + + private ChestChangerType type; + + public ItemChestChanger(ChestChangerType type) + { + super(); + setMaxStackSize(1); + this.type = type; + setUnlocalizedName("ironchest:"+type.name()); + setCreativeTab(CreativeTabs.tabMisc); + } + + /*@Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int X, int Y, int Z, int side, float hitX, float hitY, float hitZ) + { + if (world.isRemote) return false; + TileEntity te = world.getTileEntity(X, Y, Z); + TileEntityIronChest newchest; + if (te != null && te instanceof TileEntityIronChest) + { + TileEntityIronChest ironchest = (TileEntityIronChest) te; + newchest = ironchest.applyUpgradeItem(this); + if (newchest == null) + { + return false; + } + } + else if (te != null && te instanceof TileEntityChest) + { + TileEntityChest tec = (TileEntityChest) te; + if (tec.numPlayersUsing > 0) + { + return false; + } + if (!getType().canUpgrade(IronChestType.WOOD)) + { + return false; + } + // Force old TE out of the world so that adjacent chests can update + newchest = IronChestType.makeEntity(getTargetChestOrdinal(IronChestType.WOOD.ordinal())); + int newSize = newchest.chestContents.length; + ItemStack[] chestContents = ObfuscationReflectionHelper.getPrivateValue(TileEntityChest.class, tec, 0); + System.arraycopy(chestContents, 0, newchest.chestContents, 0, Math.min(newSize, chestContents.length)); + BlockIronChest block = IronChest.ironChestBlock; + block.dropContent(newSize, tec, world, tec.xCoord, tec.yCoord, tec.zCoord); + newchest.setFacing((byte) tec.getBlockMetadata()); + newchest.sortTopStacks(); + for (int i = 0; i < Math.min(newSize, chestContents.length); i++) + { + chestContents[i] = null; + } + // Clear the old block out + world.setBlock(X, Y, Z, Blocks.air, 0, 3); + // Force the Chest TE to reset it's knowledge of neighbouring blocks + tec.updateContainingBlockInfo(); + // Force the Chest TE to update any neighbours so they update next + // tick + tec.checkForAdjacentChests(); + // And put in our block instead + world.setBlock(X, Y, Z, block, newchest.getType().ordinal(), 3); + } + else + { + return false; + } + world.setTileEntity(X, Y, Z, newchest); + world.setBlockMetadataWithNotify(X, Y, Z, newchest.getType().ordinal(), 3); + stack.stackSize = 0; + return true; + }*/ + + public int getTargetChestOrdinal(int sourceOrdinal) + { + return type.getTarget(); + } + + public ChestChangerType getType() + { + return type; + } +} diff --git a/src/main/java/cpw/mods/ironchest/ItemIronChest.java b/src/main/java/cpw/mods/ironchest/ItemIronChest.java new file mode 100755 index 0000000..fffef30 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/ItemIronChest.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemIronChest extends ItemBlock { + + public ItemIronChest(Block block) + { + super(block); + setHasSubtypes(true); + } + + @Override + public int getMetadata(int i) + { + return IronChestType.validateMeta(i); + } + + @Override + public String getUnlocalizedName(ItemStack itemstack) + { + return "tile.ironchest:"+IronChestType.values()[itemstack.getMetadata()].name(); + } +} diff --git a/src/main/java/cpw/mods/ironchest/MappableItemStackWrapper.java b/src/main/java/cpw/mods/ironchest/MappableItemStackWrapper.java new file mode 100755 index 0000000..95a8a40 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/MappableItemStackWrapper.java @@ -0,0 +1,33 @@ +package cpw.mods.ironchest; + +import net.minecraft.item.ItemStack; + +public class MappableItemStackWrapper { + private ItemStack wrap; + + public MappableItemStackWrapper(ItemStack toWrap) + { + wrap = toWrap; + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof MappableItemStackWrapper)) return false; + MappableItemStackWrapper isw = (MappableItemStackWrapper) obj; + if (wrap.getHasSubtypes()) + { + return isw.wrap.isItemEqual(wrap); + } + else + { + return isw.wrap == wrap; + } + } + + @Override + public int hashCode() + { + return System.identityHashCode(wrap); + } +} diff --git a/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java b/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java new file mode 100755 index 0000000..135f4f5 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java @@ -0,0 +1,27 @@ +package cpw.mods.ironchest; + +import java.util.List; + +import net.minecraft.entity.ai.EntityAIOcelotSit; +import net.minecraft.entity.ai.EntityAITasks; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +/*public class OcelotsSitOnChestsHandler { + @SubscribeEvent + public void changeSittingTaskForOcelots(LivingEvent.LivingUpdateEvent evt) + { + if (evt.entityLiving.ticksExisted < 5 && evt.entityLiving instanceof EntityOcelot) + { + EntityOcelot ocelot = (EntityOcelot) evt.entityLiving; + @SuppressWarnings("unchecked") + List tasks = ocelot.tasks.taskEntries; + + for (EntityAITasks.EntityAITaskEntry task : tasks) { + if (task.priority == 6 && (task.action instanceof EntityAIOcelotSit) && !(task.action instanceof IronChestAIOcelotSit)) { + task.action = new IronChestAIOcelotSit(ocelot, 0.4F); + } + } + } + } +}*/ diff --git a/src/main/java/cpw/mods/ironchest/PacketHandler.java b/src/main/java/cpw/mods/ironchest/PacketHandler.java new file mode 100755 index 0000000..da04a4d --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/PacketHandler.java @@ -0,0 +1,203 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; + +import java.util.EnumMap; + +import net.minecraft.item.ItemStack; +import net.minecraft.network.Packet; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.common.network.FMLEmbeddedChannel; +import net.minecraftforge.fml.common.network.FMLIndexedMessageToMessageCodec; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/** + * Handles the packet wrangling for IronChest + * @author cpw + * + */ +public enum PacketHandler { + INSTANCE; + + /** + * Our channel "pair" from {@link NetworkRegistry} + */ + private EnumMap channels; + + /** + * Make our packet handler, and add an {@link IronChestCodec} always + */ + private PacketHandler() + { + // request a channel pair for IronChest from the network registry + // Add the IronChestCodec as a member of both channel pipelines + this.channels = NetworkRegistry.INSTANCE.newChannel("IronChest", new IronChestCodec()); + if (FMLCommonHandler.instance().getSide() == Side.CLIENT) + { + addClientHandler(); + } + } + + /** + * This is only called on the client side - it adds an + * {@link IronChestMessageHandler} to the client side pipeline, since the + * only place we expect to handle messages is on the client. + */ + @SideOnly(Side.CLIENT) + private void addClientHandler() { + FMLEmbeddedChannel clientChannel = this.channels.get(Side.CLIENT); + // These two lines find the existing codec (Ironchestcodec) and insert our message handler after it + // in the pipeline + String codec = clientChannel.findChannelHandlerNameForType(IronChestCodec.class); + clientChannel.pipeline().addAfter(codec, "ClientHandler", new IronChestMessageHandler()); + } + + /** + * This class simply handles the {@link IronChestMessage} when it's received + * at the client side It can contain client only code, because it's only run + * on the client. + * + * @author cpw + * + */ + private static class IronChestMessageHandler extends SimpleChannelInboundHandler + { + @Override + protected void channelRead0(ChannelHandlerContext ctx, IronChestMessage msg) throws Exception + { + World world = IronChest.proxy.getClientWorld(); + TileEntity te = world.getTileEntity(new BlockPos(msg.x, msg.y, msg.z)); + if (te instanceof TileEntityIronChest) + { + TileEntityIronChest icte = (TileEntityIronChest) te; + icte.setFacing(msg.facing); + icte.handlePacketData(msg.type, msg.itemStacks); + } + } + } + + /** + * This is our "message". In fact, {@link FMLIndexedMessageToMessageCodec} + * can handle many messages on the same channel at once, using a + * discriminator byte. But for IronChest, we only need the one message, so + * we have just this. + * + * @author cpw + * + */ + public static class IronChestMessage + { + int x; + int y; + int z; + int type; + int facing; + ItemStack[] itemStacks; + } + + /** + * This is the codec that automatically transforms the + * {@link FMLProxyPacket} which wraps the client and server custom payload + * packets into a message we care about. + * + * @author cpw + * + */ + private class IronChestCodec extends FMLIndexedMessageToMessageCodec + { + /** + * We register our discriminator bytes here. We only have the one type, so we only + * register one. + */ + public IronChestCodec() + { + addDiscriminator(0, IronChestMessage.class); + } + @Override + public void encodeInto(ChannelHandlerContext ctx, IronChestMessage msg, ByteBuf target) throws Exception + { + target.writeInt(msg.x); + target.writeInt(msg.y); + target.writeInt(msg.z); + int typeAndFacing = ((msg.type & 0x0F) | ((msg.facing & 0x0F) << 4)) & 0xFF; + target.writeByte(typeAndFacing); + target.writeBoolean(msg.itemStacks != null); + if (msg.itemStacks != null) + { + for (ItemStack i: msg.itemStacks) + { + ByteBufUtils.writeItemStack(target, i); + } + } + } + + @Override + public void decodeInto(ChannelHandlerContext ctx, ByteBuf dat, IronChestMessage msg) + { + msg.x = dat.readInt(); + msg.y = dat.readInt(); + msg.z = dat.readInt(); + int typDat = dat.readByte(); + msg.type = (byte)(typDat & 0xf); + msg.facing = (byte)((typDat >> 4) & 0xf); + boolean hasStacks = dat.readBoolean(); + msg.itemStacks = new ItemStack[0]; + if (hasStacks) + { + msg.itemStacks = new ItemStack[8]; + for (int i = 0; i < msg.itemStacks.length; i++) + { + msg.itemStacks[i] = ByteBufUtils.readItemStack(dat); + } + } + } + + } + + /** + * This is a utility method called to transform a packet from a custom + * packet into a "system packet". We're called from + * {@link TileEntity#getDescriptionPacket()} in this case, but there are + * others. All network packet methods in minecraft have been adapted to + * handle {@link FMLProxyPacket} but general purpose objects can't be + * handled sadly. + * + * This method uses the {@link IronChestCodec} to transform a custom packet + * {@link IronChestMessage} into an {@link FMLProxyPacket} by using the + * utility method {@link FMLEmbeddedChannel#generatePacketFrom(Object)} on + * the channel to do exactly that. + * + * @param tileEntityIronChest + * @return + */ + public static Packet getPacket(TileEntityIronChest tileEntityIronChest) + { + IronChestMessage msg = new IronChestMessage(); + msg.x = tileEntityIronChest.getPos().getX(); + msg.y = tileEntityIronChest.getPos().getY(); + msg.z = tileEntityIronChest.getPos().getZ(); + msg.type = tileEntityIronChest.getType().ordinal(); + msg.facing = tileEntityIronChest.getFacing(); + msg.itemStacks = tileEntityIronChest.buildItemStackDataList(); + return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg); + } +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityCopperChest.java b/src/main/java/cpw/mods/ironchest/TileEntityCopperChest.java new file mode 100755 index 0000000..f8ececf --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/TileEntityCopperChest.java @@ -0,0 +1,19 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +public class TileEntityCopperChest extends TileEntityIronChest { + public TileEntityCopperChest() + { + super(IronChestType.COPPER); + } + +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityCrystalChest.java b/src/main/java/cpw/mods/ironchest/TileEntityCrystalChest.java new file mode 100755 index 0000000..24288ec --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/TileEntityCrystalChest.java @@ -0,0 +1,18 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +public class TileEntityCrystalChest extends TileEntityIronChest { + public TileEntityCrystalChest() + { + super(IronChestType.CRYSTAL); + } +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityDiamondChest.java b/src/main/java/cpw/mods/ironchest/TileEntityDiamondChest.java new file mode 100755 index 0000000..f1e8078 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/TileEntityDiamondChest.java @@ -0,0 +1,18 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +public class TileEntityDiamondChest extends TileEntityIronChest { + public TileEntityDiamondChest() + { + super(IronChestType.DIAMOND); + } +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityDirtChest.java b/src/main/java/cpw/mods/ironchest/TileEntityDirtChest.java new file mode 100755 index 0000000..a7608c0 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/TileEntityDirtChest.java @@ -0,0 +1,42 @@ +package cpw.mods.ironchest; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.util.StatCollector; + +public class TileEntityDirtChest extends TileEntityIronChest { + private static ItemStack dirtChest9000GuideBook = new ItemStack(Items.written_book); + static { + dirtChest9000GuideBook.setTagInfo("author", new NBTTagString("cpw")); + dirtChest9000GuideBook.setTagInfo("title", new NBTTagString(StatCollector.translateToLocal("book.ironchest:dirtchest9000.title"))); + NBTTagList pages = new NBTTagList(); + pages.appendTag(new NBTTagString(StatCollector.translateToLocal("book.ironchest:dirtchest9000.page1"))); + pages.appendTag(new NBTTagString(StatCollector.translateToLocal("book.ironchest:dirtchest9000.page2"))); + pages.appendTag(new NBTTagString(StatCollector.translateToLocal("book.ironchest:dirtchest9000.page3"))); + pages.appendTag(new NBTTagString(StatCollector.translateToLocal("book.ironchest:dirtchest9000.page4"))); + pages.appendTag(new NBTTagString(StatCollector.translateToLocal("book.ironchest:dirtchest9000.page5"))); + dirtChest9000GuideBook.setTagInfo("pages", pages); + } + public TileEntityDirtChest() { + super(IronChestType.DIRTCHEST9000); + } + + @Override + public void wasPlaced(EntityLivingBase entityliving, ItemStack itemStack) + { + if (!(itemStack.hasTagCompound() && itemStack.getTagCompound().getBoolean("dirtchest"))) { + setInventorySlotContents(0, dirtChest9000GuideBook.copy()); + } + } + + @Override + public void removeAdornments() + { + if (chestContents[0] != null && chestContents[0].isItemEqual(dirtChest9000GuideBook)) { + chestContents[0] = null; + } + } +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityGoldChest.java b/src/main/java/cpw/mods/ironchest/TileEntityGoldChest.java new file mode 100755 index 0000000..fc531e2 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/TileEntityGoldChest.java @@ -0,0 +1,19 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +public class TileEntityGoldChest extends TileEntityIronChest { + + public TileEntityGoldChest() + { + super(IronChestType.GOLD); + } +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java new file mode 100755 index 0000000..f257fdd --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -0,0 +1,549 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.Packet; +import net.minecraft.server.gui.IUpdatePlayerListBox; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IChatComponent; + +public class TileEntityIronChest extends TileEntity implements IUpdatePlayerListBox, IInventory { + private int ticksSinceSync = -1; + public float prevLidAngle; + public float lidAngle; + private int numUsingPlayers; + private IronChestType type; + public ItemStack[] chestContents; + private ItemStack[] topStacks; + private int facing; + private boolean inventoryTouched; + private boolean hadStuff; + + public TileEntityIronChest() + { + this(IronChestType.IRON); + } + + protected TileEntityIronChest(IronChestType type) + { + super(); + this.type = type; + this.chestContents = new ItemStack[getSizeInventory()]; + this.topStacks = new ItemStack[8]; + } + + public ItemStack[] getContents() + { + return chestContents; + } + + @Override + public int getSizeInventory() + { + return type.size; + } + + public int getFacing() + { + return this.facing; + } + + @Override + public String getCommandSenderName() + { + return type.name(); + } + + public IronChestType getType() + { + return type; + } + + @Override + public ItemStack getStackInSlot(int i) + { + inventoryTouched = true; + return chestContents[i]; + } + + @Override + public void markDirty() + { + super.markDirty(); + sortTopStacks(); + } + + protected void sortTopStacks() + { + if (!type.isTransparent() || (worldObj != null && worldObj.isRemote)) + { + return; + } + ItemStack[] tempCopy = new ItemStack[getSizeInventory()]; + boolean hasStuff = false; + int compressedIdx = 0; + mainLoop: for (int i = 0; i < getSizeInventory(); i++) + { + if (chestContents[i] != null) + { + for (int j = 0; j < compressedIdx; j++) + { + if (tempCopy[j].isItemEqual(chestContents[i])) + { + tempCopy[j].stackSize += chestContents[i].stackSize; + continue mainLoop; + } + } + tempCopy[compressedIdx++] = chestContents[i].copy(); + hasStuff = true; + } + } + if (!hasStuff && hadStuff) + { + hadStuff = false; + for (int i = 0; i < topStacks.length; i++) + { + topStacks[i] = null; + } + if (worldObj != null) + { + worldObj.markBlockForUpdate(pos); + } + return; + } + hadStuff = true; + Arrays.sort(tempCopy, new Comparator() { + @Override + public int compare(ItemStack o1, ItemStack o2) + { + if (o1 == null) + { + return 1; + } + else if (o2 == null) + { + return -1; + } + else + { + return o2.stackSize - o1.stackSize; + } + } + }); + int p = 0; + for (int i = 0; i < tempCopy.length; i++) + { + if (tempCopy[i] != null && tempCopy[i].stackSize > 0) + { + topStacks[p++] = tempCopy[i]; + if (p == topStacks.length) + { + break; + } + } + } + for (int i = p; i < topStacks.length; i++) + { + topStacks[i] = null; + } + if (worldObj != null) + { + worldObj.markBlockForUpdate(pos); + } + } + + @Override + public ItemStack decrStackSize(int i, int j) + { + if (chestContents[i] != null) + { + if (chestContents[i].stackSize <= j) + { + ItemStack itemstack = chestContents[i]; + chestContents[i] = null; + markDirty(); + return itemstack; + } + ItemStack itemstack1 = chestContents[i].splitStack(j); + if (chestContents[i].stackSize == 0) + { + chestContents[i] = null; + } + markDirty(); + return itemstack1; + } + else + { + return null; + } + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemstack) + { + chestContents[i] = itemstack; + if (itemstack != null && itemstack.stackSize > getInventoryStackLimit()) + { + itemstack.stackSize = getInventoryStackLimit(); + } + markDirty(); + } + + @Override + public void readFromNBT(NBTTagCompound nbttagcompound) + { + super.readFromNBT(nbttagcompound); + NBTTagList nbttaglist = nbttagcompound.getTagList("Items", 10); + chestContents = new ItemStack[getSizeInventory()]; + for (int i = 0; i < nbttaglist.tagCount(); i++) + { + NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); + int j = nbttagcompound1.getByte("Slot") & 0xff; + if (j >= 0 && j < chestContents.length) + { + chestContents[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1); + } + } + facing = nbttagcompound.getByte("facing"); + sortTopStacks(); + } + + @Override + public void writeToNBT(NBTTagCompound nbttagcompound) + { + super.writeToNBT(nbttagcompound); + NBTTagList nbttaglist = new NBTTagList(); + for (int i = 0; i < chestContents.length; i++) + { + if (chestContents[i] != null) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setByte("Slot", (byte) i); + chestContents[i].writeToNBT(nbttagcompound1); + nbttaglist.appendTag(nbttagcompound1); + } + } + + nbttagcompound.setTag("Items", nbttaglist); + nbttagcompound.setByte("facing", (byte)facing); + } + + @Override + public int getInventoryStackLimit() + { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer entityplayer) + { + if (worldObj == null) + { + return true; + } + if (worldObj.getTileEntity(pos) != this) + { + return false; + } + return entityplayer.getDistanceSq((double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D) <= 64D; + } + + @Override + public void update() + { + // Resynchronize clients with the server state + if (worldObj != null && !this.worldObj.isRemote && this.numUsingPlayers != 0 && (this.ticksSinceSync + pos.getX() + pos.getY() + pos.getZ()) % 200 == 0) + { + this.numUsingPlayers = 0; + float var1 = 5.0F; + @SuppressWarnings("unchecked") + List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB((double)((float)pos.getX() - var1), (double)((float)pos.getY() - var1), (double)((float)pos.getZ() - var1), (double)((float)(pos.getX() + 1) + var1), (double)((float)(pos.getY() + 1) + var1), (double)((float)(pos.getZ() + 1) + var1))); + + for (EntityPlayer var4 : var2) { + if (var4.openContainer instanceof ContainerIronChest) { + ++this.numUsingPlayers; + } + } + } + + if (worldObj != null && !worldObj.isRemote && ticksSinceSync < 0) + { + worldObj.addBlockEvent(pos, IronChest.ironChestBlock, 3, ((numUsingPlayers << 3) & 0xF8) | (facing & 0x7)); + } + if (!worldObj.isRemote && inventoryTouched) + { + inventoryTouched = false; + sortTopStacks(); + } + + this.ticksSinceSync++; + prevLidAngle = lidAngle; + float f = 0.1F; + if (numUsingPlayers > 0 && lidAngle == 0.0F) + { + double d = (double) pos.getX() + 0.5D; + double d1 = (double) pos.getZ() + 0.5D; + worldObj.playSoundEffect(d, (double) pos.getY() + 0.5D, d1, "random.chestopen", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + if (numUsingPlayers == 0 && lidAngle > 0.0F || numUsingPlayers > 0 && lidAngle < 1.0F) + { + float f1 = lidAngle; + if (numUsingPlayers > 0) + { + lidAngle += f; + } + else + { + lidAngle -= f; + } + if (lidAngle > 1.0F) + { + lidAngle = 1.0F; + } + float f2 = 0.5F; + if (lidAngle < f2 && f1 >= f2) + { + double d2 = (double) pos.getX() + 0.5D; + double d3 = (double) pos.getZ() + 0.5D; + worldObj.playSoundEffect(d2, (double) pos.getY() + 0.5D, d3, "random.chestclosed", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + if (lidAngle < 0.0F) + { + lidAngle = 0.0F; + } + } + } + + @Override + public boolean receiveClientEvent(int i, int j) + { + if (i == 1) + { + numUsingPlayers = j; + } + else if (i == 2) + { + facing = (byte) j; + } + else if (i == 3) + { + facing = (byte) (j & 0x7); + numUsingPlayers = (j & 0xF8) >> 3; + } + return true; + } + + @Override + public void openInventory(EntityPlayer player) + { + if (worldObj == null) return; + numUsingPlayers++; + worldObj.addBlockEvent(pos, IronChest.ironChestBlock, 1, numUsingPlayers); + } + + @Override + public void closeInventory(EntityPlayer player) + { + if (worldObj == null) return; + numUsingPlayers--; + worldObj.addBlockEvent(pos, IronChest.ironChestBlock, 1, numUsingPlayers); + } + + public void setFacing(int facing2) + { + this.facing = facing2; + } + + public TileEntityIronChest applyUpgradeItem(ItemChestChanger itemChestChanger) + { + if (numUsingPlayers > 0) + { + return null; + } + if (!itemChestChanger.getType().canUpgrade(this.getType())) + { + return null; + } + TileEntityIronChest newEntity = IronChestType.makeEntity(itemChestChanger.getTargetChestOrdinal(getType().ordinal())); + int newSize = newEntity.chestContents.length; + System.arraycopy(chestContents, 0, newEntity.chestContents, 0, Math.min(newSize, chestContents.length)); + BlockIronChest block = IronChest.ironChestBlock; + block.dropContent(newSize, this, this.worldObj, pos); + newEntity.setFacing(facing); + newEntity.sortTopStacks(); + newEntity.ticksSinceSync = -1; + return newEntity; + } + + public ItemStack[] getTopItemStacks() + { + return topStacks; + } + + public TileEntityIronChest updateFromMetadata(int l) + { + if (worldObj != null && worldObj.isRemote) + { + if (l != type.ordinal()) + { + worldObj.setTileEntity(pos, IronChestType.makeEntity(l)); + return (TileEntityIronChest) worldObj.getTileEntity(pos); + } + } + return this; + } + + @Override + public Packet getDescriptionPacket() + { + return PacketHandler.getPacket(this); + } + + public void handlePacketData(int typeData, ItemStack[] intData) + { + TileEntityIronChest chest = this; + if (this.type.ordinal() != typeData) + { + chest = updateFromMetadata(typeData); + } + if (IronChestType.values()[typeData].isTransparent() && intData != null) + { + int pos = 0; + for (int i = 0; i < chest.topStacks.length; i++) + { + if (intData[pos] != null) + { + chest.topStacks[i] = intData[pos]; + } + else + { + chest.topStacks[i] = null; + } + pos ++; + } + } + } + + public ItemStack[] buildItemStackDataList() + { + if (type.isTransparent()) + { + ItemStack[] sortList = new ItemStack[topStacks.length]; + int pos = 0; + for (ItemStack is : topStacks) + { + if (is != null) + { + sortList[pos++] = is; + } + else + { + sortList[pos++] = null; + } + } + return sortList; + } + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.chestContents[par1] != null) + { + ItemStack var2 = this.chestContents[par1]; + this.chestContents[par1] = null; + return var2; + } + else + { + return null; + } + } + + public void setMaxStackSize(int size) + { + + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemstack) + { + return type.acceptsStack(itemstack); + } + + @Override + public boolean isCustomInventoryName() + { + return false; + } + + /*void rotateAround(ForgeDirection axis) + { + setFacing((byte)ForgeDirection.getOrientation(facing).getRotation(axis).ordinal()); + worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, IronChest.ironChestBlock, 2, getFacing()); + }*/ + + public void wasPlaced(EntityLivingBase entityliving, ItemStack itemStack) + { + } + + public void removeAdornments() + { + + } + + @Override + public IChatComponent getFormattedCommandSenderName() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public int func_174887_a_(int p_174887_1_) + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void func_174885_b(int p_174885_1_, int p_174885_2_) + { + // TODO Auto-generated method stub + + } + + @Override + public int func_174890_g() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void func_174888_l() + { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityObsidianChest.java b/src/main/java/cpw/mods/ironchest/TileEntityObsidianChest.java new file mode 100755 index 0000000..5f03eb9 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/TileEntityObsidianChest.java @@ -0,0 +1,9 @@ +package cpw.mods.ironchest; + +public class TileEntityObsidianChest extends TileEntityIronChest { + + public TileEntityObsidianChest() + { + super(IronChestType.OBSIDIAN); + } +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntitySilverChest.java b/src/main/java/cpw/mods/ironchest/TileEntitySilverChest.java new file mode 100755 index 0000000..439d266 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/TileEntitySilverChest.java @@ -0,0 +1,18 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +public class TileEntitySilverChest extends TileEntityIronChest { + public TileEntitySilverChest() + { + super(IronChestType.SILVER); + } +} diff --git a/src/main/java/cpw/mods/ironchest/ValidatingSlot.java b/src/main/java/cpw/mods/ironchest/ValidatingSlot.java new file mode 100755 index 0000000..f0348c9 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/ValidatingSlot.java @@ -0,0 +1,21 @@ +package cpw.mods.ironchest; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ValidatingSlot extends Slot { + private IronChestType type; + + public ValidatingSlot(IInventory par1iInventory, int par2, int par3, int par4, IronChestType type) + { + super(par1iInventory, par2, par3, par4); + this.type = type; + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) + { + return type.acceptsStack(par1ItemStack); + } +} diff --git a/src/main/java/cpw/mods/ironchest/Version.java b/src/main/java/cpw/mods/ironchest/Version.java new file mode 100755 index 0000000..f155473 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/Version.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. All rights reserved. This program and the accompanying materials are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at http://www.gnu.org/licenses/gpl.html + * + * Contributors: cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import java.util.Properties; + +public class Version +{ + private static String major; + private static String minor; + private static String rev; + private static String build; + @SuppressWarnings("unused") + private static String mcversion; + + static void init(Properties properties) + { + if (properties != null) + { + major = properties.getProperty("IronChest.build.major.number"); + minor = properties.getProperty("IronChest.build.minor.number"); + rev = properties.getProperty("IronChest.build.revision.number"); + build = properties.getProperty("IronChest.build.number"); + mcversion = properties.getProperty("IronChest.build.mcversion"); + } + } + + public static String fullVersionString() + { + return String.format("%s.%s.%s build %s", major, minor, rev, build); + } +} diff --git a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java new file mode 100755 index 0000000..c6af7a6 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest.client; + +import net.minecraft.client.renderer.tileentity.TileEntityRendererChestHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import cpw.mods.ironchest.CommonProxy; +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.TileEntityIronChest; + +public class ClientProxy extends CommonProxy { + @Override + public void registerRenderInformation() + { + //TileEntityRendererChestHelper.instance = new IronChestRenderHelper(); + } + + @Override + public void registerTileEntitySpecialRenderer(IronChestType typ) + { + //ClientRegistry.bindTileEntitySpecialRenderer(typ.clazz, new TileEntityIronChestRenderer()); + } + + @Override + public World getClientWorld() + { + return FMLClientHandler.instance().getClient().theWorld; + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) + { + TileEntity te = world.getTileEntity(new BlockPos(x, y, z)); + if (te != null && te instanceof TileEntityIronChest) + { + return GUIChest.GUI.buildGUI(IronChestType.values()[ID], player.inventory, (TileEntityIronChest) te); + } + else + { + return null; + } + } +} diff --git a/src/main/java/cpw/mods/ironchest/client/GUIChest.java b/src/main/java/cpw/mods/ironchest/client/GUIChest.java new file mode 100755 index 0000000..345791b --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/client/GUIChest.java @@ -0,0 +1,98 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest.client; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.ironchest.ContainerIronChest; +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.TileEntityIronChest; + +public class GUIChest extends GuiContainer { + public enum ResourceList { + IRON(new ResourceLocation("ironchest", "textures/gui/ironcontainer.png")), + COPPER(new ResourceLocation("ironchest", "textures/gui/coppercontainer.png")), + SILVER(new ResourceLocation("ironchest", "textures/gui/silvercontainer.png")), + GOLD(new ResourceLocation("ironchest", "textures/gui/goldcontainer.png")), + DIAMOND(new ResourceLocation("ironchest", "textures/gui/diamondcontainer.png")), + DIRT(new ResourceLocation("ironchest", "textures/gui/dirtcontainer.png")); + public final ResourceLocation location; + private ResourceList(ResourceLocation loc) { + this.location = loc; + } + } + public enum GUI { + IRON(184, 202, ResourceList.IRON, IronChestType.IRON), + GOLD(184, 256, ResourceList.GOLD, IronChestType.GOLD), + DIAMOND(238, 256, ResourceList.DIAMOND, IronChestType.DIAMOND), + COPPER(184, 184, ResourceList.COPPER, IronChestType.COPPER), + SILVER(184, 238, ResourceList.SILVER, IronChestType.SILVER), + CRYSTAL(238, 256, ResourceList.DIAMOND, IronChestType.CRYSTAL), + OBSIDIAN(238, 256, ResourceList.DIAMOND, IronChestType.OBSIDIAN), + DIRTCHEST9000(184, 184, ResourceList.DIRT, IronChestType.DIRTCHEST9000); + + private int xSize; + private int ySize; + private ResourceList guiResourceList; + private IronChestType mainType; + + private GUI(int xSize, int ySize, ResourceList guiResourceList, IronChestType mainType) + { + this.xSize = xSize; + this.ySize = ySize; + this.guiResourceList = guiResourceList; + this.mainType = mainType; + + } + + protected Container makeContainer(IInventory player, IInventory chest) + { + return new ContainerIronChest(player, chest, mainType, xSize, ySize); + } + + public static GUIChest buildGUI(IronChestType type, IInventory playerInventory, TileEntityIronChest chestInventory) + { + return new GUIChest(values()[chestInventory.getType().ordinal()], playerInventory, chestInventory); + } + } + + public int getRowLength() + { + return type.mainType.getRowLength(); + } + + private GUI type; + + private GUIChest(GUI type, IInventory player, IInventory chest) + { + super(type.makeContainer(player, chest)); + this.type = type; + this.xSize = type.xSize; + this.ySize = type.ySize; + this.allowUserInput = false; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float f, int i, int j) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + // new "bind tex" + this.mc.getTextureManager().bindTexture(type.guiResourceList.location); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java new file mode 100755 index 0000000..dd27f42 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest.client; + +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.tileentity.TileEntityRendererChestHelper; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; + +import com.google.common.collect.Maps; + +import cpw.mods.ironchest.IronChest; +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.TileEntityIronChest; + +/*public class IronChestRenderHelper extends TileEntityRendererChestHelper { + private Map itemRenders = Maps.newHashMap(); + + public IronChestRenderHelper() + { + for (IronChestType typ : IronChestType.values()) + { + itemRenders.put(typ.ordinal(), (TileEntityIronChest) IronChest.ironChestBlock.createTileEntity(null, typ.ordinal())); + } + } + + @Override + public void renderChest(Block block, int i, float f) + { + if (block == IronChest.ironChestBlock) + { + TileEntityRendererDispatcher.instance.renderTileEntityAt(itemRenders.get(i), 0.0D, 0.0D, 0.0D, 0.0F); + } + else + { + super.renderChest(block, i, f); + } + } +}*/ diff --git a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java new file mode 100755 index 0000000..4f36891 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -0,0 +1,184 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest.client; + +import static org.lwjgl.opengl.GL11.glColor4f; +import static org.lwjgl.opengl.GL11.glDisable; +import static org.lwjgl.opengl.GL11.glEnable; +import static org.lwjgl.opengl.GL11.glPopMatrix; +import static org.lwjgl.opengl.GL11.glPushMatrix; +import static org.lwjgl.opengl.GL11.glRotatef; +import static org.lwjgl.opengl.GL11.glScalef; +import static org.lwjgl.opengl.GL11.glTranslatef; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +import net.minecraft.client.model.ModelChest; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; +import com.google.common.primitives.SignedBytes; + +import cpw.mods.ironchest.IronChestType; +import cpw.mods.ironchest.MappableItemStackWrapper; +import cpw.mods.ironchest.TileEntityIronChest; + +/*public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { + @SuppressWarnings("unused") + private static Map renderList = new HashMap(); + + private static Map locations; + static { + Builder builder = ImmutableMap.builder(); + for (IronChestType typ : IronChestType.values()) { + builder.put(typ, new ResourceLocation("ironchest","textures/model/"+typ.getModelTexture())); + } + locations = builder.build(); + } + private Random random; + + @SuppressWarnings("unused") + private RenderBlocks renderBlocks; + + private RenderItem itemRenderer; + + private static float[][] shifts = { { 0.3F, 0.45F, 0.3F }, { 0.7F, 0.45F, 0.3F }, { 0.3F, 0.45F, 0.7F }, { 0.7F, 0.45F, 0.7F }, { 0.3F, 0.1F, 0.3F }, + { 0.7F, 0.1F, 0.3F }, { 0.3F, 0.1F, 0.7F }, { 0.7F, 0.1F, 0.7F }, { 0.5F, 0.32F, 0.5F }, }; + + public TileEntityIronChestRenderer() + { + model = new ModelChest(); + random = new Random(); + renderBlocks = new RenderBlocks(); + itemRenderer = new RenderItem() { + @Override + public byte getMiniBlockCount(ItemStack stack, byte original) { + return SignedBytes.saturatedCast(Math.min(stack.stackSize / 32, 15) + 1); + } + @Override + public byte getMiniItemCount(ItemStack stack, byte original) { + return SignedBytes.saturatedCast(Math.min(stack.stackSize / 32, 7) + 1); + } + @Override + public boolean shouldBob() { + return false; + } + @Override + public boolean shouldSpreadItems() { + return false; + } + }; + itemRenderer.setRenderManager(RenderManager.instance); + } + + /*public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick) { + if (tile == null) { + return; + } + int facing = 3; + IronChestType type = tile.getType(); + if (tile != null && tile.hasWorldObj()) { + facing = tile.getFacing(); + type = tile.getType(); + int typ = tile.getWorldObj().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord); + type = IronChestType.values()[typ]; + } + bindTexture(locations.get(type)); + glPushMatrix(); + glEnable(32826 /* GL_RESCALE_NORMAL_EXT *//*); + /*glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); + glScalef(1.0F, -1F, -1F); + glTranslatef(0.5F, 0.5F, 0.5F); + int k = 0; + if (facing == 2) { + k = 180; + } + if (facing == 3) { + k = 0; + } + if (facing == 4) { + k = 90; + } + if (facing == 5) { + k = -90; + } + glRotatef(k, 0.0F, 1.0F, 0.0F); + glTranslatef(-0.5F, -0.5F, -0.5F); + float lidangle = tile.prevLidAngle + (tile.lidAngle - tile.prevLidAngle) * partialTick; + lidangle = 1.0F - lidangle; + lidangle = 1.0F - lidangle * lidangle * lidangle; + model.chestLid.rotateAngleX = -((lidangle * 3.141593F) / 2.0F); + // Render the chest itself + model.renderAll(); + glDisable(32826 /* GL_RESCALE_NORMAL_EXT *//*); + /*glPopMatrix(); + glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + if (type.isTransparent() && tile.getDistanceFrom(this.field_147501_a.field_147560_j, this.field_147501_a.field_147561_k, this.field_147501_a.field_147558_l) < 128d) { + random.setSeed(254L); + float shiftX; + float shiftY; + float shiftZ; + int shift = 0; + float blockScale = 0.70F; + float timeD = (float) (360.0 * (double) (System.currentTimeMillis() & 0x3FFFL) / (double) 0x3FFFL); + if (tile.getTopItemStacks()[1] == null) { + shift = 8; + blockScale = 0.85F; + } + glPushMatrix(); + glDisable(2896 /* GL_LIGHTING *//*); + /*glTranslatef((float) x, (float) y, (float) z); + EntityItem customitem = new EntityItem(field_147501_a.field_147550_f); + customitem.hoverStart = 0f; + for (ItemStack item : tile.getTopItemStacks()) { + if (shift > shifts.length) { + break; + } + if (item == null) { + shift++; + continue; + } + shiftX = shifts[shift][0]; + shiftY = shifts[shift][1]; + shiftZ = shifts[shift][2]; + shift++; + glPushMatrix(); + glTranslatef(shiftX, shiftY, shiftZ); + glRotatef(timeD, 0.0F, 1.0F, 0.0F); + glScalef(blockScale, blockScale, blockScale); + customitem.setEntityItemStack(item); + itemRenderer.doRender(customitem, 0, 0, 0, 0, 0); + glPopMatrix(); + } + glEnable(2896 /* GL_LIGHTING *//*); + /*glPopMatrix(); + glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + } + + /*@Override + public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float partialTick) + { + render((TileEntityIronChest) tileentity, x, y, z, partialTick); + } + + private ModelChest model; +}*/ diff --git a/src/main/resources/assets/ironchest/lang/cs_CZ.lang b/src/main/resources/assets/ironchest/lang/cs_CZ.lang new file mode 100755 index 0000000..a202085 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/cs_CZ.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Železná truhla +tile.ironchest:GOLD.name=Zlatá truhla +tile.ironchest:DIAMOND.name=Diamantová truhla +tile.ironchest:COPPER.name=Měděná truhla +tile.ironchest:SILVER.name=Stříbrná truhla +tile.ironchest:CRYSTAL.name=Krystalová truhla +tile.ironchest:OBSIDIAN.name=Obsidiánová truhla + +item.ironchest:IRONGOLD.name=Vylepšení železné truhly na zlatou +item.ironchest:GOLDDIAMOND.name=Vylepšení zlaté truhly na diamantovou +item.ironchest:COPPERSILVER.name=Vylepšení měděné truhly na stříbrnou +item.ironchest:SILVERGOLD.name=Vylepšení stříbrné truhly na zlatou +item.ironchest:COPPERIRON.name=Vylepšení měděné truhly na železnou +item.ironchest:DIAMONDCRYSTAL.name=Vylepšení diamantové truhly na krystalovou +item.ironchest:WOODIRON.name=Vylepšení dřevěné truhly na železnou +item.ironchest:WOODCOPPER.name=Vylepšení dřevěné truhly na měděnou +item.ironchest:DIAMONDOBSIDIAN.name=Vylepšení diamantové truhly na obsidiánovou diff --git a/src/main/resources/assets/ironchest/lang/da_DK.lang b/src/main/resources/assets/ironchest/lang/da_DK.lang new file mode 100755 index 0000000..7e40e34 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/da_DK.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Jern Kiste +tile.ironchest:GOLD.name=Guld Kiste +tile.ironchest:DIAMOND.name=Diamant Kiste +tile.ironchest:COPPER.name=Kobber Kiste +tile.ironchest:SILVER.name=Sølv Kiste +tile.ironchest:CRYSTAL.name=Krystal Kiste +tile.ironchest:OBSIDIAN.name=Obsidian Kiste + +item.ironchest:IRONGOLD.name=Jern til Guld Kiste Opgradering +item.ironchest:GOLDDIAMOND.name=Guld til Diamant Kiste Opgradering +item.ironchest:COPPERSILVER.name=Kobber til Sølv Kiste Opgradering +item.ironchest:SILVERGOLD.name=Sølv til Guld Kiste Opgradering +item.ironchest:COPPERIRON.name=Kobber til Jern Kiste Opgradering +item.ironchest:DIAMONDCRYSTAL.name=Diamant til Krystal Kiste Opgradering +item.ironchest:WOODIRON.name=Træ til Jern Kiste Opgradering +item.ironchest:WOODCOPPER.name=Træ til Kobber Kiste Opgradering +item.ironchest:DIAMONDOBSIDIAN.name=Diamant til Obsidian Kiste Opgradering diff --git a/src/main/resources/assets/ironchest/lang/de_DE.lang b/src/main/resources/assets/ironchest/lang/de_DE.lang new file mode 100755 index 0000000..fd6c403 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/de_DE.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Eisentruhe +tile.ironchest:GOLD.name=Goldtruhe +tile.ironchest:DIAMOND.name=Diamanttruhe +tile.ironchest:COPPER.name=Kupfertruhe +tile.ironchest:SILVER.name=Silbertruhe +tile.ironchest:CRYSTAL.name=Kristalltruhe +tile.ironchest:OBSIDIAN.name=Obsidiantruhe +tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! + +item.ironchest:IRONGOLD.name=Eisen-zu-Goldtruhen-Upgrade +item.ironchest:GOLDDIAMOND.name=Gold-zu-Diamanttruhen-Upgrade +item.ironchest:COPPERSILVER.name=Kupfer-zu-Silbertruhen-Upgrade +item.ironchest:SILVERGOLD.name=Silber-zu-Goldtruhen-Upgrade +item.ironchest:COPPERIRON.name=Kupfer-zu-Eisentruhen-Upgrade +item.ironchest:DIAMONDCRYSTAL.name=Diamant-zu-Kristalltruhen-Upgrade +item.ironchest:WOODIRON.name=Holz-zu-Eisentruhen-Upgrade +item.ironchest:WOODCOPPER.name=Holz-zu-Kupfertruhen-Upgrade +item.ironchest:DIAMONDOBSIDIAN.name=Diamant-zu-Obsidiantruhen-Upgrade + +book.ironchest:dirtchest9000.title=Wie du deine neue DirtChest 9000 nutzt! +book.ironchest:dirtchest9000.page1=Willkommen zu Ihrer neuen DirtChest 9000! Wir hoffen, dass Sie viele freudige Jahre genießen werden, wenn Sie Ihre Erd-Stacks in unserem nützlichen Speichergerät lagern. +book.ironchest:dirtchest9000.page2=Nutzung: Werfen Sie einfach den Erd-Stack Ihrer Wahl in den äußerst rezeptiven Slot und genießen Sie die Annehmlichkeit, diese Erde für Sie verfügbar zu haben, jedes mal, wenn Sie diese Truhe passieren! +book.ironchest:dirtchest9000.page3=Wir hoffen, Sie haben das Durchgehen dieser Bedienungsanleitung genossen, und hoffen, dass sie sich weiterhin entscheiden werden, in Zukunft unsere Produkte zu nutzen! Mit freundlichen Grüßen, Die DirtChest 9000 manual writers incorporated. +book.ironchest:dirtchest9000.page4=Garantie: Dieses Produkt hat keine Garantie jeglicher Sorte. Ihre Erde könnte nicht gespeichert werden, er könnte langsam in die Umwelt gesaugt werden, oder stattdessen könnte das Produkt gar nichts machen. +book.ironchest:dirtchest9000.page5=DirtChest 9000 ist freundlich zur Umwelt. Bitte entsorgen Sie diesen Guide verantwortungsbewusst, und tun sie nicht, was Sie immer tun und schmeißen ihn in irgendwelche Lava. Wir würden sehr traurig sein. diff --git a/src/main/resources/assets/ironchest/lang/el_GR.lang b/src/main/resources/assets/ironchest/lang/el_GR.lang new file mode 100755 index 0000000..67285bb --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/el_GR.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Σιδερένιο Σεντούκι +tile.ironchest:GOLD.name=Χρυσό Σεντούκι +tile.ironchest:DIAMOND.name=Διαμαντένιο Σεντούκι +tile.ironchest:COPPER.name=Χάλκινο Σεντούκι +tile.ironchest:SILVER.name=Ασημένιο Σεντούκι +tile.ironchest:CRYSTAL.name=Κρυστάλλινο Σεντούκι +tile.ironchest:OBSIDIAN.name=Σεντούκι Οψιδιανού + +item.ironchest:IRONGOLD.name=Αναβάθμιση από Σιδερένιο σε Χρυσό Σεντούκι +item.ironchest:GOLDDIAMOND.name=Αναβάθμιση από Χρυσό σε Διαμαντένιο Σεντούκι +item.ironchest:COPPERSILVER.name=Αναβάθμιση από Χάλκινο σε Ασημένιο Σεντούκι +item.ironchest:SILVERGOLD.name=Αναβάθμιση από Ασημένιο σε Χρυσό Σεντούκι +item.ironchest:COPPERIRON.name=Αναβάθμιση από Χάλκινο σε Σιδερένιο Σεντούκι +item.ironchest:DIAMONDCRYSTAL.name=Αναβάθμιση από Διαμαντένιο σε Κρυστάλλινο Σεντούκι +item.ironchest:WOODIRON.name=Αναβάθμιση από Ξύλινο σε Σιδερένιο Σεντούκι +item.ironchest:WOODCOPPER.name=Αναβάθμιση από Ξύλινο σε Χάλκινο Σεντούκι +item.ironchest:DIAMONDOBSIDIAN.name=Αναβάθμιση από Διαμαντένιο σε Σεντούκι Οψιδιανού diff --git a/src/main/resources/assets/ironchest/lang/en_PT.lang b/src/main/resources/assets/ironchest/lang/en_PT.lang new file mode 100755 index 0000000..ea69e27 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/en_PT.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Steel Coffer +tile.ironchest:GOLD.name=Gold Coffer +tile.ironchest:DIAMOND.name=Diamond Coffer +tile.ironchest:COPPER.name=Copper Coffer +tile.ironchest:SILVER.name=Silver Coffer +tile.ironchest:CRYSTAL.name=Shinin' Coffer +tile.ironchest:OBSIDIAN.name=Coffer o' tears +tile.ironchest:DIRTCHEST9000.name=FilthCoffer 9000! + +item.ironchest:IRONGOLD.name=Steel to Gold Coffer Upgradin' +item.ironchest:GOLDDIAMOND.name=Gold to Diamond Coffer Upgradin' +item.ironchest:COPPERSILVER.name=Copper to Silver Coffer Upgradin' +item.ironchest:SILVERGOLD.name=Silver to Gold Coffer Upgradin' +item.ironchest:COPPERIRON.name=Copper to Steel Coffer Upgradin' +item.ironchest:DIAMONDCRYSTAL.name=Diamond to Shinin' Coffer Upgradin' +item.ironchest:WOODIRON.name=Timber to Steel Coffer Upgradin' +item.ironchest:WOODCOPPER.name=Wood to Copper Coffer Upgradin' +item.ironchest:DIAMONDOBSIDIAN.name=Diamond to Coffer o' Tears Upgradin' + +book.ironchest:dirtchest9000.title=How to use yer FilthCoffer 9000! +book.ironchest:dirtchest9000.page1=Welcome to yer new FilthCoffer 9000! We hope ye will enjoy many happy years of storing yer filth wit yer coffer . +book.ironchest:dirtchest9000.page2=Usage: simply put yer filth in yer slot and yer got yerself some filth any time ye need it! +book.ironchest:dirtchest9000.page3=We hope you have enjoyed reviewing this instruction manual, and hope you will consider using our products in future! Kind regards, The DirtChest 9000 manual writers incorporated. +book.ironchest:dirtchest9000.page4=Warranty: We can't keep yer filth from pirates. Yer filth may not be stored, it may slowly return to yer world, or it may stay in yer coffer. +book.ironchest:dirtchest9000.page5=FilthCoffer 9000 is kind to yer voyage. Throw yer paper in a coffer near by wit yer booty, and don't just chuck it into some molten rock. We wouldn't be the happiest o' pirates. diff --git a/src/main/resources/assets/ironchest/lang/en_US.lang b/src/main/resources/assets/ironchest/lang/en_US.lang new file mode 100755 index 0000000..c848ed8 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/en_US.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Iron Chest +tile.ironchest:GOLD.name=Gold Chest +tile.ironchest:DIAMOND.name=Diamond Chest +tile.ironchest:COPPER.name=Copper Chest +tile.ironchest:SILVER.name=Silver Chest +tile.ironchest:CRYSTAL.name=Crystal Chest +tile.ironchest:OBSIDIAN.name=Obsidian Chest +tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! + +item.ironchest:IRONGOLD.name=Iron to Gold Chest Upgrade +item.ironchest:GOLDDIAMOND.name=Gold to Diamond Chest Upgrade +item.ironchest:COPPERSILVER.name=Copper to Silver Chest Upgrade +item.ironchest:SILVERGOLD.name=Silver to Gold Chest Upgrade +item.ironchest:COPPERIRON.name=Copper to Iron Chest Upgrade +item.ironchest:DIAMONDCRYSTAL.name=Diamond to Crystal Chest Upgrade +item.ironchest:WOODIRON.name=Wood to Iron Chest Upgrade +item.ironchest:WOODCOPPER.name=Wood to Copper Chest Upgrade +item.ironchest:DIAMONDOBSIDIAN.name=Diamond to Obsidian Chest Upgrade + +book.ironchest:dirtchest9000.title=How to use your DirtChest 9000! +book.ironchest:dirtchest9000.page1=Welcome to your new DirtChest 9000! We hope you will enjoy many happy years of storing your stack of dirt in our storage utility. +book.ironchest:dirtchest9000.page2=Usage: simply insert the stack of dirt of your choice into the highly receptive slot and enjoy the great convenience of having that dirt available to you, any time you pass by this chest! +book.ironchest:dirtchest9000.page3=We hope you have enjoyed reviewing this instruction manual, and hope you will consider using our products in future! Kind regards, The DirtChest 9000 manual writers incorporated. +book.ironchest:dirtchest9000.page4=Warranty: This product has no warranty of any kind. Your dirt may not be stored, it may slowly leech into the environment, or alternatively, it may not do anything at all. +book.ironchest:dirtchest9000.page5=DirtChest 9000 is kind to the environment. Please dispose of this guide book responsibly, and do not whatever you do just chuck it into some lava. We would be very sad. diff --git a/src/main/resources/assets/ironchest/lang/es_ES.lang b/src/main/resources/assets/ironchest/lang/es_ES.lang new file mode 100755 index 0000000..b770efc --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/es_ES.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Cofre de Hierro +tile.ironchest:GOLD.name=Cofre de Oro +tile.ironchest:DIAMOND.name=Cofre de Diamante +tile.ironchest:COPPER.name=Cofre de Cobre +tile.ironchest:SILVER.name=Cofre de Plata +tile.ironchest:CRYSTAL.name=Cofre de Cristal +tile.ironchest:OBSIDIAN.name=Cofre de Obsidiana + +item.ironchest:IRONGOLD.name=Mejora de Cofre de Hierro a Oro +item.ironchest:GOLDDIAMOND.name=Mejora de Cofre de Oro a Diamante +item.ironchest:COPPERSILVER.name=Mejora de Cofre de Cobre a Plata +item.ironchest:SILVERGOLD.name=Mejora de Cofre de Plata a Oro +item.ironchest:COPPERIRON.name=Mejora de Cofre de Cobre a Hierro +item.ironchest:DIAMONDCRYSTAL.name=Mejora de Cofre de Diamante a Cristal +item.ironchest:WOODIRON.name=Mejora de Cofre de Madera a Hierro +item.ironchest:WOODCOPPER.name=Mejora de Cofre de Madera a Cobre +item.ironchest:DIAMONDOBSIDIAN.name=Mejora de Cofre de Diamante a Obsidiana diff --git a/src/main/resources/assets/ironchest/lang/et_EE.lang b/src/main/resources/assets/ironchest/lang/et_EE.lang new file mode 100755 index 0000000..c0b3776 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/et_EE.lang @@ -0,0 +1,18 @@ +tile.ironchest:IRON.name=Raudkirst +tile.ironchest:GOLD.name=Kuldkirst +tile.ironchest:DIAMOND.name=Teemantkirst +tile.ironchest:COPPER.name=Vaskkirst +tile.ironchest:SILVER.name=Hõbekirst +tile.ironchest:CRYSTAL.name=Kristallkirst +tile.ironchest:OBSIDIAN.name=Obsidiaankirst +tile.ironchest:DIRTCHEST9000.name=Muldkirst 9000! + +item.ironchest:IRONGOLD.name=Raudkirst kuld kirstuks +item.ironchest:GOLDDIAMOND.name=Kuldkirst teemandist kirstuks +item.ironchest:COPPERSILVER.name=Vaskkirst hõbedast kirstuks +item.ironchest:SILVERGOLD.name=Hõbekirst kullast kirstuks +item.ironchest:COPPERIRON.name=Vaskkirst rauast kirstuks +item.ironchest:DIAMONDCRYSTAL.name=Teemantkirst kristallist kirstuks +item.ironchest:WOODIRON.name=Puukirst rauast kirstuks +item.ironchest:WOODCOPPER.name=Puukirst vasest kirstuks +item.ironchest:DIAMONDOBSIDIAN.name=Teemantkirst obsidiaanist kirstuks diff --git a/src/main/resources/assets/ironchest/lang/fr_FR.lang b/src/main/resources/assets/ironchest/lang/fr_FR.lang new file mode 100755 index 0000000..36d7f9d --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/fr_FR.lang @@ -0,0 +1,19 @@ +#fr_FR translated by robin4002 + +tile.ironchest:IRON.name=Coffre en fer +tile.ironchest:GOLD.name=Coffre en or +tile.ironchest:DIAMOND.name=Coffre en diamant +tile.ironchest:COPPER.name=Coffre en cuivre +tile.ironchest:SILVER.name=Coffre en argent +tile.ironchest:CRYSTAL.name=Coffre en cristal +tile.ironchest:OBSIDIAN.name=Coffre en obsidian + +item.ironchest:IRONGOLD.name=Amélioration de coffre en fer à or +item.ironchest:GOLDDIAMOND.name=Amélioration de coffre en or à diamant +item.ironchest:COPPERSILVER.name=Amélioration de coffre en cuivre à argent +item.ironchest:SILVERGOLD.name=Amélioration de coffre en argent à or +item.ironchest:COPPERIRON.name=Amélioration de coffre en cuivre à fer +item.ironchest:DIAMONDCRYSTAL.name=Amélioration de coffre en diamant à crital +item.ironchest:WOODIRON.name=Amélioration de coffre en bois à fer +item.ironchest:WOODCOPPER.name=Amélioration de coffre en bois à cuivre +item.ironchest:DIAMONDOBSIDIAN.name=Amélioration de coffre en diamant à obsidian diff --git a/src/main/resources/assets/ironchest/lang/it_IT.lang b/src/main/resources/assets/ironchest/lang/it_IT.lang new file mode 100755 index 0000000..fc3d82c --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/it_IT.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Baule di ferro +tile.ironchest:GOLD.name=Baule d'oro +tile.ironchest:DIAMOND.name=Baule di diamante +tile.ironchest:COPPER.name=Baule di rame +tile.ironchest:SILVER.name=Baule d'argento +tile.ironchest:CRYSTAL.name=Baule di cristallo +tile.ironchest:OBSIDIAN.name=Baule di ossidiana +tile.ironchest:DIRTCHEST9000.name=DirtChest 9000! + +item.ironchest:IRONGOLD.name=Potenziamento da ferro a oro +item.ironchest:GOLDDIAMOND.name=Potenziamento da oro a diamante +item.ironchest:COPPERSILVER.name=Potenziamento da rame a argento +item.ironchest:SILVERGOLD.name=Potenziamento da argento a oro +item.ironchest:COPPERIRON.name=Potenziamento da rame a ferro +item.ironchest:DIAMONDCRYSTAL.name=Potenziamento da diamante a cristallo +item.ironchest:WOODIRON.name=Potenziamento da legno a ferro +item.ironchest:WOODCOPPER.name=Potenziamento da legno a rame +item.ironchest:DIAMONDOBSIDIAN.name=Potenziamento da diamante a ossidiana + +book.ironchest:dirtchest9000.title=Come usare la tua DirtChest 9000! +book.ironchest:dirtchest9000.page1=Benvenuto alla tua nuova DirtChest 9000! Speriamo che possiate godere di molti anni felici in cui imagazzinate grandi quantità di terra nei nostri contenitori. +book.ironchest:dirtchest9000.page2=Uso: inserisci uno stack di terra nello slot e goditi la grande convenienza di avere della terra a tua disposizione ogni volta che passi vicino alla cassa! +book.ironchest:dirtchest9000.page3=Speriamo che questo manuale vi sia stato utile, e speriamo che prenderete in considerazione usare i nostri prodotti in futuro ! I migliori saluti, i scrittori del manuale per la DirtChest 9000. +book.ironchest:dirtchest9000.page4=Garanzia: Questo prodotto non ha nessuna garanzia di alcun tipo. La tua terra potrebbe non essere imagazzinata, potrebbe lentamente fuoriuscire nell'ambiente, oppure, non farà niente. +book.ironchest:dirtchest9000.page5=La DirtChest 9000 è amico dell'ambiente. Per favore conservate questo libro in un modo responsabile, e non buttatelo nella lava come un oggetto qualsiasi. Saremmo veramente tristi. diff --git a/src/main/resources/assets/ironchest/lang/ko_KR.lang b/src/main/resources/assets/ironchest/lang/ko_KR.lang new file mode 100755 index 0000000..837ae58 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/ko_KR.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=철 상자 +tile.ironchest:GOLD.name=금 상자 +tile.ironchest:DIAMOND.name=다이아몬드 상자 +tile.ironchest:COPPER.name=구리 상자 +tile.ironchest:SILVER.name=은 상자 +tile.ironchest:CRYSTAL.name=수정 상자 +tile.ironchest:OBSIDIAN.name=흑요석 상자 +tile.ironchest:DIRTCHEST9000.name=흙 상자 9000! + +item.ironchest:IRONGOLD.name=철 상자를 금 상자로 업그레이드 +item.ironchest:GOLDDIAMOND.name=금 상자를 다이아몬드 상자로 업그레이드 +item.ironchest:COPPERSILVER.name=구리 상자를 은 상자로 업그레이드 +item.ironchest:SILVERGOLD.name=은 상자를 금 상자로 업그레이드 +item.ironchest:COPPERIRON.name=구리 상자를 철 상자로 업그레이드 +item.ironchest:DIAMONDCRYSTAL.name=다이아몬드 상자를 수정 상자로 업그레이드 +item.ironchest:WOODIRON.name=나무 상자를 철 상자로 업그레이드 +item.ironchest:WOODCOPPER.name=나무 상자를 구리 상자로 업그레이드 +item.ironchest:DIAMONDOBSIDIAN.name=다이아몬드 상자를 흑요석 상자로 업그레이드 + +book.ironchest:dirtchest9000.title=흙 상자 9000을 사용하는 방법! +book.ironchest:dirtchest9000.page1=새로운 흙 상자 9000을 사용하게 되신 것을 환영합니다! 우리는 당신이 이 저장 도구에서 흙들을 많은 해 동안 행복하게 저장하기를 기원합니다. +사용법: 단순히 흙 뭉치들을 아이템 슬롯에 넣고 이 상자를 지나갈 때마다 언제나 당신에게 제공되어지는 흙들의 편리함을 누리세요! +book.ironchest:dirtchest9000.page3=우리는 당신이 이 사용설명서를 즐겁게 읽었고, 나중에 이 제품을 사용하기를 바랍니다! 흙 상자 9000 매뉴얼 +book.ironchest:dirtchest9000.page4=주의: 이 제품에는 어떤 종류의 보증도 하지 않습니다 당신의 흙들은 저장되지 않을 수도 있습니다. 그러면 이 흙 상자는 천천히 환경 속으로 돌아가거나, 혹은 아무것도 하지 않을 것입니다. +book.ironchest:dirtchest9000.page5=흙 상자 9000은 환경 친화적입니다. 가이드북의 처분에는 책임이 따릅니다, 그러니 어떠한 경우라도 용암에 버리지 마세요. 우리는 매우 슬플 것입니다. diff --git a/src/main/resources/assets/ironchest/lang/nb_NO.lang b/src/main/resources/assets/ironchest/lang/nb_NO.lang new file mode 100755 index 0000000..c5beb18 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/nb_NO.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Jernkiste +tile.ironchest:GOLD.name=Gullkiste +tile.ironchest:DIAMOND.name=Diamantkiste +tile.ironchest:COPPER.name=Kobberkiste +tile.ironchest:SILVER.name=Sølvkiste +tile.ironchest:CRYSTAL.name=Krystallkiste +tile.ironchest:OBSIDIAN.name=Obsidiankiste +tile.ironchest:DIRTCHEST9000.name=JordKiste 9000! + +item.ironchest:IRONGOLD.name=Jern til Gull Kisteoppgradering +item.ironchest:GOLDDIAMOND.name=Gull til Diamant Kisteoppgradering +item.ironchest:COPPERSILVER.name=Kobber til Sølv Kisteoppgradering +item.ironchest:SILVERGOLD.name=Sølv til Gull Kisteoppgradering +item.ironchest:COPPERIRON.name=Kobber til Jern Kisteoppgradering +item.ironchest:DIAMONDCRYSTAL.name=Diamant til Krystall Kisteoppgradering +item.ironchest:WOODIRON.name=Tre til Jern Kisteoppgradering +item.ironchest:WOODCOPPER.name=Tre til Kobber Kisteoppgradering +item.ironchest:DIAMONDOBSIDIAN.name=Diamant til Obsidian Kisteoppgradering + +book.ironchest:dirtchest9000.title=Hvordan bruker din JordKiste 9000! +book.ironchest:dirtchest9000.page1=Velkommen til din nye JordKiste9000! Vi håper du vil nyte mange lykkelige år med lagring av din stabel av jord i vå lager verktøy. +book.ironchest:dirtchest9000.page2=Bruk: bare å sette bunken med jord av ditt valg i den svært mottakelige sporet og nyte den store fordelen med åa den jorden tilgjengelig for deg, nådu passerer denne kisten! +book.ironchest:dirtchest9000.page3=Vi håper du har hatt en god fornøyelse gjennom denne bruksanvisningen, og hår du vil vurdere å bruke vå produkter i fremtiden! Vennlig hilsen, JordKiste9000 manual forfattere innarbeidet. +book.ironchest:dirtchest9000.page4=Garanti: Dette produktet har ingen garantier av noe slag. Din jord kan ikke lagres, det kan sakte lekke ut i miljøet, eller alternativt, kan det ikke gjøre noe i det hele tatt. +book.ironchest:dirtchest9000.page5=JordKiste 9000 er snill mot miljøet. Vennligst ta hånd om denne veileder boken ansvarlig, og hva du enn gjør ikke kast den inn i noe lav. Vi ville bli veldig trist. diff --git a/src/main/resources/assets/ironchest/lang/nl_NL.lang b/src/main/resources/assets/ironchest/lang/nl_NL.lang new file mode 100755 index 0000000..fb3a2f5 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/nl_NL.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Ijzeren Kist +tile.ironchest:GOLD.name=Gouden Kist +tile.ironchest:DIAMOND.name=Diamanten Kist +tile.ironchest:COPPER.name=Koperen Kist +tile.ironchest:SILVER.name=Zilveren Kist +tile.ironchest:CRYSTAL.name=Kristallen Kist +tile.ironchest:OBSIDIAN.name=Obsidiaanen Kist +tile.ironchest:DIRTCHEST9000.name=Aarden Kist 9000! + +item.ironchest:IRONGOLD.name=Ijzeren naar Gouden Kist Transformatie +item.ironchest:GOLDDIAMOND.name=Gouden naar Diamanten Kist Transformatie +item.ironchest:COPPERSILVER.name=Koperen naar Zilveren Kist Transformatie +item.ironchest:SILVERGOLD.name=Zilveren naar Gouden Kist Transformatie +item.ironchest:COPPERIRON.name=Koperen naar Ijzeren Kist Transformatie +item.ironchest:DIAMONDCRYSTAL.name=Diamanten naar Kristallen Kist Transformatie +item.ironchest:WOODIRON.name=Houten naar Ijzeren Kist Transformatie +item.ironchest:WOODCOPPER.name=Houten naar Koperen Kist Transformatie +item.ironchest:DIAMONDOBSIDIAN.name=Diamanten naar Obsidiaanen Kist Transformatie + +book.ironchest:dirtchest9000.title=Hoe gebruik je uw Aarden Kist 9000! +book.ironchest:dirtchest9000.page1=Welkom voor uw nieuwe Aarden Kist 9000! We hopen dat je veel geluk zal beleven om uw hoop aarde te bewaren in onze stokeer faciliteit. +book.ironchest:dirtchest9000.page2=Gebruik: Plaats simpelweg uw hoop aarde naar uw keuze in de zeer ontvankelijke gleuf en geniet van de geriefelijkheid om dat hoop aarde altijd beschikbaar tot u te hebben, wanneer dan ook! +book.ironchest:dirtchest9000.page3=We hopen dat u heeft genoten om deze handleiding te lezen en we hopen dat u overweegt om onze producten in de toekomst te gebruiken! Met vriendelijke groeten, De Aarden Kist 9000 Handleiding Auteurs. +book.ironchest:dirtchest9000.page4=Garantie: Deze product biedt geen enkele garantie. Uw aarde kan mogenlijk niet gestockeerd worden, het kan langzaam verdampen of het kan ook helemaal niks doen. +book.ironchest:dirtchest9000.page5=Aarden Kist 9000 is mileuvriendelijk. Gelieve deze handleiding verantwoordlijk te ontdoen en gooi het niet zomaar in wat lava. We zouden zeer verdrietig zijn. diff --git a/src/main/resources/assets/ironchest/lang/pl_PL.lang b/src/main/resources/assets/ironchest/lang/pl_PL.lang new file mode 100755 index 0000000..c5ffc85 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/pl_PL.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Żelazna skrzynia +tile.ironchest:GOLD.name=Złota skrzynia +tile.ironchest:DIAMOND.name=Diamentowa skrzynia +tile.ironchest:COPPER.name=Miedziana skrzynia +tile.ironchest:SILVER.name=Srebrna skrzynia +tile.ironchest:CRYSTAL.name=Kryształowa skrzynia +tile.ironchest:OBSIDIAN.name=Obsydianowa skrzynia + +item.ironchest:IRONGOLD.name=Ulepszenie żelaznej skrzyni na złotą +item.ironchest:GOLDDIAMOND.name=Ulepszenie złotej skrzyni na diamentową +item.ironchest:COPPERSILVER.name=Ulepszenie miedzianej skrzyni na srebrną +item.ironchest:SILVERGOLD.name=Ulepszenie srebrnej skrzyni na złotą +item.ironchest:COPPERIRON.name=Ulepszenie miedzianej skrzyni na żelazną +item.ironchest:DIAMONDCRYSTAL.name=Ulepszenie diamentowej skrzyni na kryształową +item.ironchest:WOODIRON.name=Ulepszenie drewnianej skrzyni na żelazną +item.ironchest:WOODCOPPER.name=Ulepszenie drewnianej skrzyni na miedzianą +item.ironchest:DIAMONDOBSIDIAN.name=Ulepszenie diamentowej skrzyni na obsydianową diff --git a/src/main/resources/assets/ironchest/lang/pt_BR.lang b/src/main/resources/assets/ironchest/lang/pt_BR.lang new file mode 100755 index 0000000..38c0e34 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/pt_BR.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Baú de Ferro +tile.ironchest:GOLD.name=Baú de Ouro +tile.ironchest:DIAMOND.name=Baú de Diamante +tile.ironchest:COPPER.name=Baú de Cobre +tile.ironchest:SILVER.name=Baú de Prata +tile.ironchest:CRYSTAL.name=Baú de Cristal +tile.ironchest:OBSIDIAN.name=Baú de Obsidiana +tile.ironchest:DIRTCHEST9000.name=BaúDeSujeira 9000! + +item.ironchest:IRONGOLD.name=Aprimoramento de Baú de Ferro para Ouro +item.ironchest:GOLDDIAMOND.name=Aprimoramento de Baú de Ouro para Diamante +item.ironchest:COPPERSILVER.name=Aprimoramento de Baú de Cobre para Prata +item.ironchest:SILVERGOLD.name=Aprimoramento de Baú de Prata para Ouro +item.ironchest:COPPERIRON.name=Aprimoramento de Baú de Cobre para Ferro +item.ironchest:DIAMONDCRYSTAL.name=Aprimoramento de Baú de Diamante para Cristal +item.ironchest:WOODIRON.name=Aprimoramento de Baú de Madeira para Ferro +item.ironchest:WOODCOPPER.name=Aprimoramento de Baú de Madeira para Cobre +item.ironchest:DIAMONDOBSIDIAN.name=Aprimoramento de Baú de Diamante para Obsidiana + +book.ironchest:dirtchest9000.title=Como utilizar seu BaúDeSujeira 9000! +book.ironchest:dirtchest9000.page1=Bem-vindo ao seu novo BaúDeSujeira 9000! Esperamos que desfrute de muitos anos felizes de armazenagem de sua pilha de sujeira em nosso utilitário de armazenamento. +book.ironchest:dirtchest9000.page2=Uso: basta inserir o monte de sujeira de sua escolha no slot altamente receptivo e apreciar a grande conveniência de ter essa sujeira disponíveis para você, a qualquer momento que você passar pelo baú! +book.ironchest:dirtchest9000.page3=Esperamos que tenham gostado de rever este manual de instruções, e espero que você considere o uso de nossos produtos no futuro! Atenciosamente, manual do BaúDeSujeira 9000 escritores incorporados. +book.ironchest:dirtchest9000.page4=Garantia: Este produto não tem qualquer tipo de garantia. Sua sujeira pode não ser armazenada, pode vazar lentamente para o ambiente, ou alternativamente, pode não fazer absolutamente nada. +book.ironchest:dirtchest9000.page5=BaúDeSujeira 9000 é bom para o meio ambiente. Elimine este guia de forma responsável, e não o que você faz apenas lançando-o em alguma lava. Ficaríamos muito triste. diff --git a/src/main/resources/assets/ironchest/lang/pt_PT.lang b/src/main/resources/assets/ironchest/lang/pt_PT.lang new file mode 100755 index 0000000..cb29cb2 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/pt_PT.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Baú de Ferro +tile.ironchest:GOLD.name=Baú de Ouro +tile.ironchest:DIAMOND.name=Baú de Diamante +tile.ironchest:COPPER.name=Baú de Cobre +tile.ironchest:SILVER.name=Baú de Prata +tile.ironchest:CRYSTAL.name=Baú de Cristal +tile.ironchest:OBSIDIAN.name=Baú de Obsidiana + +item.ironchest:IRONGOLD.name=Melhoria de Baú de Ferro para Ouro +item.ironchest:GOLDDIAMOND.name=Melhoria de Baú de Ouro para Diamante +item.ironchest:COPPERSILVER.name=Melhoria de Baú de Cobre para Prata +item.ironchest:SILVERGOLD.name=Melhoria de Baú de Prata para Ouro +item.ironchest:COPPERIRON.name=Melhoria de Baú de Cobre para Ferro +item.ironchest:DIAMONDCRYSTAL.name=Melhoria de Baú de Diamante para Cristal +item.ironchest:WOODIRON.name=Melhoria de Baú de Madeira para Ferro +item.ironchest:WOODCOPPER.name=Melhoria de Baú de Madeira para Cobre +item.ironchest:DIAMONDOBSIDIAN.name=Melhoria de Baú de Diamante para Obsidiana diff --git a/src/main/resources/assets/ironchest/lang/ru_RU.lang b/src/main/resources/assets/ironchest/lang/ru_RU.lang new file mode 100755 index 0000000..114eee7 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/ru_RU.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Железный сундук +tile.ironchest:GOLD.name=Золотой сундук +tile.ironchest:DIAMOND.name=Алмазный сундук +tile.ironchest:COPPER.name=Медный сундук +tile.ironchest:SILVER.name=Серебряный сундук +tile.ironchest:CRYSTAL.name=Кристальный сундук +tile.ironchest:OBSIDIAN.name=Обсидиановый сундук + +item.ironchest:IRONGOLD.name=Улучшение из железного в золотой сундук +item.ironchest:GOLDDIAMOND.name=Улучшение из золотого в алмазный сундук +item.ironchest:COPPERSILVER.name=Улучшение из медного в серебряный сундук +item.ironchest:SILVERGOLD.name=Улучшение из серебряного в золотой сундук +item.ironchest:COPPERIRON.name=Улучшение из медного в железный сундук +item.ironchest:DIAMONDCRYSTAL.name=Улучшение из алмазного в кристальный сундук +item.ironchest:WOODIRON.name=Улучшение из деревянного в железный сундук +item.ironchest:WOODCOPPER.name=Улучшение из деревянного в медный сундук +item.ironchest:DIAMONDOBSIDIAN.name=Улучшение из алмазного в обсидиановый сундук diff --git a/src/main/resources/assets/ironchest/lang/sv_SE.lang b/src/main/resources/assets/ironchest/lang/sv_SE.lang new file mode 100755 index 0000000..2bbeacf --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/sv_SE.lang @@ -0,0 +1,17 @@ +tile.ironchest:IRON.name=Järnkista +tile.ironchest:GOLD.name=Guldkista +tile.ironchest:DIAMOND.name=Diamantkista +tile.ironchest:COPPER.name=Kopparkista +tile.ironchest:SILVER.name=Silverkista +tile.ironchest:CRYSTAL.name=Kristallkista +tile.ironchest:OBSIDIAN.name=Obsidiankista + +item.ironchest:IRONGOLD.name=Järn till Guld Kistuppgradering +item.ironchest:GOLDDIAMOND.name=Guld till Diamant Kistuppgradering +item.ironchest:COPPERSILVER.name=Koppar till Silver Kistuppgradering +item.ironchest:SILVERGOLD.name=Silver till Guld Kistuppgradering +item.ironchest:COPPERIRON.name=Koppar till Järn Kistuppgradering +item.ironchest:DIAMONDCRYSTAL.name=Diamant till Kristal Kistuppgradering +item.ironchest:WOODIRON.name=Trä till Järn Kistuppgradering +item.ironchest:WOODCOPPER.name=Trä till Koppar Kistuppgradering +item.ironchest:DIAMONDOBSIDIAN.name=Diamant till Obsidian Kistuppgradering diff --git a/src/main/resources/assets/ironchest/lang/tr_TR.lang b/src/main/resources/assets/ironchest/lang/tr_TR.lang new file mode 100755 index 0000000..9c86204 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/tr_TR.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=Demir Sandık +tile.ironchest:GOLD.name=Altın Sandık +tile.ironchest:DIAMOND.name=Elmas Sandık +tile.ironchest:COPPER.name=Bakır Sandık +tile.ironchest:SILVER.name=Gümüş Sandık +tile.ironchest:CRYSTAL.name=Kristal Sandık +tile.ironchest:OBSIDIAN.name=Obsidyen Sandık +tile.ironchest:DIRTCHEST9000.name=Toprak Sandık-9000! + +item.ironchest:IRONGOLD.name=Demir Sandığı Altın Sandığa Yükselt +item.ironchest:GOLDDIAMOND.name=Altın Sandığı Elmas Sandığa Yükselt +item.ironchest:COPPERSILVER.name=Bakır Sandığı Gümüş Sandığa Yükselt +item.ironchest:SILVERGOLD.name=Gümüş Sandığı Altın Sandığa Yükselt +item.ironchest:COPPERIRON.name=Bakır Sandığı Demir Sandığa Yükselt +item.ironchest:DIAMONDCRYSTAL.name=Elmas Sandığı Kristal Sandığa Yükselt +item.ironchest:WOODIRON.name=Tahta Sandığı Demir Sandığa Yükselt +item.ironchest:WOODCOPPER.name=Tahta Sandığı Bakır Sandığa Yükselt +item.ironchest:DIAMONDOBSIDIAN.name=Elmas Sandığı Obsidyen Sandığa Yükselt + +book.ironchest:dirtchest9000.title=Toprak Sandık-9000 Kullanım Kılavuzu +book.ironchest:dirtchest9000.page1=Yeni sandık olan Toprak Sandık-9000 yaptığınız için teşekkürler.Bu sandık ile topraklarınızı depolayabilirsiniz. +book.ironchest:dirtchest9000.page2=Kullanımı: 64 adet toprak alarak içine koyunuz. Böylece sadece toprak depolanır. +book.ironchest:dirtchest9000.page3=Biz bu kılavuzu gözden keyif aldık umuyoruz, ve gelecekte ürünlerimizi kullanmayı düşünün umuyoruz! Saygılarımızla, dahil DirtChest 9000 manuel yazar. +book.ironchest:dirtchest9000.page4=Garanti: Bu ürün herhangi bir garanti vardır. Sizin kir depolanabilir değil, yavaş yavaş çevreye sülük olabilir, ya da alternatif olarak, hiç bir şey yapamazsınız. +book.ironchest:dirtchest9000.page5=Toprak Sandık-9000 çevreye türüdür. Sorumlu bu rehber kitap imha edin ve ne olursa olsun sadece bazı lav içine ayna yok yok. Bizim için çok üzücü olacaktır. diff --git a/src/main/resources/assets/ironchest/lang/zh_CN.lang b/src/main/resources/assets/ironchest/lang/zh_CN.lang new file mode 100755 index 0000000..974ada4 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/zh_CN.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=铁箱子 +tile.ironchest:GOLD.name=金箱子 +tile.ironchest:DIAMOND.name=钻石箱子 +tile.ironchest:COPPER.name=铜箱子 +tile.ironchest:SILVER.name=银箱子 +tile.ironchest:CRYSTAL.name=水晶箱子 +tile.ironchest:OBSIDIAN.name=黑曜石箱子 +tile.ironchest:DIRTCHEST9000.name=泥箱子9000! + +item.ironchest:IRONGOLD.name=升级:铁>金 +item.ironchest:GOLDDIAMOND.name=升级:金>钻石 +item.ironchest:COPPERSILVER.name=升级:铜>银 +item.ironchest:SILVERGOLD.name=升级:银>金 +item.ironchest:COPPERIRON.name=升级:铜>铁 +item.ironchest:DIAMONDCRYSTAL.name=升级:钻石>水晶 +item.ironchest:WOODIRON.name=升级:木>铁 +item.ironchest:WOODCOPPER.name=升级:木>铜 +item.ironchest:DIAMONDOBSIDIAN.name=升级:钻石>黑曜石 + +book.ironchest:dirtchest9000.title=傻瓜也一定会用的泥箱子9000! +book.ironchest:dirtchest9000.page1=欢迎使用这台全新的泥箱子9000!希望你能愉快地常年使用我们的设备来储存(大量)泥土(大雾)。 +book.ironchest:dirtchest9000.page2=使用方法: 把一组泥土丢进去就行了。每次您经过的时候都可以打开它(很方便地)取出来用。 +book.ironchest:dirtchest9000.page3=希望您阅读本手册愉快,并选择使用我们的产品。作为泥箱子9000手册作者我谨向您致以诚挚问候。 +book.ironchest:dirtchest9000.page4=质量保障: 恕本产品不提供任何质量保障。您的泥土或者能安全存储其内,或者会逐渐流失到环境中,或者什么也不会发生。(读者:我了个去!) +book.ironchest:dirtchest9000.page5=泥箱子9000十分环保。请小心收藏好本手册,如果您随手丢进岩浆的话,我们可会伤心的。 diff --git a/src/main/resources/assets/ironchest/lang/zh_TW.lang b/src/main/resources/assets/ironchest/lang/zh_TW.lang new file mode 100755 index 0000000..d4755f6 --- /dev/null +++ b/src/main/resources/assets/ironchest/lang/zh_TW.lang @@ -0,0 +1,25 @@ +tile.ironchest:IRON.name=鐵箱 +tile.ironchest:GOLD.name=黃金箱 +tile.ironchest:DIAMOND.name=鑽石箱 +tile.ironchest:COPPER.name=銅箱 +tile.ironchest:SILVER.name=銀箱 +tile.ironchest:CRYSTAL.name=水晶箱 +tile.ironchest:OBSIDIAN.name=黑曜石箱 +tile.ironchest:DIRTCHEST9000.name=泥土箱9000! + +item.ironchest:IRONGOLD.name=鐵箱升級成金箱 +item.ironchest:GOLDDIAMOND.name=金箱升級成鑽石箱 +item.ironchest:COPPERSILVER.name=銅箱升級成銀箱 +item.ironchest:SILVERGOLD.name=銀箱升級成金箱 +item.ironchest:COPPERIRON.name=銅箱升級成鐵箱 +item.ironchest:DIAMONDCRYSTAL.name=鑽石箱升級成水晶箱 +item.ironchest:WOODIRON.name=木箱升級成鐵箱 +item.ironchest:WOODCOPPER.name=木箱升級成銅箱 +item.ironchest:DIAMONDOBSIDIAN.name=鑽石箱升級成黑曜石箱 + +book.ironchest:dirtchest9000.title=笨蛋也一定會用的泥土箱9000! +book.ironchest:dirtchest9000.page1=歡迎使用這台全新的泥土箱9000!希望你能愉快地常年使用我們的設備來儲存泥土。 +book.ironchest:dirtchest9000.page2=使用方法:把一組泥土丟進去就行了。每次您經過的時候都可以打開它很方便地取出來用。 +book.ironchest:dirtchest9000.page3=希望您閱讀本手冊愉快,並選擇使用我們的產品。作為泥土箱9000手冊作者我謹向您致以誠摯問候。 +book.ironchest:dirtchest9000.page4=質量保障:恕本產品不提供任何質量保障。您的泥土或許能安全存儲其內,或許會逐漸流失到環境中,或者什麼也不會發生。 +book.ironchest:dirtchest9000.page5=泥土箱9000十分環保。請小心收藏好本手冊,如果您隨手丟進岩漿的話,我們可會傷心的。 \ No newline at end of file diff --git a/src/main/resources/assets/ironchest/textures/blocks/copper_front.png b/src/main/resources/assets/ironchest/textures/blocks/copper_front.png new file mode 100755 index 0000000000000000000000000000000000000000..8ca415c5ae6d61aff4d347b0793ca30e2bb4dd86 GIT binary patch literal 679 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lvott z6XJTX)@^UO{j<|spPbnE$JRYMwBo_O#V;@JdwF5c?JZO8?VR)Y$m)B$=HA^t zvM=sLcjWQT@M9gJ|NsBzz8+);bS-0&x4Vn!y=^zMfgH{PkH}&M25w;x zW@MN(M*=9g(bL5-MB;Mnx!Xcb3L*}H`l206r!5g#7&&X2M#sPZ+e=H9vEM$-oPN+C z;+oa%O>^SkrR{cRkf^@l+VW$!trZJ{BA;@J&CxG1EGmp24E#8E$NcndV7T%6!Nn7W zLFS)5^;%9a8vWOs)F9BXNPwX~-Ba7^Wp`LaW#(QI1O$~b=8 zhAC^Wd|nuow$qTO>OtB(OO^xfcKVBdtT@AT!97(C>Rd$4i#D zMwB?`=jNv7l`uFLr6!i7rYMwWmSiZnd-?{1H}Z)C6{&(0r2wU@lEEq%j0_Bobq#>X zGQ`l-%GAQj&_vh3)XKns?cL{26b-rgDVb@NPz{E45bDP46hOx7_4S6Fo+k-*%fF5l$aLa z6XJTX)@^UO{j<|spPbnE$JRYMwBo_O#V;@JdwF5ci}Snh?V5Xc`;1qY58mHB z|Mr$Cw>M9Ies;&B!z=IYob&YLru%yq+}bqp*2W2UwobjVw(I)pjw{O=FE6gSIKS-T zypl@`D=#mqzA(4={Op2rGjh&O%Q`b9{mkUl)00w8^(UO@i9S0uJSXW)|qW{#O$BVJUv!ia(=Ag%WdKiMf72V^Xdgo=Ijdcxx$TGyx)XLPt%FsmDz|_jXfbHGq zP81Ef`6-!cl~4_ax<*DJhK5!~25=4KTTjLVH3))iNXyJg%}dNpwJHHJ7>wf$b~*D` Q0wozdUHx3vIVCg!0L|wRIRF3v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/copper_top.png b/src/main/resources/assets/ironchest/textures/blocks/copper_top.png new file mode 100755 index 0000000000000000000000000000000000000000..09a84886bc2e187d872f7213611e06eec16085e5 GIT binary patch literal 546 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lyD93 z32{AG>-PBAx+lliKRL1S+3BrMPi}gCcE^kJyI)?|^Z3Z>2m2Pkytwbx<%9Qj&3$xu z<-MJA?rxv)@ZhrhdluZ@GUe8$iMKXR`2YWZj$xWC&_Ko{Z+925nu{wWfgH{PkH}&M z25w;xW@MN(M*=9=>FMGaB5^sj-+C8Sf;UEKBP2(iR;nCB+;3+62fPet>an1bm+#Zhi@7T1QTzo z8*~eN|8h-RPS++#Y}u3ru3M&cTj&2abhx_u>*D$8u0E^ReA?4@ufDiPbN#=n`gimH zGr733YGfAhegQg4vcxr_#5q4VH#M(>!MP|ku_QG`p**uBL&4qCHz2%`PaLR76{IKy zC}oulR>5FoU}&ss07RA{hNf1g7FLEPx(23J1_o^JK6j#M$jwj5Osj-yFw`|N3NbXa xGBSW`DBpTA9;iVOWJ6kJPHJ9aZmLxYkilRaZ+O!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=Y7G zC&U#Ks7)k|4ie28U-i(m6ET1IZHC zh!W@g+}zZ>5(ej@)Wnk16ovB4k_-iRPv3y>Mm}+%B2|#06rhwiMgp(B|rv)X}nRu0iowWNd`|>KbLh*2~7Y9cWCVZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/crystal_side.png b/src/main/resources/assets/ironchest/textures/blocks/crystal_side.png new file mode 100755 index 0000000000000000000000000000000000000000..842cc18f2af1361649fa194d602a0fb79a42e563 GIT binary patch literal 396 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=Y7G zC&U#Ks7)k|4ie28U-i(m6ET1IZHC zh!W@g+}zZ>5(ej@)Wnk16ovB4k_-iRPv3y>Mm}+%B2|#06rhwiMgp(B|rv)X}rO{bH%5Dk_?`%elF{r5}E)L>1nJ0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/crystal_top.png b/src/main/resources/assets/ironchest/textures/blocks/crystal_top.png new file mode 100755 index 0000000000000000000000000000000000000000..ce8ef6307c684e7bbe2175666f0c4adc36e8e505 GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YhS zC&U#aiAhqkfIczlvOfV1%r`+p|P$35Lt#8np&A!SQ(n=8kkxc z7_hzj+=-$gH$NpatrDuiP}j&P#L&>n$N;XPeCx@0pawyZ4QZJ45bDP46hOx7_4S6Fo+k-*%fF5lz156 z6XMFa_zA4cneKtUF(` zY=6yh=pFlkx2(I~uo=4rhT!WHAE+w=f7ZGR&GI0Tevy>Eak7aXI$faj_-?0f&nWVjHx>lGZnf?sn`y8FGb0eSJnd!>$(^ttQ%w>~K`lg+Gx)x-%CVA?HulhMFDqrEnta~BRZ~eBX zn`Fo@Tp-GR_+o|8+_SvRN*?!%;fJbb%fe%*Pdb9)uO2uKu1DomT>zHtY~VFi|&qIn4% z9~cb-dFER%wXg_zTy{}#(E3{+@{8%v5qWh!{+dld4@s7|MwB?`=jNv7l`uFLr6!i7 zrYMwWmSiZnd-?{1H}Z)C6{&(0r2wU@lEEq%j0_Bobq#>XGQ`l-%GAQj&_vh3)XKns z?cL{26b-rgDVb@NPz{E45bDP46hOx7_4S6Fo+k-*%fF5l-L{K z6XMFa_zAF`{tMK(;pg-zXyK$?fK!i@r$22Pkt!g`=)UBoBZ8xhR=Vf zKm4xp;G4{?uaY;u2w(mzaQ+kT>5n|8KJcIY$angqz`0M{Cq8f;d(UzB9mm0U?EBxc z?R(3%_YK>gH>^8fvuuCOap)cUfw!!?-mva?&9e0s%eGg{n_seQdBwcxCG*CY|NsA= z_2Sh`php;!yxm>wJX07R138=p9+AZi4BWyX%*Zfnjs#F}pQnpsh{WaCb0@``40u>C z1Qlp>M6t^-h>E7K2uR`h@PB{mE57(mCw87xYAIPP=u|4|wesR?{x*)Dnfo_oz>&6OoPc2oaZzmW1P%hHEyvIYZrNedIw4iBIcWHF( zVUSt6#*pJe!>dhA%d{95wn^RE7RGTQ>wkY%{Fyrv5#CeezX5$BS>hT|;+&tGo0?a` z;9QiNSdyBeP@Y+mq2TW68xY>eCk|Ak3R08;l(I?&t6(rPFf`UR03yo}LsKhL3oAnt zT?11q0|T~qpF2@BIal$@O1TaS?83{1OWYyF311? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/diamond_top.png b/src/main/resources/assets/ironchest/textures/blocks/diamond_top.png new file mode 100755 index 0000000000000000000000000000000000000000..08c3bb536ec965230594a72ff4283a8c7688e9e2 GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5ln4y) z32|jy{KV<)FPC?}Jm3HJ|M=VI<8RLozXL!0c7OLPv$nc2qP=E>KO zcfN1Ycs}E0Y0mSR3k%t|@AzbKfByTwpY3nxv2`)2gsTFbC|TkfQR1ARo128bg=d#Wzp$PzOFx9#M literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png new file mode 100755 index 0000000000000000000000000000000000000000..4e1e1fdd307ba264954c8c52e8d9d20737923625 GIT binary patch literal 3194 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png new file mode 100755 index 0000000000000000000000000000000000000000..ebda19fd06b24959429d20ffb2f6fc6d9220cad6 GIT binary patch literal 3202 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png new file mode 100755 index 0000000000000000000000000000000000000000..a92c5f17eb6c7855a2f9baa3a6f7fd454b5b81e4 GIT binary patch literal 3212 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/gold_side.png b/src/main/resources/assets/ironchest/textures/blocks/gold_side.png new file mode 100755 index 0000000000000000000000000000000000000000..f06fb4f7ea158ed4505c76a3217a4e7b816ba7cc GIT binary patch literal 726 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lsFvV z6XM$1$xvCxaO+LL&DY*HUOHZTZgKUQ$)(3y=N~BD|5SAEL)P8*$!G3Jp1djY;B(c5 zhbm|9N*}w*f8;Xnop&*ppXi>xEq>yL(CxQjH(t4(yDxw0mgwP2JcllFAH2YI_MYtV zYl26w@a;d#vF8-qwj(T?_A#y9$+%_*vl12+{?6T8{>-23`^ECELzJje-*>L zl??M%Fw9-fFl#ZxjD-x-7ceYd$FOh>!|WvtGZ!&ToyRb3KEvcW3{&PZOq$IwX%@r8 znGFB`|G&q%80a+y#w2fd7l(g0V{QOBoCO|{#S9GG!XV7ZFl&wkP;kGei(`ny<=At_ znVJlE8Xg7}h_J3@W`A&uH#91><>SBn)GuxIMZbzT70;SDt@zg)l(ps7Ts@}bXZclI zuD*@tFxxyc^IJx>!ImE!2UB`_R~pW=>U&zivQ|>@m(TU*$C6IQp8p)%a<$}bugp2~ zb^GsDaqRx9Xu;-KU?s2L&VA@-)!w^@J#6NkkI-tl{#(>7f1-w@dS;J;i;9qq*V0Wf zN=q^)IZe}E$;AWovN-1|8|D@!t`)DDRtYUwv-Q9GR{mQF67w#3UsM5lMY6;-qQp5r zH#aq}gu%HeHL)Z$MWH;iBtya7(>EZzkxv|`NEM_g1t?{e3|7HlWMF8lYXC%+A%><_ zrWRI)Cb|ZuRt5%a?>={;Xvob^$xN$+YB1C_G72#?v@$Y)Ybf7(G9IWw5M)DIW=?8e dVs5Hc36Q~H7;mui_-&B&44$rjF6*2UngDe%88iR@ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/gold_top.png b/src/main/resources/assets/ironchest/textures/blocks/gold_top.png new file mode 100755 index 0000000000000000000000000000000000000000..a29e9f378a0499c1c2188819f166f07a336d5a9e GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5ln4y) z32|-hWVrgwU*V}KyuD`Ik^DgG@`{a8cvaUQexbRTr{->e` zpR3N?k-Ypw_w;S?6E}n|K2kq>PxjO;(W6)R4qxIqbdmf2|NlJe-K>FzGbVYvyGWI$ zKQRJwI14-?iy0WWg+Z8+Vb&Z8px|^*7sn8Z%c=d2V$B8|E~YaX7*)50-M;sK5$o^$HS?&j<( zuu+AvM^QGnCJhTe>cWiRZiFqM3=2+qs|EJo)a8;laB}-f*N}Tg^b5rw57@Uhz z6H8K46v{J8G8EiBeFMT9`NV;WR6&YTfKpb;U=<8T28PDE20&yPVrXh*YGGw)qHADk zWnjSe?sF%KhTQy=%(P0V218vVqYy(wD45bDP46hOx7_4S6Fo+k-*%fF5l=u+f z6XM#|)mK&Da{KMOTW{XpeD(VJi4k@n9(?|M|Kq3opFZ7q_4>lYhsUm6 zKYIQ8nLBr{K6`%l?!8mDZa@6;<<9%}J5QWkym8a~wd>aH*?Zu^#gjL09lv(t=#^_X zU%x(j_3EPa>s$Kz>pD6n&Y8Pm@4iD9FWq_f{^sj9=N~*gef!Rl%U2Iyx^n2^<#YER zoVb4T*wyO?&Ry7h`t0_j$2adkv~JhlwLAB0+HS<=ip1own%tgy)EL^%|{ia20H_TbOa@OMI)8;RpzF^6exeKSxTQqsj zg2}VzPntFF|NsB<&wES;`kgV!+ug-KFU`>t$l)yTh%9Dc;1&j9Muu5)B!GhFJzX3_ zBreCEi;Qk^5NZF&7~)dAeT{_9X;B?rLvx8lwn)Cy-~U_4>VK_0clCXJF~?3{C6};u zCpX1tgvdb^-|yYKHTQS^_PhDtICdX?SWy&H_RVHK zcgq7Ii+8Q9O}`VLC>uQ6B;c;+GN+(LgG;$X_@HZ-Vv6MhMaOwZ8YVb#xlVMN$C%Pu z@_)q_{)#<{y!J2L5`bQlEOCt}an8@pP0cG|a4t$sEJ;mKD945bDP46hOx7_4S6Fo+k-*%fF5lsFvV z6XM#|)mK&Da{KMOTW{XpeD(VJi4k@n9(?|M|Kq27A3mPFd+*e(+Yi5d zx%lYuxqJ7IU%PSi%C)=iKU{hG?983JCvV=m^X~o4*Kf{0czF8uog$t(8bH= z?mswj{pPW&*AJY#u=n)Y?MIJq-hXJ_uDxq_?%BBa!1~?$HtjpOdi$=GTedIVuzB&i zjSE(hamd#kWbjkWni`H(KvvlRG#mlG7Up#%mk|}c+PMx=C z@|*>eXV0HBYu^9={~zsjlK^^$G0EHA#o^!0m>WP2XMsm#F#`j)FbFd;%$fsIvES3h zF+}2W?78DiO$Iy-4}%IsSl2SMKRCu48kO4e@n3%Gm$v$%UqzgXXHA?|{Ob+M+Hz~I z9#itO{HiTi-$rwoZJwF=Eu-3C%MXr&DLuU_4QE>QJuP5aE2;R)=lb(wNhf2^e~xXr zTJpA6=A8Mu{dcQ4cK=nhU~??6lGktNKJ>F{@7=>5HuKI$XtiAbE$Ws(QA1Kavq!;2 zMaaf$>82Q^C7F|)rfIL_;#s(cL7a1y4RZ?<*NWFntArM;+4|poEB~zoiFud2FRB2& zB3a@ZQR1ARo128bg=d#Wzp$PzxDn%Fo literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/iron_top.png b/src/main/resources/assets/ironchest/textures/blocks/iron_top.png new file mode 100755 index 0000000000000000000000000000000000000000..30efea4db7ec6109c23529a720c54f8fbfd446ee GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5ln4y) z32|-f>bv&*#q}32Z@zkc`|Z11Z{FT~{pQZQ_cva?y8Hgay$>JnfBbay+4GB!9zXc} z`Qeu@XYby-^7Pr6J9kgsymjgElXLeUoW6bM*wyPtE?+%->B|5A|98JOX9pV2nB?v5 zB2}9H#0bdYEbxddW?PSeGyc!^MFgZ zo3pRLMis^$MI{+Fr&y+vY&9p1r6)H1Yg}bLGtxcJP(Dv?>ADyup6`Z>W+p~%=YC@I z!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z%2yAjF;}# z{Q(L}mbgZgIOpf)rskC}I2WZRmZYXAlxLP?D7bt2281{Ai31f$ffNPjrgnPbV&Ok^(rG_tLmt<~flF14XWCd@uAJi6 zts&&0qtT(ty|0P2{z!cBqbaMn%_71B-~2ds-7n}As&g3o5L=Hktj zIk)8mdJ2_RtjOarn)6*+!RNEqv%SZA3)wW^26;tZ+Aa~LU*>Dke#GmUJj*98#%Go) zVMd~%D_oBTN%3B1Dcl@lvRLMCm)(oD&6i|iFRlKvM@_@{#NmdMcKt8zv-B{E%NtZ2 z<8NR7z_DW5Cp(#kpEA0{mo_EnOWeHwcAoPL4GE|9rA%8K=U5l9mc_^%;!rs?Ptqsk z+dL)rgxs)sn`er%m&$%no!zrXY;KY3ynDxQi?8}olocsvE4^)IIltSrnUWmkFKf7%-uO$?r{elF{r5}E*9!Q8_D literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/obsidian_side.png b/src/main/resources/assets/ironchest/textures/blocks/obsidian_side.png new file mode 100755 index 0000000000000000000000000000000000000000..dc8d227eb9c8e438cddddbc293bfbbcdb7d564b1 GIT binary patch literal 593 zcmV-X0004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00009 za7bBm000XT000XT0n*)m`~Uy|8FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X z4i^9b02*{fSaefwW^{L9a%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0004eNkl3j0)bSDgcvFYCT0f2z{KC-U-Q@&6&vF8%DOxIzFwcQ z);3Kuo6XLnh=?&pYn|u$X0s{F5)+xv=Y8MvQek-C8&f4X=R`*5hAgv>H?JrOSynzB z-W5WSF>>6$VS}pbs%k+b`ZV0u^~%}>NG5d@DY?eDSnYvx9?#416AuvSQU#Ho(|fPJ zqR{J~l3xBlfEg&{{o1)RkR|~ltuYpbk>XTkmI>^sx~?M$nYArgEv{+3_q(Q98&jae zPofAtu=MW$9S#O6^N-GLfia=;@EX3j$aBGtuftDqraohez~1x22VJppY8=Dnqyd1| zVNg5-Y{$dN?;K^9MNuf$BlZ1rF_dLPVis)KUi}JygPs;cS7B+Df?0$d)MdD|+w9d8 frRzF+QA&LSk)KHy<3b}!00000NkvXXu0mjfJ9hDl literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/obsidian_top.png b/src/main/resources/assets/ironchest/textures/blocks/obsidian_top.png new file mode 100755 index 0000000000000000000000000000000000000000..4f531cc5b6f6e57570eec1d2d7d06559661aee2a GIT binary patch literal 604 zcmV-i0;BzjP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00009 za7bBm000XT000XT0n*)m`~Uy|8FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X z4i^9b02*{fSaefwW^{L9a%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0004pNklSOA%=>9iGhg$F);D}e+7?iK&(Bzvh4HSd!MFh zn(1^pnM}4(M8sN~=XqI{o6V-KYo17!Wy3IFX?S=)sLm5adQRsCF4j7c!TTLh4K@bB z$y#wPd?%=?$jJBO&0A#QJ{CpIoj8VXjGCrh&u_tQc~JEzUrt{9`Z1$>rfu6)8Quu2 z%h@%QgWp?QaXIc^!PD_WbsO?QAR|{)01HCz*Y`0ET0G*PDB5<}b)8{AL?C*M1J45bDP46hOx7_4S6Fo+k-*%fF5l&A~v z32~jiVEUvv6R%vqa_QQ|i&rmPxN`o?#WN?)p15)Q#`Rm*4<0*s?DVm7m(LwPbNuj$ z!#D5Tyms^2&iy;qY+kc+!^(|2Hts*Nf7QlSvlh>qHhsD`Cy<+`}C2JNhUcG4f`eln&Eu6n%{{R2~V^-%r0lI`S$=lsU z^VIfM6(EPRz$3Dlfq`2Xgc%uT&5-~K&i8b243W4Td+wr8lY#(iK!;F_w{GhpAKl20 z|Mzd`_T?{4Zo=Ijdcxx$TGyx z)XLPt%FsmDz|_jXfbHGqP81Ef`6-!cl~4_ax<*DJhK5!~25=4KTTjLVH3))iNXyJg g%}dNpwJHHJ7);`g0+}i<03{hbUHx3vIVCg!0HN*r<^TWy literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/blocks/silver_side.png b/src/main/resources/assets/ironchest/textures/blocks/silver_side.png new file mode 100755 index 0000000000000000000000000000000000000000..d4df07738c55bf926f233ebfd1b0bd5ae8766fe2 GIT binary patch literal 608 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lqd@D z32~jiVEUvv6R%vqa_QQ|i&rmPxN`o?#WN?)p15)Q#`Rm*kDoby_{8CxcWxd$cJSKG zYiBQ=J$CxofujfZAK8EC_@UhgcWv9dZS$_p8+UBnv~$yj?Hkr@UAKDE>Qx(8tysTe z$(qHBS1($*Vde7m%NDI#xNzly`77rC|No!w?8|vT+ZmI*-Ca}1 z9Bz^P$UQL3oO9t6yMB$Qd)qQX7H_$>$SIqrCCqELV0FM zhJw4NZ$Nk>pEyvFDo9ZZP|7M9tb)PFz|dIN0EjF@3{9;}EvyVpbPY_c3=G)beeOij zkei>9nN|taV5nqKJWzum$cD7coYcI;+*GR)AcMgq-e5nE45bDP46hOx7_4S6Fo+k-*%fF5l&}f# z32~jiVETnC=PzEpaOv8`E7z}FyLs*Ut?TD5pF45(#EsiGZr-_h{LJyQm(CtLeeCdw z!>2EtK6vclfujfZAKCx^|NnlWnVo}?8-`Ablc`wlW_n(^j^XLCFe&S&X$SuEE2Xu;LiEBiObAE1a zYF-J0b5UwyNotBhd1gt5g1e`0KzJjcI8c!)NKpz<$|@PGg2BkZ&{)?1h%7@4O|48V ztPD+b4NR>J4A|a%?nKd$o1c=IRteQ$sB2^tVrXb(WB}JtzV&20P=g@IhP2F_)V##p cRI3sogTW-;@C3JJ7EqGG)78&qol`;+04ig{9{>OV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/gui/coppercontainer.png b/src/main/resources/assets/ironchest/textures/gui/coppercontainer.png new file mode 100755 index 0000000000000000000000000000000000000000..2fdb824efcb80fa10626b46874f548ffd7e92fcf GIT binary patch literal 3677 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/gui/diamondcontainer.png b/src/main/resources/assets/ironchest/textures/gui/diamondcontainer.png new file mode 100755 index 0000000000000000000000000000000000000000..b53f47299173ac9ea4e8c7f6271a880e41ad3909 GIT binary patch literal 3826 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 Hb$t3S1AP45 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/gui/goldcontainer.png b/src/main/resources/assets/ironchest/textures/gui/goldcontainer.png new file mode 100755 index 0000000000000000000000000000000000000000..27f506fa5e5c0a2523c2fc2d0fe96880babe607b GIT binary patch literal 4242 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 Aj{pDw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/gui/silvercontainer.png b/src/main/resources/assets/ironchest/textures/gui/silvercontainer.png new file mode 100755 index 0000000000000000000000000000000000000000..65179f2a98efe9dd2ec5767084150ef3f11fc6a5 GIT binary patch literal 3818 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/items/copperIronUpgrade.png b/src/main/resources/assets/ironchest/textures/items/copperIronUpgrade.png new file mode 100755 index 0000000000000000000000000000000000000000..7bb215937bcfe3c5e4820ec26540800a914e008f GIT binary patch literal 480 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5ln4*- z32_C|eG3-edh_<`^B3nIKDzMe@rhfvPu{+B;L_!Tm#^$Cw_lfMwd2(3?I%xNTU35@ zYTo*Tht5n+?dxva(;mBg=dP{w!OKg1=5O3IW7X>ED_2cgvUK9&CIA2bkL5aM1vHwm zB*-tA!Qt7BG!Q4r+ucQG4vQl@ki%Kv5n0T@z%2~Ij105pNB{-1JY5_^Brb=ZeJ#`= zAmSDn|DvfY$m{+8c@u?xw45bDP46hOx7_4S6Fo+k-*%fF5ln4*- z32_C|Gv~~F`r_$>#}97Zy>hQ6{hmIb)wy6B* z)Vy7Lcb%D>+SlE-r#*Jl)=gXMgO`{3tXjKj@v_B>mM)sRVD6mxbN>JT|1-}lA80gV zNswPKgTu2MX&_FLx4VnX92Q4*AcwQSBeIx*fm;}a85w5HkpK#2dAc};NL&s*`&y_$ zK*TLD{zX$)kk|YF^Ck-YZcm(R+&n?XLv~h_gQhNPPw}xj$J<*s>M;CD z%0xUkr|sG==HxS*4n_SwBo@w|(7^COFXsXhC%9DbQNdrV?VdeplA#~#L#$!sfc zHwbG2ZB;FCjVMV;EJ?LWE=mPb3`Pcq#<~WEx<*DJhGtfV=2oVbx(23J1_n=ES4z)+>ez|hdb!0-zw)bN6Vq11qZ;Z*_ygVhWM2JwP9y8>;15(WW2 zA+A6=;qu#aAAbT#2vR=uOk(HVJ70hAdGme!%Wu(_-b{M|(eHvL>4nJa0`PlBg3pY5l7qL^=$uSCgK^l}D7K^}jSS4p3>8f>=Y^vAP6CZqEpd$~Nl7e8wMs5Z1yT$~ z28PDE28OyuMj?h~R)*$Qrk1(}rd9?9Pc2e^qG-s?PsvQH#I0dU>RnJ6F?hQAxvX45bDP46hOx7_4S6Fo+k-*%fF5l<*7i z32_C|78Vx4!NGxnf&Tvf0RaI%K0dy_zFuBl%7>mw?7Zvl?(XL1cIWHwJ#W6dxVWr; z`7Qd=n@JBpJ32ac-20e&{hghiowc>KrKRQn|Npo2e>Ve~$XF8O7tG-B>_!@hljQC0 zBKan7YX^|SS>O>_%)r1c48n{Iv*t(u1yem;977~7hn~7A)gU0ymRKK>u~GEy|EX@= z&#Y%0-_yKNN`jYJwBTHIqlCNStb|$1gG3pEPT72pw$0Re{psG-uv>{eKMzK|wsGQ+ zm$58YI(Fml202YtuIsE^46Sq0WT#wVU%Tm^=TbKHV<)@2fEKEjxJHzuB$lLFB^RXv zDF!10Lt|Y7LtP`I5JNL7Lvt%rOI-s~D+7b47O6i`H00)|WTsW()-WaYE+|YHJYD@< J);T3K0RW!Umcal3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/items/goldDiamondUpgrade.png b/src/main/resources/assets/ironchest/textures/items/goldDiamondUpgrade.png new file mode 100755 index 0000000000000000000000000000000000000000..028e2d8b9153d7ee8ec3965fec826059501ff760 GIT binary patch literal 480 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5ln4*- z32_C|Drau&{Plm;&;K)j{GapVf6Mp(?ce|BeEpyQ_5aE)hB@^Npm7DsjJqJVC}oc2<;wrY>tw@v%C`+gms4F#Jm7NZ-+|&S|>J zL_9dB?b$W%Y%6a! z2x|guRV{IiC`m~yNwrEYN(E93Mh1q)x(0^2Mn)lqW>$vgR;HG^2Bua922U+gf1+r} b%}>cptHiBgO6pxu2s3!P`njxgN@xNArGu{V literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/items/ironGoldUpgrade.png b/src/main/resources/assets/ironchest/textures/items/ironGoldUpgrade.png new file mode 100755 index 0000000000000000000000000000000000000000..65cf6aee66a145641921297812d2a9320f0400ec GIT binary patch literal 526 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5l&B8y z32_C|M;9^t|KaiHv&)~)&fnkI{djBl{jL4?H};>NSbThH@#%^A$0rtVZX3M0V^B4F zUP1q)rzv|Gfhd1_1+}tm5W1qyv(-#-- zK6rVXz@=@1XV-F_S<8859oLEFEGL(lsUe{DK)Ap4~_Tagw~< zT{QM?*t!YG;VkfoEM{Qf76xHPhFNnYfPy8SE{-7*mqX9K7HU!uXiK!??G3rmSJ8K6 z*MI9APv?qygAZ@c9hkwb!xN~{@wi$4foIi|-41h%CO$pH+2G`5^>SU^)D`EhT7`?> z7Tx~)F@MzSU5>ZEO7n!+KFaLbzEFD4GRu~ye>oXnFXvk^sWKs0`pwPf;^n_N^E(=+ z07H~PwZt`|BqgyV)hf9t6-Y4{85kPt8W`#t8HE^{Ss9vJnOf=^m|7VaJhe#uiJ~Dl aKP5A*61Rpasdqu~!QkoY=d#Wzp$PzYfzD|F literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/items/silverGoldUpgrade.png b/src/main/resources/assets/ironchest/textures/items/silverGoldUpgrade.png new file mode 100755 index 0000000000000000000000000000000000000000..d3cad2e203a47884b9dbe28867f40bace8dc5e03 GIT binary patch literal 526 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5l&B8y z32_C|M;9^t|KaiHv&)~)&fnkI{djBl{jL4?H};>NSbThH@#%^A$0rtVZX3M0V=!sX z#P$hoPcLaay{NH$-}aU3SKdFNaPNfty%P#6)-UhtZkxSu){XrVH}^~2*e5Y{_LR>4 zj?3EwE^QM$yO!(BTFx`;xK1o*Ik}wW#4?uu|Nk%fIq5FYdd89R^j5e zMYsQc%pdi7m*efP(mWxyk1~6P6{Eo&c zzz}6nEpd$~Nl7e8wMs5Z1yT$~28PDE28OyuMj?h~R)*$Qrk1(}rd9?9Pc2e^qG-s? aPsvQH#I0dU>RnKLFnGH9xvX2wj!d!G)`~7)ld^nPl>BGI{g5nB@6CEgrb=xbNP>IrrTM{|P6b)7%$MKBue4 zU-Z35oP17Kz8#pjP9px*{B&^zgcT)p2*B^%4Q5ui#6SWkpVN=uEJw|~#>*(~Z8EdE zCG0^8ihG*?JepfHD$0jDS88m4`ByJ=&1)j93qdQp4wY)1?e{NH?FL#Ygp>eAz9EQ7 z$%lmprn%dw@h1qWxI+M_rgx`GE1Hd>;JPO4kufr_KN198L)ee&umOZ6**SV>k})Y+ zcv9x`Nt}1j1}m@u0;O1*JvYg0Duw@RjknW20HNPRYmE@%c7m9cq=yp##N(0gvsRO8 zryb3}Z$)dM)a?X1RD^z)nC#N>Bi|F&5M|kk6a<~Y7K9}k9!r=+!F9=|QdCZBtbgA( z#h<=f{45m34FZ6YCn$M!05ZvON*<)glVp;kz56;NiJKM#!1Jj|-G9@tx7`-HcfR;L gt#*eWr&ksH1?X72C}dej+5i9m07*qoM6N<$f(dfxvH$=8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/items/woodIronUpgrade.png b/src/main/resources/assets/ironchest/textures/items/woodIronUpgrade.png new file mode 100755 index 0000000000000000000000000000000000000000..e6e62bb956036eeb0da647c08d792685ea909ff4 GIT binary patch literal 540 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/model/goldchest.png b/src/main/resources/assets/ironchest/textures/model/goldchest.png new file mode 100755 index 0000000000000000000000000000000000000000..7f18468999d6e2117c54cee4c7d1b8f686622ac3 GIT binary patch literal 4284 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 bUl5@0bA_lnJ1M?>DS(!mo@zDB_SOFZXP5iB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ironchest/textures/model/obsidianchest.png b/src/main/resources/assets/ironchest/textures/model/obsidianchest.png new file mode 100755 index 0000000000000000000000000000000000000000..4f0657ab3f04f279530e53f0373385f00c837611 GIT binary patch literal 2042 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/itemsheet.xcf b/src/main/resources/itemsheet.xcf new file mode 100755 index 0000000000000000000000000000000000000000..47073b83da4fc9dcf7917878855b85d4ab06cdf2 GIT binary patch literal 11427 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 d10u))_heb3sNH6!s`NokINW{{Zn Date: Wed, 24 Sep 2014 22:38:49 +1000 Subject: [PATCH 41/80] Added a copy of the mappings used in updating --- 18 Mappings.txt | 152 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 18 Mappings.txt diff --git a/18 Mappings.txt b/18 Mappings.txt new file mode 100644 index 0000000..d341488 --- /dev/null +++ b/18 Mappings.txt @@ -0,0 +1,152 @@ +-—Block—- +func_180660_a - getItemDropped +func_180654_a - setBlockBoundsBasedOnState +func_180640_a - getCollisionBoundingBoxFromPool +func_180646_a - getSelectedBoundingBoxFromPool +func_180639_a - onBlockActivated +func_180649_a - onBlockClicked +func_176196_c - canPlaceBlockAt +func_176204_a - onNeighborBlockChange +func_180650_b - updateTick +func_180655_c - randomDisplayTick +func_180644_h - getRenderColor +func_180662_a - colorMultiplier +func_175671_l - getBlockLightValue +func_180659_g - getMapColor +func_180641_l - getComparatorInputOverride +func_176222_j - getDamageValue +func_176207_c - getMixedBrightnessForBlock +func_176225_a - shouldSideBeRendered +func_176195_g - getBlockHardness +func_176209_a - canCollideCheck +func_180638_a - addCollisionBoxesToList +func_180665_b - getItem +func_176208_a - onBlockHarvested +func_180653_a - dropBlockAsItemWithChance +func_180657_a - harvestBlock +func_180643_i - createStackedBlock +func_176213_c - onBlockAdded +func_180633_a - onBlockPlacedBy +func_180651_a - damageDropped +func_180663_b - breakBlock + +—Item— +func_180614_a - onItemUse + +—IBlockAccess— +func_180494_b - getBiomeGenForCoords +func_175625_s - getTileEntity + +—World—- +func_175698_g - setBlockToAir +func_175656_a - setBlock +func_175718_b - playAuxSFX +func_180498_a - playAuxSFXAtEntity +func_175623_d - isAirBlock +func_175690_a - setTileEntity +func_175689_h - markBlockForUpdate +func_175641_c - addBlockEvent + +—RegistryNamespaced— +func_177775_a - addObject + +—IInventory—- +func_174889_b - openInventory +func_174886_c - closeInventory + +—————————— +ESTIMATES +—————————— + +—IBlockAccess— +func_180495_p - getBlockState + +—Block—- +func_180661_e - createBlockState +func_176194_O - getBlockState +func_180632_j - setDefaultBlockState +func_176223_P - getDefaultBlockState +func_176203_a - getBlockStateFromMeta +func_176201_c - getMetaFromBlockState +func_176215_a - registerBlock +func_176219_a - registerBlock + +field_176227_L - blockState +field_176228_M - defaultBlockState + +—BlockDirt— +field_176386_a - VARIANT_PROP +field_176385_b - SNOWY_PROP + +—BlockDirt.DirtType— +func_176925_a - getMetadata + +field_176931_e - metadata + +—IBlockState— +func_177227_a - getPropertyNames +func_177229_b - getValue +func_177226_a - setProperty +func_177228_b - getProperties + +—BlockState— +func_177622_c - getBlock +func_177623_d - getProperties +func_177620_e - getAllowedValues +func_177619_a - getValidStates +func_177621_b - getBaseState + +field_177627_c - block +field_177625_e - validStates + +—BlockStateBase— +func_177232_a - validatePropertyValue + +—BlockState.StateImplementation— +func_177230_c - getBlock + +field_177239_a - block +field_177237_b - properties + +—PropertyHelper— +field_177704_a - propertyClass +field_177703_b - name + +—IProperty— +func_177701_a - getName +func_177700_c - getAllowedValues +func_177699_b - getPropertyClass + +—TileEntity— +func_174877_v - getPos + +field_174879_c - pos + +—MapPopulator— +func_179400_b - populateLinkedHashMap +func_179399_a - populateLinkedHashMap + +—Cartesian— + +func_179319_b - createArray +func_179322_b - toArray + +—Cartestian.GetList— +func_179324_a - toList + +—RegistryNamespaced— +func_177774_c - getKeyForObject + +—Vec3i— +func_177958_n - getX +func_177956_o - getY +func_177952_p - getZ +func_177954_c - getDistanceSq +func_177951_i - getDistanceSq + +field_177962_a - x +field_177960_b - y +field_177961_c - z + +—BlockPos— +field_177992_a - ORIGIN \ No newline at end of file From 5e482716cdc3b328379cd16c36ddd20cbe7b3ccc Mon Sep 17 00:00:00 2001 From: Adubbz Date: Wed, 24 Sep 2014 23:46:42 +1000 Subject: [PATCH 42/80] The game now runs, did some initial work with block states --- 18 Mappings.txt | 5 +- .../cpw/mods/ironchest/BlockIronChest.java | 87 ++++++++++--------- .../java/cpw/mods/ironchest/IronChest.java | 10 +-- .../cpw/mods/ironchest/IronChestType.java | 10 ++- .../mods/ironchest/TileEntityIronChest.java | 2 +- 5 files changed, 65 insertions(+), 49 deletions(-) diff --git a/18 Mappings.txt b/18 Mappings.txt index d341488..cf0301c 100644 --- a/18 Mappings.txt +++ b/18 Mappings.txt @@ -149,4 +149,7 @@ field_177960_b - y field_177961_c - z —BlockPos— -field_177992_a - ORIGIN \ No newline at end of file +field_177992_a - ORIGIN + +—IStringSerializable— +func_176610_l - getID \ No newline at end of file diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index ff79cf7..ec9aa0c 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -10,41 +10,28 @@ ******************************************************************************/ package cpw.mods.ironchest; -import java.util.ArrayList; -import java.util.List; import java.util.Random; import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import com.google.common.collect.Lists; - -public class BlockIronChest extends BlockContainer { +public class BlockIronChest extends /*BlockContainer*/Block +{ + public static final PropertyEnum VARIANT_PROP = PropertyEnum.func_177709_a("variant", IronChestType.class); + private Random random; public BlockIronChest() { super(Material.iron); + + this.setDefaultBlockState(this.blockState.getBaseState().setProperty(VARIANT_PROP, IronChestType.IRON)); + setUnlocalizedName("IronChest"); setHardness(3.0F); setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); @@ -63,18 +50,36 @@ public class BlockIronChest extends BlockContainer { { return false; } + + @Override + public IBlockState getBlockStateFromMeta(int meta) + { + return this.getDefaultBlockState().setProperty(VARIANT_PROP, IronChestType.values()[IronChestType.validateMeta(meta)]); + } @Override + public int getMetaFromBlockState(IBlockState blockState) + { + return IronChestType.validateMeta(((IronChestType)blockState.getValue(VARIANT_PROP)).ordinal()); + } + + @Override + protected BlockState createBlockState() + { + return new BlockState(this, new IProperty[] { VARIANT_PROP }); + } + + /*@Override public int getRenderType() { return 22; - } + }*/ - @Override + /*@Override public TileEntity createNewTileEntity(World world, int metadata) { return IronChestType.makeEntity(metadata); - } + }*/ /*@Override public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) @@ -86,7 +91,7 @@ public class BlockIronChest extends BlockContainer { return items; }*/ - @Override + /*@Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState blockState, EntityPlayer player, EnumFacing direction, float p_180639_6_, float p_180639_7_, float p_180639_8_) { TileEntity te = world.getTileEntity(pos); @@ -101,23 +106,23 @@ public class BlockIronChest extends BlockContainer { return true; }*/ - if (world.isRemote) + /*if (world.isRemote) { return true; } player.openGui(IronChest.instance, ((TileEntityIronChest) te).getType().ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); return true; - } + }*/ - @Override + /*@Override public void onBlockAdded(World world, BlockPos pos, IBlockState blockState) { super.onBlockAdded(world, pos, blockState); world.markBlockForUpdate(pos); - } + }*/ - @Override + /*@Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState blockState, EntityLivingBase entityliving, ItemStack itemStack) { byte chestFacing = 0; @@ -146,7 +151,7 @@ public class BlockIronChest extends BlockContainer { teic.setFacing(chestFacing); world.markBlockForUpdate(pos); } - } + }*/ /*@Override public int damageDropped(int i) @@ -154,7 +159,7 @@ public class BlockIronChest extends BlockContainer { return i; }*/ - @Override + /*@Override public void breakBlock(World world, BlockPos pos, IBlockState blockState) { TileEntityIronChest tileentitychest = (TileEntityIronChest) world.getTileEntity(pos); @@ -199,9 +204,9 @@ public class BlockIronChest extends BlockContainer { world.spawnEntityInWorld(entityitem); } } - } + }*/ - @Override + /*@Override @SuppressWarnings({ "rawtypes", "unchecked" }) @SideOnly(Side.CLIENT) public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) @@ -213,7 +218,7 @@ public class BlockIronChest extends BlockContainer { par3List.add(new ItemStack(this, 1, type.ordinal())); } } - } + }*/ /*@Override public float getExplosionResistance(Entity par1Entity, World world, int x, int y, int z, double explosionX, double explosionY, double explosionZ) @@ -230,12 +235,12 @@ public class BlockIronChest extends BlockContainer { return super.getExplosionResistance(par1Entity, world, x, y, z, explosionX, explosionY, explosionZ); }*/ - @Override + /*@Override public boolean hasComparatorInputOverride() { return true; - } + }*/ - @Override + /*@Override public int getComparatorInputOverride(World world, BlockPos pos) { TileEntity te = world.getTileEntity(pos); @@ -244,7 +249,7 @@ public class BlockIronChest extends BlockContainer { return Container.calcRedstoneFromInventory((IInventory)te); } return 0; - } + }*/ /*private static final ForgeDirection[] validRotationAxes = new ForgeDirection[] { UP, DOWN }; @Override diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 36eb2a0..eed6fe1 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -20,7 +20,7 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; -@Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:Forge@[10.10,);required-after:FML@[7.2,)") +@Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:FML@[7.2,)") public class IronChest { public static BlockIronChest ironChestBlock; @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.CommonProxy") @@ -53,11 +53,11 @@ public class IronChest { cfg.save(); }*/ ironChestBlock = new BlockIronChest(); - GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); - PacketHandler.INSTANCE.ordinal(); + GameRegistry.registerBlock(ironChestBlock,/* ItemIronChest.class,*/ "BlockIronChest"); + //PacketHandler.INSTANCE.ordinal(); } - @EventHandler + /*@EventHandler public void load(FMLInitializationEvent evt) { for (IronChestType typ : IronChestType.values()) @@ -74,5 +74,5 @@ public class IronChest { // { // MinecraftForge.EVENT_BUS.register(new OcelotsSitOnChestsHandler()); // } - } + }*/ } diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index bf589ac..4317a0b 100755 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -20,9 +20,11 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagByte; +import net.minecraft.util.IStringSerializable; import net.minecraftforge.fml.common.registry.GameRegistry; -public enum IronChestType { +public enum IronChestType implements IStringSerializable +{ IRON(54, 9, true, "Iron Chest", "ironchest.png", 0, Arrays.asList("ingotIron", "ingotRefinedIron"), TileEntityIronChest.class, "mmmmPmmmm", "mGmG3GmGm"), GOLD(81, 9, true, "Gold Chest", "goldchest.png", 1, Arrays.asList("ingotGold"), TileEntityGoldChest.class, "mmmmPmmmm", "mGmG4GmGm"), DIAMOND(108, 12, true, "Diamond Chest", "diamondchest.png", 2, Arrays.asList("gemDiamond"), TileEntityDiamondChest.class, "GGGmPmGGG", "GGGG4Gmmm"), @@ -63,6 +65,12 @@ public enum IronChestType { this.matList = new ArrayList(); matList.addAll(mats); } + + @Override + public String getID() + { + return name().toLowerCase(); + } public String getModelTexture() { diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index f257fdd..4104c4f 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -387,7 +387,7 @@ public class TileEntityIronChest extends TileEntity implements IUpdatePlayerList int newSize = newEntity.chestContents.length; System.arraycopy(chestContents, 0, newEntity.chestContents, 0, Math.min(newSize, chestContents.length)); BlockIronChest block = IronChest.ironChestBlock; - block.dropContent(newSize, this, this.worldObj, pos); + //block.dropContent(newSize, this, this.worldObj, pos); newEntity.setFacing(facing); newEntity.sortTopStacks(); newEntity.ticksSinceSync = -1; From 61d85bad4d04fcd6954139f93641d4d1be53f17f Mon Sep 17 00:00:00 2001 From: "Jean-Marie S." Date: Thu, 25 Sep 2014 00:08:45 +0200 Subject: [PATCH 43/80] Update fr_FR.lang --- .../resources/assets/ironchest/lang/fr_FR.lang | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/resources/assets/ironchest/lang/fr_FR.lang b/src/main/resources/assets/ironchest/lang/fr_FR.lang index 36d7f9d..c1714d6 100644 --- a/src/main/resources/assets/ironchest/lang/fr_FR.lang +++ b/src/main/resources/assets/ironchest/lang/fr_FR.lang @@ -1,12 +1,12 @@ #fr_FR translated by robin4002 -tile.ironchest:IRON.name=Coffre en fer -tile.ironchest:GOLD.name=Coffre en or -tile.ironchest:DIAMOND.name=Coffre en diamant -tile.ironchest:COPPER.name=Coffre en cuivre -tile.ironchest:SILVER.name=Coffre en argent -tile.ironchest:CRYSTAL.name=Coffre en cristal -tile.ironchest:OBSIDIAN.name=Coffre en obsidian +tile.ironchest:IRON.name=Coffre en Fer +tile.ironchest:GOLD.name=Coffre en Or +tile.ironchest:DIAMOND.name=Coffre en Diamant +tile.ironchest:COPPER.name=Coffre en Cuivre +tile.ironchest:SILVER.name=Coffre en Argent +tile.ironchest:CRYSTAL.name=Coffre en Cristal +tile.ironchest:OBSIDIAN.name=Coffre en Obsidienne item.ironchest:IRONGOLD.name=Amélioration de coffre en fer à or item.ironchest:GOLDDIAMOND.name=Amélioration de coffre en or à diamant @@ -16,4 +16,4 @@ item.ironchest:COPPERIRON.name=Amélioration de coffre en cuivre à fer item.ironchest:DIAMONDCRYSTAL.name=Amélioration de coffre en diamant à crital item.ironchest:WOODIRON.name=Amélioration de coffre en bois à fer item.ironchest:WOODCOPPER.name=Amélioration de coffre en bois à cuivre -item.ironchest:DIAMONDOBSIDIAN.name=Amélioration de coffre en diamant à obsidian +item.ironchest:DIAMONDOBSIDIAN.name=Amélioration de coffre en diamant à obsidienne From 5ee76dbe221cd439c52cedd0179fd7325f9b1c4f Mon Sep 17 00:00:00 2001 From: Adubbz Date: Thu, 25 Sep 2014 10:27:36 +1000 Subject: [PATCH 44/80] More mappings and a small little fix --- 18 Mappings.txt | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/18 Mappings.txt b/18 Mappings.txt index cf0301c..c5037b5 100644 --- a/18 Mappings.txt +++ b/18 Mappings.txt @@ -29,6 +29,8 @@ func_176213_c - onBlockAdded func_180633_a - onBlockPlacedBy func_180651_a - damageDropped func_180663_b - breakBlock +func_180656_a - isProvidingWeakPower +func_180642_a - onBlockPlaced —Item— func_180614_a - onItemUse @@ -46,6 +48,8 @@ func_175623_d - isAirBlock func_175690_a - setTileEntity func_175689_h - markBlockForUpdate func_175641_c - addBlockEvent +func_180501_a - setBlock +func_175726_f - getChunkFromBlockCoords —RegistryNamespaced— func_177775_a - addObject @@ -61,6 +65,12 @@ ESTIMATES —IBlockAccess— func_180495_p - getBlockState +—World— +func_175701_a - isPosInBoundaries + +—Chunk— +func_177435_g - getBlockState + —Block—- func_180661_e - createBlockState func_176194_O - getBlockState @@ -152,4 +162,15 @@ field_177961_c - z field_177992_a - ORIGIN —IStringSerializable— -func_176610_l - getID \ No newline at end of file +func_176610_l - getID + +—————————— +FIXES +—————————— +—GameData— + + static Block findBlock(String modId, String name) + { + ResourceLocation key = new ResourceLocation(modId + ":" + name); + return getMain().iBlockRegistry.containsKey(key) ? getMain().iBlockRegistry.getObject(key) : null; + } \ No newline at end of file From a015481d3d8f1b1a46b073f850dcbb98d056ea22 Mon Sep 17 00:00:00 2001 From: Adubbz Date: Thu, 25 Sep 2014 11:54:30 +1000 Subject: [PATCH 45/80] Iron chests can now be placed (with hackery) --- 18 Mappings.txt | 54 +++++++++++++++++++ .../cpw/mods/ironchest/BlockIronChest.java | 44 +++++++-------- .../java/cpw/mods/ironchest/IronChest.java | 4 +- .../cpw/mods/ironchest/ItemIronChest.java | 14 ++--- .../ironchest/blockstates/BlockIronChest.json | 5 ++ .../models/block/BlockIronChest.json | 6 +++ .../ironchest/models/item/BlockIronChest.json | 10 ++++ 7 files changed, 109 insertions(+), 28 deletions(-) create mode 100755 src/main/resources/assets/ironchest/blockstates/BlockIronChest.json create mode 100755 src/main/resources/assets/ironchest/models/block/BlockIronChest.json create mode 100755 src/main/resources/assets/ironchest/models/item/BlockIronChest.json diff --git a/18 Mappings.txt b/18 Mappings.txt index c5037b5..69c082e 100644 --- a/18 Mappings.txt +++ b/18 Mappings.txt @@ -58,6 +58,9 @@ func_177775_a - addObject func_174889_b - openInventory func_174886_c - closeInventory +—RenderItem— +func_180451_a - renderEffect + —————————— ESTIMATES —————————— @@ -164,6 +167,11 @@ field_177992_a - ORIGIN —IStringSerializable— func_176610_l - getID +—ModelBakery— +func_177580_d - getModelLocation +func_177584_b - getBlockStateLocation +func_177586_a - getModelBlockDefinition + —————————— FIXES —————————— @@ -173,4 +181,50 @@ FIXES { ResourceLocation key = new ResourceLocation(modId + ":" + name); return getMain().iBlockRegistry.containsKey(key) ? getMain().iBlockRegistry.getObject(key) : null; + } + + private int registerBlock(Block block, String name, int idHint) + { + // handle ItemBlock-before-Block registrations + ItemBlock itemBlock = null; + + for (Item item : iItemRegistry.typeSafeIterable()) // find matching ItemBlock + { + if (item instanceof ItemBlock && ((ItemBlock) item).blockInstance == block) + { + itemBlock = (ItemBlock) item; + break; + } + } + + if (itemBlock != null) // has ItemBlock, adjust id and clear the slot already occupied by the corresponding item + { + idHint = iItemRegistry.getId(itemBlock); + FMLLog.fine("Found matching ItemBlock %s for Block %s at id %d", itemBlock, block, idHint); + freeSlot(idHint, block); // temporarily free the slot occupied by the Item for the block registration + } + + // add + int blockId = iBlockRegistry.add(idHint, name, block, availabilityMap); + + if (itemBlock != null) // verify + { + if (blockId != idHint) throw new IllegalStateException(String.format("Block at itemblock id %d insertion failed, got id %d.", idHint, blockId)); + verifyItemBlockName(itemBlock); + } + + //Hackery added by me which probably shouldn't be done + Iterator iterator1 = block.getBlockState().getValidStates().iterator(); + + while (iterator1.hasNext()) + { + IBlockState iblockstate = (IBlockState)iterator1.next(); + int i = blockRegistry.getIDForObject(block) << 4 | block.getMetaFromBlockState(iblockstate); + Block.field_176229_d.func_148746_a(iblockstate, i); + } + //End hackery + + useSlot(blockId); + ((RegistryDelegate.Delegate) block.delegate).setName(name); + return blockId; } \ No newline at end of file diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index ec9aa0c..e333f28 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -10,6 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest; +import java.util.List; import java.util.Random; import net.minecraft.block.Block; @@ -19,12 +20,15 @@ import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; public class BlockIronChest extends /*BlockContainer*/Block { public static final PropertyEnum VARIANT_PROP = PropertyEnum.func_177709_a("variant", IronChestType.class); - - private Random random; public BlockIronChest() { @@ -32,11 +36,10 @@ public class BlockIronChest extends /*BlockContainer*/Block this.setDefaultBlockState(this.blockState.getBaseState().setProperty(VARIANT_PROP, IronChestType.IRON)); - setUnlocalizedName("IronChest"); - setHardness(3.0F); - setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); - random = new Random(); - setCreativeTab(CreativeTabs.tabDecorations); + //this.setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); + this.setHardness(3.0F); + this.setUnlocalizedName("IronChest"); + this.setCreativeTab(CreativeTabs.tabDecorations); } @Override @@ -51,6 +54,19 @@ public class BlockIronChest extends /*BlockContainer*/Block return false; } + /*@Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) + { + for (IronChestType type : IronChestType.values()) + { + if (type.isValidForCreativeMode()) + { + list.add(new ItemStack(this, 1, type.ordinal())); + } + } + }*/ + @Override public IBlockState getBlockStateFromMeta(int meta) { @@ -206,20 +222,6 @@ public class BlockIronChest extends /*BlockContainer*/Block } }*/ - /*@Override - @SuppressWarnings({ "rawtypes", "unchecked" }) - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) - { - for (IronChestType type : IronChestType.values()) - { - if (type.isValidForCreativeMode()) - { - par3List.add(new ItemStack(this, 1, type.ordinal())); - } - } - }*/ - /*@Override public float getExplosionResistance(Entity par1Entity, World world, int x, int y, int z, double explosionX, double explosionY, double explosionZ) { diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index eed6fe1..c1582d8 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -10,7 +10,9 @@ ******************************************************************************/ package cpw.mods.ironchest; +import net.minecraft.block.Block; import net.minecraft.init.Blocks; +import net.minecraft.item.Item; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; @@ -53,7 +55,7 @@ public class IronChest { cfg.save(); }*/ ironChestBlock = new BlockIronChest(); - GameRegistry.registerBlock(ironChestBlock,/* ItemIronChest.class,*/ "BlockIronChest"); + GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); //PacketHandler.INSTANCE.ordinal(); } diff --git a/src/main/java/cpw/mods/ironchest/ItemIronChest.java b/src/main/java/cpw/mods/ironchest/ItemIronChest.java index fffef30..79d25ee 100755 --- a/src/main/java/cpw/mods/ironchest/ItemIronChest.java +++ b/src/main/java/cpw/mods/ironchest/ItemIronChest.java @@ -14,23 +14,25 @@ import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -public class ItemIronChest extends ItemBlock { - +public class ItemIronChest extends ItemBlock +{ public ItemIronChest(Block block) { super(block); - setHasSubtypes(true); + + this.setMaxDurability(0); + this.setHasSubtypes(true); } @Override - public int getMetadata(int i) + public int getMetadata(int meta) { - return IronChestType.validateMeta(i); + return IronChestType.validateMeta(meta); } @Override public String getUnlocalizedName(ItemStack itemstack) { - return "tile.ironchest:"+IronChestType.values()[itemstack.getMetadata()].name(); + return "tile.ironchest:" + IronChestType.values()[itemstack.getMetadata()].name(); } } diff --git a/src/main/resources/assets/ironchest/blockstates/BlockIronChest.json b/src/main/resources/assets/ironchest/blockstates/BlockIronChest.json new file mode 100755 index 0000000..5b108aa --- /dev/null +++ b/src/main/resources/assets/ironchest/blockstates/BlockIronChest.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "ironchest:BlockIronChest" } + } +} diff --git a/src/main/resources/assets/ironchest/models/block/BlockIronChest.json b/src/main/resources/assets/ironchest/models/block/BlockIronChest.json new file mode 100755 index 0000000..8d6a8b4 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/block/BlockIronChest.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "blocks/clay" + } +} diff --git a/src/main/resources/assets/ironchest/models/item/BlockIronChest.json b/src/main/resources/assets/ironchest/models/item/BlockIronChest.json new file mode 100755 index 0000000..d055f0b --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/BlockIronChest.json @@ -0,0 +1,10 @@ +{ + "parent": "ironchest:block/BlockIronChest", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} From 9bdaeb6ed5f964b15e824c9efd27610d5c36abf2 Mon Sep 17 00:00:00 2001 From: Adubbz Date: Thu, 25 Sep 2014 12:40:29 +1000 Subject: [PATCH 46/80] Uncommented the code for chest tile entities... Apparently everything works... --- 18 Mappings.txt | 3 + .../cpw/mods/ironchest/BlockIronChest.java | 76 +++++++++---------- .../java/cpw/mods/ironchest/IronChest.java | 33 ++------ .../mods/ironchest/client/ClientProxy.java | 7 +- 4 files changed, 53 insertions(+), 66 deletions(-) diff --git a/18 Mappings.txt b/18 Mappings.txt index 69c082e..276afc3 100644 --- a/18 Mappings.txt +++ b/18 Mappings.txt @@ -172,6 +172,9 @@ func_177580_d - getModelLocation func_177584_b - getBlockStateLocation func_177586_a - getModelBlockDefinition +—Minecraft— +field_175617_aL - modelManager + —————————— FIXES —————————— diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index e333f28..358e2e2 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -10,23 +10,21 @@ ******************************************************************************/ package cpw.mods.ironchest; -import java.util.List; -import java.util.Random; - import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; -public class BlockIronChest extends /*BlockContainer*/Block +public class BlockIronChest extends BlockContainer { public static final PropertyEnum VARIANT_PROP = PropertyEnum.func_177709_a("variant", IronChestType.class); @@ -54,6 +52,36 @@ public class BlockIronChest extends /*BlockContainer*/Block return false; } + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState blockState, EntityPlayer player, EnumFacing direction, float p_180639_6_, float p_180639_7_, float p_180639_8_) + { + TileEntity te = world.getTileEntity(pos); + + if (te == null || !(te instanceof TileEntityIronChest)) + { + return true; + } + + /*if (world.isSideSolid(i, j + 1, k, ForgeDirection.DOWN)) + { + return true; + }*/ + + if (world.isRemote) + { + return true; + } + + player.openGui(IronChest.instance, ((TileEntityIronChest) te).getType().ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int metadata) + { + return IronChestType.makeEntity(metadata); + } + /*@Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) @@ -91,12 +119,6 @@ public class BlockIronChest extends /*BlockContainer*/Block return 22; }*/ - /*@Override - public TileEntity createNewTileEntity(World world, int metadata) - { - return IronChestType.makeEntity(metadata); - }*/ - /*@Override public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { @@ -106,30 +128,6 @@ public class BlockIronChest extends /*BlockContainer*/Block items.add(stack); return items; }*/ - - /*@Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState blockState, EntityPlayer player, EnumFacing direction, float p_180639_6_, float p_180639_7_, float p_180639_8_) - { - TileEntity te = world.getTileEntity(pos); - - if (te == null || !(te instanceof TileEntityIronChest)) - { - return true; - } - - /*if (world.isSideSolid(i, j + 1, k, ForgeDirection.DOWN)) - { - return true; - }*/ - - /*if (world.isRemote) - { - return true; - } - - player.openGui(IronChest.instance, ((TileEntityIronChest) te).getType().ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); - return true; - }*/ /*@Override public void onBlockAdded(World world, BlockPos pos, IBlockState blockState) diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index c1582d8..286a074 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -29,52 +29,35 @@ public class IronChest { public static CommonProxy proxy; @Instance("IronChest") public static IronChest instance; - public static boolean CACHE_RENDER = true; - public static boolean OCELOTS_SITONCHESTS = true; @EventHandler public void preInit(FMLPreInitializationEvent event) { Version.init(event.getVersionProperties()); event.getModMetadata().version = Version.fullVersionString(); - /*TODO Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); - try - { - cfg.load(); - ChestChangerType.buildItems(cfg); - CACHE_RENDER = cfg.get(Configuration.CATEGORY_GENERAL, "cacheRenderingInformation", true).getBoolean(true); - OCELOTS_SITONCHESTS = cfg.get(Configuration.CATEGORY_GENERAL, "ocelotsSitOnChests", true).getBoolean(true); - } - catch (Exception e) - { - FMLLog.log(Level.ERROR, e, "IronChest has a problem loading its configuration"); - } - finally - { - if (cfg.hasChanged()) - cfg.save(); - }*/ + + //ChestChangerType.buildItems(cfg); ironChestBlock = new BlockIronChest(); GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); - //PacketHandler.INSTANCE.ordinal(); + PacketHandler.INSTANCE.ordinal(); } - /*@EventHandler + @EventHandler public void load(FMLInitializationEvent evt) { for (IronChestType typ : IronChestType.values()) { - GameRegistry.registerTileEntityWithAlternatives(typ.clazz, "IronChest."+typ.name(), typ.name()); + GameRegistry.registerTileEntityWithAlternatives(typ.clazz, "IronChest." + typ.name(), typ.name()); proxy.registerTileEntitySpecialRenderer(typ); } //OreDictionary.registerOre("chestWood", Blocks.chest); - IronChestType.registerBlocksAndRecipes(ironChestBlock); - ChestChangerType.generateRecipes(); + //IronChestType.registerBlocksAndRecipes(ironChestBlock); + //ChestChangerType.generateRecipes(); NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy); proxy.registerRenderInformation(); // if (OCELOTS_SITONCHESTS) // { // MinecraftForge.EVENT_BUS.register(new OcelotsSitOnChestsHandler()); // } - }*/ + } } diff --git a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java index c6af7a6..63cb7de 100755 --- a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -10,7 +10,9 @@ ******************************************************************************/ package cpw.mods.ironchest.client; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.tileentity.TileEntityRendererChestHelper; +import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; @@ -21,10 +23,11 @@ import cpw.mods.ironchest.CommonProxy; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; -public class ClientProxy extends CommonProxy { +public class ClientProxy extends CommonProxy +{ @Override public void registerRenderInformation() - { + { //TileEntityRendererChestHelper.instance = new IronChestRenderHelper(); } From de517482438ff8cf00ccc5b8fb49b8373196f5d2 Mon Sep 17 00:00:00 2001 From: Adubbz Date: Thu, 25 Sep 2014 20:08:22 +1000 Subject: [PATCH 47/80] Attempted to get the upgrade items working, they are rendering as blocks for some reason... --- 18 Mappings.txt | 43 +++++++ .../cpw/mods/ironchest/BlockIronChest.java | 31 +++-- .../java/cpw/mods/ironchest/IronChest.java | 2 +- .../cpw/mods/ironchest/IronChestType.java | 24 ---- .../cpw/mods/ironchest/ItemChestChanger.java | 12 +- .../ironchest/TileEntityDiamondChest.java | 3 +- .../mods/ironchest/TileEntityIronChest.java | 108 +++++++++++------- .../models/item/copperIronUpgrade.json | 18 +++ .../models/item/copperSilverUpgrade.json | 18 +++ .../models/item/diamondCrystalUpgrade.json | 18 +++ .../models/item/diamondObsidianUpgrade.json | 18 +++ .../models/item/goldDiamondUpgrade.json | 18 +++ .../models/item/ironGoldUpgrade.json | 18 +++ .../models/item/silverGoldUpgrade.json | 18 +++ .../models/item/woodCopperUpgrade.json | 18 +++ .../models/item/woodIronUpgrade.json | 18 +++ 16 files changed, 301 insertions(+), 84 deletions(-) create mode 100644 src/main/resources/assets/ironchest/models/item/copperIronUpgrade.json create mode 100755 src/main/resources/assets/ironchest/models/item/copperSilverUpgrade.json create mode 100644 src/main/resources/assets/ironchest/models/item/diamondCrystalUpgrade.json create mode 100644 src/main/resources/assets/ironchest/models/item/diamondObsidianUpgrade.json create mode 100755 src/main/resources/assets/ironchest/models/item/goldDiamondUpgrade.json create mode 100755 src/main/resources/assets/ironchest/models/item/ironGoldUpgrade.json create mode 100755 src/main/resources/assets/ironchest/models/item/silverGoldUpgrade.json create mode 100644 src/main/resources/assets/ironchest/models/item/woodCopperUpgrade.json create mode 100644 src/main/resources/assets/ironchest/models/item/woodIronUpgrade.json diff --git a/18 Mappings.txt b/18 Mappings.txt index 276afc3..2457cf8 100644 --- a/18 Mappings.txt +++ b/18 Mappings.txt @@ -51,12 +51,23 @@ func_175641_c - addBlockEvent func_180501_a - setBlock func_175726_f - getChunkFromBlockCoords +—Entity— +func_174818_b - getDistanceSq + —RegistryNamespaced— func_177775_a - addObject —IInventory—- func_174889_b - openInventory func_174886_c - closeInventory +func_174888_l - clearInventory +func_174887_a_ - getField +func_174885_b - setField +func_174890_g - getFieldCount +func_174876_a - createContainer + +—IInteractionObject— +func_174875_k - getGuiID —RenderItem— func_180451_a - renderEffect @@ -171,10 +182,42 @@ func_176610_l - getID func_177580_d - getModelLocation func_177584_b - getBlockStateLocation func_177586_a - getModelBlockDefinition +func_177590_d - loadItemModels +func_177592_e - registerSubModels +func_177596_a - getSubModels + +field_177608_m - itemModelGenerator +field_177613_u - subModels + +—ItemModelGenerator— +field_178398_a - LAYERS —Minecraft— field_175617_aL - modelManager +—IWorldNamable— +getCommandSenderName - getName +isCustomInventoryName - hasCustomName +getFormattedCommandSenderName - getFormattedName + +—LockCode- +func_180159_b - getLock +func_180158_b - fromNBT +func_180157_a - toNBT +func_180160_a - isEmpty + +field_180161_b - lock +field_180162_a - EMPTY_CODE + +—ILockableContainer— +func_174891_i - getLockCode +func_174892_a - setLockCode +func_174893_q_ - isLocked + +—TileEntityLockable— + +field_174901_a - lockCode + —————————— FIXES —————————— diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index 358e2e2..3bf73d9 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -10,6 +10,8 @@ ******************************************************************************/ package cpw.mods.ironchest; +import java.util.Random; + import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; @@ -18,10 +20,17 @@ import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class BlockIronChest extends BlockContainer @@ -129,14 +138,14 @@ public class BlockIronChest extends BlockContainer return items; }*/ - /*@Override + @Override public void onBlockAdded(World world, BlockPos pos, IBlockState blockState) { super.onBlockAdded(world, pos, blockState); world.markBlockForUpdate(pos); - }*/ + } - /*@Override + @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState blockState, EntityLivingBase entityliving, ItemStack itemStack) { byte chestFacing = 0; @@ -165,7 +174,7 @@ public class BlockIronChest extends BlockContainer teic.setFacing(chestFacing); world.markBlockForUpdate(pos); } - }*/ + } /*@Override public int damageDropped(int i) @@ -173,7 +182,7 @@ public class BlockIronChest extends BlockContainer return i; }*/ - /*@Override + @Override public void breakBlock(World world, BlockPos pos, IBlockState blockState) { TileEntityIronChest tileentitychest = (TileEntityIronChest) world.getTileEntity(pos); @@ -187,6 +196,8 @@ public class BlockIronChest extends BlockContainer public void dropContent(int newSize, IInventory chest, World world, BlockPos pos) { + Random random = world.rand; + for (int l = newSize; l < chest.getSizeInventory(); l++) { ItemStack itemstack = chest.getStackInSlot(l); @@ -218,7 +229,7 @@ public class BlockIronChest extends BlockContainer world.spawnEntityInWorld(entityitem); } } - }*/ + } /*@Override public float getExplosionResistance(Entity par1Entity, World world, int x, int y, int z, double explosionX, double explosionY, double explosionZ) @@ -235,12 +246,12 @@ public class BlockIronChest extends BlockContainer return super.getExplosionResistance(par1Entity, world, x, y, z, explosionX, explosionY, explosionZ); }*/ - /*@Override + @Override public boolean hasComparatorInputOverride() { return true; - }*/ + } - /*@Override + @Override public int getComparatorInputOverride(World world, BlockPos pos) { TileEntity te = world.getTileEntity(pos); @@ -249,7 +260,7 @@ public class BlockIronChest extends BlockContainer return Container.calcRedstoneFromInventory((IInventory)te); } return 0; - }*/ + } /*private static final ForgeDirection[] validRotationAxes = new ForgeDirection[] { UP, DOWN }; @Override diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 286a074..c814b1d 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -36,7 +36,7 @@ public class IronChest { Version.init(event.getVersionProperties()); event.getModMetadata().version = Version.fullVersionString(); - //ChestChangerType.buildItems(cfg); + ChestChangerType.buildItems(); ironChestBlock = new BlockIronChest(); GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); PacketHandler.INSTANCE.ordinal(); diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 4317a0b..4bec13e 100755 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -202,30 +202,6 @@ public enum IronChestType implements IStringSerializable return this == OBSIDIAN; } - /*TODO @SideOnly(Side.CLIENT) - private IIcon[] icons; - - @SideOnly(Side.CLIENT) - public void makeIcons(IIconRegister par1IconRegister) - { - if (isValidForCreativeMode()) - { - icons = new IIcon[3]; - int i = 0; - for (String s : sideNames) - { - icons[i++] = par1IconRegister.registerIcon(String.format("ironchest:%s_%s",name().toLowerCase(),s)); - } - } - } - - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side) - { - - return icons[sideMapping[side]]; - }*/ - private static String[] sideNames = { "top", "front", "side" }; private static int[] sideMapping = { 0, 0, 2, 1, 2, 2, 2 }; diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java index 2195f3d..7d380f4 100755 --- a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -22,17 +22,17 @@ import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class ItemChestChanger extends Item { - +public class ItemChestChanger extends Item +{ private ChestChangerType type; public ItemChestChanger(ChestChangerType type) { - super(); - setMaxStackSize(1); this.type = type; - setUnlocalizedName("ironchest:"+type.name()); - setCreativeTab(CreativeTabs.tabMisc); + + this.setMaxStackSize(1); + this.setUnlocalizedName("ironchest:" + type.name()); + this.setCreativeTab(CreativeTabs.tabMisc); } /*@Override diff --git a/src/main/java/cpw/mods/ironchest/TileEntityDiamondChest.java b/src/main/java/cpw/mods/ironchest/TileEntityDiamondChest.java index f1e8078..84b9023 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityDiamondChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityDiamondChest.java @@ -10,7 +10,8 @@ ******************************************************************************/ package cpw.mods.ironchest; -public class TileEntityDiamondChest extends TileEntityIronChest { +public class TileEntityDiamondChest extends TileEntityIronChest +{ public TileEntityDiamondChest() { super(IronChestType.DIAMOND); diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 4104c4f..8eebc33 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -16,6 +16,8 @@ import java.util.List; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -23,10 +25,12 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.network.Packet; import net.minecraft.server.gui.IUpdatePlayerListBox; import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityLockable; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IChatComponent; -public class TileEntityIronChest extends TileEntity implements IUpdatePlayerListBox, IInventory { +public class TileEntityIronChest extends TileEntityLockable implements IUpdatePlayerListBox, IInventory +{ private int ticksSinceSync = -1; public float prevLidAngle; public float lidAngle; @@ -37,6 +41,7 @@ public class TileEntityIronChest extends TileEntity implements IUpdatePlayerList private int facing; private boolean inventoryTouched; private boolean hadStuff; + private String customName; public TileEntityIronChest() { @@ -67,12 +72,6 @@ public class TileEntityIronChest extends TileEntity implements IUpdatePlayerList return this.facing; } - @Override - public String getCommandSenderName() - { - return type.name(); - } - public IronChestType getType() { return type; @@ -207,13 +206,39 @@ public class TileEntityIronChest extends TileEntity implements IUpdatePlayerList } markDirty(); } + + @Override + public String getName() + { + return this.hasCustomName() ? this.customName : type.name(); + } + + @Override + public boolean hasCustomName() + { + return this.customName != null && this.customName.length() > 0; + } + + public void setCustomName(String name) + { + this.customName = name; + } @Override public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); + + //10 - TAG_COMPOUND NBTTagList nbttaglist = nbttagcompound.getTagList("Items", 10); - chestContents = new ItemStack[getSizeInventory()]; + this.chestContents = new ItemStack[getSizeInventory()]; + + //8 - TAG_STRING + if (nbttagcompound.hasKey("CustomName", 8)) + { + this.customName = nbttagcompound.getString("CustomName"); + } + for (int i = 0; i < nbttaglist.tagCount(); i++) { NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); @@ -245,6 +270,11 @@ public class TileEntityIronChest extends TileEntity implements IUpdatePlayerList nbttagcompound.setTag("Items", nbttaglist); nbttagcompound.setByte("facing", (byte)facing); + + if (this.hasCustomName()) + { + nbttagcompound.setString("CustomName", this.customName); + } } @Override @@ -387,7 +417,7 @@ public class TileEntityIronChest extends TileEntity implements IUpdatePlayerList int newSize = newEntity.chestContents.length; System.arraycopy(chestContents, 0, newEntity.chestContents, 0, Math.min(newSize, chestContents.length)); BlockIronChest block = IronChest.ironChestBlock; - //block.dropContent(newSize, this, this.worldObj, pos); + block.dropContent(newSize, this, this.worldObj, pos); newEntity.setFacing(facing); newEntity.sortTopStacks(); newEntity.ticksSinceSync = -1; @@ -491,11 +521,7 @@ public class TileEntityIronChest extends TileEntity implements IUpdatePlayerList return type.acceptsStack(itemstack); } - @Override - public boolean isCustomInventoryName() - { - return false; - } + /*void rotateAround(ForgeDirection axis) { @@ -507,43 +533,41 @@ public class TileEntityIronChest extends TileEntity implements IUpdatePlayerList { } - public void removeAdornments() - { + public void removeAdornments() {} + @Override + public int getField(int id) + { + return 0; } @Override - public IChatComponent getFormattedCommandSenderName() + public void setField(int id, int value) {} + + @Override + public int getFieldCount() + { + return 0; + } + + @Override + public void clearInventory() + { + for (int i = 0; i < this.chestContents.length; ++i) + { + this.chestContents[i] = null; + } + } + + @Override + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer player) { - // TODO Auto-generated method stub return null; } @Override - public int func_174887_a_(int p_174887_1_) + public String getGuiID() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public void func_174885_b(int p_174885_1_, int p_174885_2_) - { - // TODO Auto-generated method stub - - } - - @Override - public int func_174890_g() - { - // TODO Auto-generated method stub - return 0; - } - - @Override - public void func_174888_l() - { - // TODO Auto-generated method stub - + return "IronChest:" + type.name(); } } diff --git a/src/main/resources/assets/ironchest/models/item/copperIronUpgrade.json b/src/main/resources/assets/ironchest/models/item/copperIronUpgrade.json new file mode 100644 index 0000000..11e00d7 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/copperIronUpgrade.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated”, + "textures": { + "layer0": “ironchest:items/copperIronUpgrade” + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/ironchest/models/item/copperSilverUpgrade.json b/src/main/resources/assets/ironchest/models/item/copperSilverUpgrade.json new file mode 100755 index 0000000..0194165 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/copperSilverUpgrade.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "ironchest:items/copperSilverUpgrade" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/ironchest/models/item/diamondCrystalUpgrade.json b/src/main/resources/assets/ironchest/models/item/diamondCrystalUpgrade.json new file mode 100644 index 0000000..846f6e9 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/diamondCrystalUpgrade.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "ironchest:items/diamondCrystalUpgrade" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/ironchest/models/item/diamondObsidianUpgrade.json b/src/main/resources/assets/ironchest/models/item/diamondObsidianUpgrade.json new file mode 100644 index 0000000..04e94ba --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/diamondObsidianUpgrade.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "ironchest:items/diamondObsidianUpgrade" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/ironchest/models/item/goldDiamondUpgrade.json b/src/main/resources/assets/ironchest/models/item/goldDiamondUpgrade.json new file mode 100755 index 0000000..9869bd3 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/goldDiamondUpgrade.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "items/apple" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/ironchest/models/item/ironGoldUpgrade.json b/src/main/resources/assets/ironchest/models/item/ironGoldUpgrade.json new file mode 100755 index 0000000..4579f8a --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/ironGoldUpgrade.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "ironchest:items/ironGoldUpgrade" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/ironchest/models/item/silverGoldUpgrade.json b/src/main/resources/assets/ironchest/models/item/silverGoldUpgrade.json new file mode 100755 index 0000000..62351b2 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/silverGoldUpgrade.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "ironchest:items/silverGoldUpgrade" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/ironchest/models/item/woodCopperUpgrade.json b/src/main/resources/assets/ironchest/models/item/woodCopperUpgrade.json new file mode 100644 index 0000000..51918f7 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/woodCopperUpgrade.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "ironchest:items/woodCopperUpgrade" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/ironchest/models/item/woodIronUpgrade.json b/src/main/resources/assets/ironchest/models/item/woodIronUpgrade.json new file mode 100644 index 0000000..84e149d --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/woodIronUpgrade.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "ironchest:items/woodIronUpgrade" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} From 073d2dfdbe5915b563d390862052e2af5d7ae8eb Mon Sep 17 00:00:00 2001 From: Adubbz Date: Fri, 26 Sep 2014 09:40:09 +1000 Subject: [PATCH 48/80] The upgrade items now render correctly --- 18 Mappings.txt | 64 +++++++++++++++++++ .../cpw/mods/ironchest/ChestChangerType.java | 9 ++- .../java/cpw/mods/ironchest/IronChest.java | 22 +++++-- .../mods/ironchest/client/ModelHelper.java | 32 ++++++++++ .../models/item/copperIronUpgrade.json | 4 +- .../models/item/goldDiamondUpgrade.json | 2 +- 6 files changed, 125 insertions(+), 8 deletions(-) create mode 100644 src/main/java/cpw/mods/ironchest/client/ModelHelper.java diff --git a/18 Mappings.txt b/18 Mappings.txt index 2457cf8..e7063c8 100644 --- a/18 Mappings.txt +++ b/18 Mappings.txt @@ -69,6 +69,11 @@ func_174876_a - createContainer —IInteractionObject— func_174875_k - getGuiID +—ItemRenderer— +func_178099_a - renderItem + +field_178112_h - itemRenderer + —RenderItem— func_180451_a - renderEffect @@ -185,15 +190,74 @@ func_177586_a - getModelBlockDefinition func_177590_d - loadItemModels func_177592_e - registerSubModels func_177596_a - getSubModels +func_177570_a - setupModelRegistry +field_177604_a - MODEL_MISSING field_177608_m - itemModelGenerator field_177613_u - subModels +field_177605_n - modelRegistry —ItemModelGenerator— field_178398_a - LAYERS +—RenderItem— +func_175037_a - getItemModelMesher +func_175048_a - loadInventoryModel +func_175047_a - loadInventoryModel +func_175029_a - loadInventoryModel +func_175031_a - loadInventoryModel +func_175041_b - loadInventoryModels + +field_175059_m - itemModelMesher + —Minecraft— +func_175597_ag - getItemRenderer +func_175599_af - getRenderItem + field_175617_aL - modelManager +field_175620_Y - itemRenderer +field_175621_X - renderItem +field_175616_W - renderManager + +—GlStateManager— +func_179094_E - pushMatrix +func_179121_F - popMatrix +func_179114_b - rotate +func_179152_a - scale +func_179139_a - scale +func_179109_b - translate +func_179137_b - translate + +—GLStateManager.BooleanState— +func_179198_a - setDisabled +func_179200_b - setEnabled + +—ItemModelMesher— +func_178083_a - getModelManager +func_178084_b - getItemStackDamage +func_178081_c - getItemID +func_178088_b - getModelForItem +func_178089_a - getModelForItemStack +func_178087_a - getItemTexture +func_178082_a - getItemTexture +func_178086_a - loadItemModel +func_178085_b - resetModels +func_178080_a - addItemMeshDefinition + +field_178090_d - modelManager +field_178093_a - modelLocations +field_178091_b - itemModels +field_178092_c - itemMeshDefinitions + +—IBakedModel— +func_177554_e - getTexture + +—ModelManager— +func_174953_a - getModel +func_174951_a - getDefaultModel + +field_174955_d - defaultModel +field_174958_a - modelRegistry —IWorldNamable— getCommandSenderName - getName diff --git a/src/main/java/cpw/mods/ironchest/ChestChangerType.java b/src/main/java/cpw/mods/ironchest/ChestChangerType.java index 354c9f4..cac424b 100755 --- a/src/main/java/cpw/mods/ironchest/ChestChangerType.java +++ b/src/main/java/cpw/mods/ironchest/ChestChangerType.java @@ -14,9 +14,14 @@ import static cpw.mods.ironchest.IronChestType.IRON; import static cpw.mods.ironchest.IronChestType.OBSIDIAN; import static cpw.mods.ironchest.IronChestType.SILVER; import static cpw.mods.ironchest.IronChestType.WOOD; +import cpw.mods.ironchest.client.ModelHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; public enum ChestChangerType { IRONGOLD(IRON, GOLD, "ironGoldUpgrade", "Iron to Gold Chest Upgrade", "mmm", "msm", "mmm"), @@ -33,7 +38,7 @@ public enum ChestChangerType { private IronChestType target; public String itemName; public String descriptiveName; - private ItemChestChanger item; + public ItemChestChanger item; private String[] recipe; private ChestChangerType(IronChestType source, IronChestType target, String itemName, String descriptiveName, String... recipe) @@ -59,6 +64,8 @@ public enum ChestChangerType { { item = new ItemChestChanger(this); GameRegistry.registerItem(item, itemName); + ModelHelper.loadInventoryModel(item, "ironchest:" + itemName); + return item; } diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index c814b1d..ba6b457 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -10,20 +10,31 @@ ******************************************************************************/ package cpw.mods.ironchest; +import java.util.HashMap; +import java.util.Map.Entry; + +import cpw.mods.ironchest.client.ModelHelper; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.init.Blocks; import net.minecraft.item.Item; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; @Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:FML@[7.2,)") -public class IronChest { +public class IronChest +{ public static BlockIronChest ironChestBlock; @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.CommonProxy") public static CommonProxy proxy; @@ -36,15 +47,18 @@ public class IronChest { Version.init(event.getVersionProperties()); event.getModMetadata().version = Version.fullVersionString(); - ChestChangerType.buildItems(); - ironChestBlock = new BlockIronChest(); - GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); PacketHandler.INSTANCE.ordinal(); } @EventHandler public void load(FMLInitializationEvent evt) { + //Registration has been moved to init to account for the registration of inventory models + //Minecraft.getRenderItem() returns null before this stage + ChestChangerType.buildItems(); + ironChestBlock = new BlockIronChest(); + GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); + for (IronChestType typ : IronChestType.values()) { GameRegistry.registerTileEntityWithAlternatives(typ.clazz, "IronChest." + typ.name(), typ.name()); diff --git a/src/main/java/cpw/mods/ironchest/client/ModelHelper.java b/src/main/java/cpw/mods/ironchest/client/ModelHelper.java new file mode 100644 index 0000000..b3f5612 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/client/ModelHelper.java @@ -0,0 +1,32 @@ +package cpw.mods.ironchest.client; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraft.item.Item; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelHelper +{ + public static void loadInventoryModel(Item item, int metadata, String itemName) + { + Minecraft.getMinecraft().getRenderItem().getItemModelMesher().loadItemModel(item, metadata, new ModelResourceLocation(itemName, "inventory")); + } + + public static void loadInventoryModel(Block block, int metadata, String blockName) + { + loadInventoryModel(Item.getItemFromBlock(block), metadata, blockName); + } + + public static void loadInventoryModel(Block block, String blockName) + { + loadInventoryModel(block, 0, blockName); + } + + public static void loadInventoryModel(Item item, String itemName) + { + loadInventoryModel(item, 0, itemName); + } +} diff --git a/src/main/resources/assets/ironchest/models/item/copperIronUpgrade.json b/src/main/resources/assets/ironchest/models/item/copperIronUpgrade.json index 11e00d7..3ef545e 100644 --- a/src/main/resources/assets/ironchest/models/item/copperIronUpgrade.json +++ b/src/main/resources/assets/ironchest/models/item/copperIronUpgrade.json @@ -1,7 +1,7 @@ { - "parent": "builtin/generated”, + "parent": "builtin/generated", "textures": { - "layer0": “ironchest:items/copperIronUpgrade” + "layer0": "ironchest:items/copperIronUpgrade" }, "display": { "thirdperson": { diff --git a/src/main/resources/assets/ironchest/models/item/goldDiamondUpgrade.json b/src/main/resources/assets/ironchest/models/item/goldDiamondUpgrade.json index 9869bd3..0a0e626 100755 --- a/src/main/resources/assets/ironchest/models/item/goldDiamondUpgrade.json +++ b/src/main/resources/assets/ironchest/models/item/goldDiamondUpgrade.json @@ -1,7 +1,7 @@ { "parent": "builtin/generated", "textures": { - "layer0": "items/apple" + "layer0": "ironchest:items/goldDiamondUpgrade" }, "display": { "thirdperson": { From 876586c3068e86304d9da6cb45bb925b374affb3 Mon Sep 17 00:00:00 2001 From: Adubbz Date: Fri, 26 Sep 2014 10:03:18 +1000 Subject: [PATCH 49/80] Uncommented the recipes --- 18 Mappings.txt | 6 ------ src/main/java/cpw/mods/ironchest/IronChest.java | 4 ++-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/18 Mappings.txt b/18 Mappings.txt index e7063c8..1668932 100644 --- a/18 Mappings.txt +++ b/18 Mappings.txt @@ -287,12 +287,6 @@ FIXES —————————— —GameData— - static Block findBlock(String modId, String name) - { - ResourceLocation key = new ResourceLocation(modId + ":" + name); - return getMain().iBlockRegistry.containsKey(key) ? getMain().iBlockRegistry.getObject(key) : null; - } - private int registerBlock(Block block, String name, int idHint) { // handle ItemBlock-before-Block registrations diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index ba6b457..958ba47 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -65,8 +65,8 @@ public class IronChest proxy.registerTileEntitySpecialRenderer(typ); } //OreDictionary.registerOre("chestWood", Blocks.chest); - //IronChestType.registerBlocksAndRecipes(ironChestBlock); - //ChestChangerType.generateRecipes(); + IronChestType.registerBlocksAndRecipes(ironChestBlock); + ChestChangerType.generateRecipes(); NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy); proxy.registerRenderInformation(); // if (OCELOTS_SITONCHESTS) From abccb682085aeb0ef6ef97a6ac3ac4c9cfb2101f Mon Sep 17 00:00:00 2001 From: Adubbz Date: Fri, 26 Sep 2014 12:45:55 +1000 Subject: [PATCH 50/80] Began work on rendering. All chest variants now appear in the creative menu --- 18 Mappings.txt | 284 +----------------- .../cpw/mods/ironchest/BlockIronChest.java | 13 +- .../cpw/mods/ironchest/IronChestType.java | 2 +- .../mods/ironchest/client/ClientProxy.java | 4 +- .../client/TileEntityIronChestRenderer.java | 59 ++-- 5 files changed, 42 insertions(+), 320 deletions(-) diff --git a/18 Mappings.txt b/18 Mappings.txt index 1668932..c22f284 100644 --- a/18 Mappings.txt +++ b/18 Mappings.txt @@ -1,286 +1,4 @@ --—Block—- -func_180660_a - getItemDropped -func_180654_a - setBlockBoundsBasedOnState -func_180640_a - getCollisionBoundingBoxFromPool -func_180646_a - getSelectedBoundingBoxFromPool -func_180639_a - onBlockActivated -func_180649_a - onBlockClicked -func_176196_c - canPlaceBlockAt -func_176204_a - onNeighborBlockChange -func_180650_b - updateTick -func_180655_c - randomDisplayTick -func_180644_h - getRenderColor -func_180662_a - colorMultiplier -func_175671_l - getBlockLightValue -func_180659_g - getMapColor -func_180641_l - getComparatorInputOverride -func_176222_j - getDamageValue -func_176207_c - getMixedBrightnessForBlock -func_176225_a - shouldSideBeRendered -func_176195_g - getBlockHardness -func_176209_a - canCollideCheck -func_180638_a - addCollisionBoxesToList -func_180665_b - getItem -func_176208_a - onBlockHarvested -func_180653_a - dropBlockAsItemWithChance -func_180657_a - harvestBlock -func_180643_i - createStackedBlock -func_176213_c - onBlockAdded -func_180633_a - onBlockPlacedBy -func_180651_a - damageDropped -func_180663_b - breakBlock -func_180656_a - isProvidingWeakPower -func_180642_a - onBlockPlaced - -—Item— -func_180614_a - onItemUse - -—IBlockAccess— -func_180494_b - getBiomeGenForCoords -func_175625_s - getTileEntity - -—World—- -func_175698_g - setBlockToAir -func_175656_a - setBlock -func_175718_b - playAuxSFX -func_180498_a - playAuxSFXAtEntity -func_175623_d - isAirBlock -func_175690_a - setTileEntity -func_175689_h - markBlockForUpdate -func_175641_c - addBlockEvent -func_180501_a - setBlock -func_175726_f - getChunkFromBlockCoords - -—Entity— -func_174818_b - getDistanceSq - -—RegistryNamespaced— -func_177775_a - addObject - -—IInventory—- -func_174889_b - openInventory -func_174886_c - closeInventory -func_174888_l - clearInventory -func_174887_a_ - getField -func_174885_b - setField -func_174890_g - getFieldCount -func_174876_a - createContainer - -—IInteractionObject— -func_174875_k - getGuiID - -—ItemRenderer— -func_178099_a - renderItem - -field_178112_h - itemRenderer - -—RenderItem— -func_180451_a - renderEffect - -—————————— -ESTIMATES -—————————— - -—IBlockAccess— -func_180495_p - getBlockState - -—World— -func_175701_a - isPosInBoundaries - -—Chunk— -func_177435_g - getBlockState - -—Block—- -func_180661_e - createBlockState -func_176194_O - getBlockState -func_180632_j - setDefaultBlockState -func_176223_P - getDefaultBlockState -func_176203_a - getBlockStateFromMeta -func_176201_c - getMetaFromBlockState -func_176215_a - registerBlock -func_176219_a - registerBlock - -field_176227_L - blockState -field_176228_M - defaultBlockState - -—BlockDirt— -field_176386_a - VARIANT_PROP -field_176385_b - SNOWY_PROP - -—BlockDirt.DirtType— -func_176925_a - getMetadata - -field_176931_e - metadata - -—IBlockState— -func_177227_a - getPropertyNames -func_177229_b - getValue -func_177226_a - setProperty -func_177228_b - getProperties - -—BlockState— -func_177622_c - getBlock -func_177623_d - getProperties -func_177620_e - getAllowedValues -func_177619_a - getValidStates -func_177621_b - getBaseState - -field_177627_c - block -field_177625_e - validStates - -—BlockStateBase— -func_177232_a - validatePropertyValue - -—BlockState.StateImplementation— -func_177230_c - getBlock - -field_177239_a - block -field_177237_b - properties - -—PropertyHelper— -field_177704_a - propertyClass -field_177703_b - name - -—IProperty— -func_177701_a - getName -func_177700_c - getAllowedValues -func_177699_b - getPropertyClass - -—TileEntity— -func_174877_v - getPos - -field_174879_c - pos - -—MapPopulator— -func_179400_b - populateLinkedHashMap -func_179399_a - populateLinkedHashMap - -—Cartesian— - -func_179319_b - createArray -func_179322_b - toArray - -—Cartestian.GetList— -func_179324_a - toList - -—RegistryNamespaced— -func_177774_c - getKeyForObject - -—Vec3i— -func_177958_n - getX -func_177956_o - getY -func_177952_p - getZ -func_177954_c - getDistanceSq -func_177951_i - getDistanceSq - -field_177962_a - x -field_177960_b - y -field_177961_c - z - -—BlockPos— -field_177992_a - ORIGIN - -—IStringSerializable— -func_176610_l - getID - -—ModelBakery— -func_177580_d - getModelLocation -func_177584_b - getBlockStateLocation -func_177586_a - getModelBlockDefinition -func_177590_d - loadItemModels -func_177592_e - registerSubModels -func_177596_a - getSubModels -func_177570_a - setupModelRegistry - -field_177604_a - MODEL_MISSING -field_177608_m - itemModelGenerator -field_177613_u - subModels -field_177605_n - modelRegistry - -—ItemModelGenerator— -field_178398_a - LAYERS - -—RenderItem— -func_175037_a - getItemModelMesher -func_175048_a - loadInventoryModel -func_175047_a - loadInventoryModel -func_175029_a - loadInventoryModel -func_175031_a - loadInventoryModel -func_175041_b - loadInventoryModels - -field_175059_m - itemModelMesher - -—Minecraft— -func_175597_ag - getItemRenderer -func_175599_af - getRenderItem - -field_175617_aL - modelManager -field_175620_Y - itemRenderer -field_175621_X - renderItem -field_175616_W - renderManager - -—GlStateManager— -func_179094_E - pushMatrix -func_179121_F - popMatrix -func_179114_b - rotate -func_179152_a - scale -func_179139_a - scale -func_179109_b - translate -func_179137_b - translate - -—GLStateManager.BooleanState— -func_179198_a - setDisabled -func_179200_b - setEnabled - -—ItemModelMesher— -func_178083_a - getModelManager -func_178084_b - getItemStackDamage -func_178081_c - getItemID -func_178088_b - getModelForItem -func_178089_a - getModelForItemStack -func_178087_a - getItemTexture -func_178082_a - getItemTexture -func_178086_a - loadItemModel -func_178085_b - resetModels -func_178080_a - addItemMeshDefinition - -field_178090_d - modelManager -field_178093_a - modelLocations -field_178091_b - itemModels -field_178092_c - itemMeshDefinitions - -—IBakedModel— -func_177554_e - getTexture - -—ModelManager— -func_174953_a - getModel -func_174951_a - getDefaultModel - -field_174955_d - defaultModel -field_174958_a - modelRegistry - -—IWorldNamable— -getCommandSenderName - getName -isCustomInventoryName - hasCustomName -getFormattedCommandSenderName - getFormattedName - -—LockCode- -func_180159_b - getLock -func_180158_b - fromNBT -func_180157_a - toNBT -func_180160_a - isEmpty - -field_180161_b - lock -field_180162_a - EMPTY_CODE - -—ILockableContainer— -func_174891_i - getLockCode -func_174892_a - setLockCode -func_174893_q_ - isLocked - -—TileEntityLockable— - -field_174901_a - lockCode +—MAPPINGS NOW IN MCPBOT— —————————— FIXES diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index 3bf73d9..da717e2 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -10,6 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest; +import java.util.List; import java.util.Random; import net.minecraft.block.Block; @@ -23,8 +24,10 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -32,6 +35,8 @@ import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.MathHelper; import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; public class BlockIronChest extends BlockContainer { @@ -43,7 +48,7 @@ public class BlockIronChest extends BlockContainer this.setDefaultBlockState(this.blockState.getBaseState().setProperty(VARIANT_PROP, IronChestType.IRON)); - //this.setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); + this.setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); this.setHardness(3.0F); this.setUnlocalizedName("IronChest"); this.setCreativeTab(CreativeTabs.tabDecorations); @@ -91,7 +96,7 @@ public class BlockIronChest extends BlockContainer return IronChestType.makeEntity(metadata); } - /*@Override + @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) { @@ -99,10 +104,10 @@ public class BlockIronChest extends BlockContainer { if (type.isValidForCreativeMode()) { - list.add(new ItemStack(this, 1, type.ordinal())); + list.add(new ItemStack(itemIn, 1, type.ordinal())); } } - }*/ + } @Override public IBlockState getBlockStateFromMeta(int meta) diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 4bec13e..09694a5 100755 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -182,7 +182,7 @@ public enum IronChestType implements IStringSerializable public static int validateMeta(int i) { - if (i < values().length && values()[i].size > 0) + if (i < values().length && values()[i] != IronChestType.WOOD) { return i; } diff --git a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java index 63cb7de..a56853d 100755 --- a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -28,13 +28,13 @@ public class ClientProxy extends CommonProxy @Override public void registerRenderInformation() { - //TileEntityRendererChestHelper.instance = new IronChestRenderHelper(); + //tileEntityRendererChestHelper.instance = new IronChestRenderHelper(); } @Override public void registerTileEntitySpecialRenderer(IronChestType typ) { - //ClientRegistry.bindTileEntitySpecialRenderer(typ.clazz, new TileEntityIronChestRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(typ.clazz, new TileEntityIronChestRenderer()); } @Override diff --git a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 4f36891..8f6c2ab 100755 --- a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -23,6 +23,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Random; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.model.ModelChest; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; @@ -34,17 +35,18 @@ import net.minecraft.util.ResourceLocation; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; -import com.google.common.primitives.SignedBytes; +import cpw.mods.ironchest.BlockIronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.MappableItemStackWrapper; import cpw.mods.ironchest.TileEntityIronChest; -/*public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { - @SuppressWarnings("unused") +public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer +{ private static Map renderList = new HashMap(); private static Map locations; + static { Builder builder = ImmutableMap.builder(); for (IronChestType typ : IronChestType.values()) { @@ -52,22 +54,19 @@ import cpw.mods.ironchest.TileEntityIronChest; } locations = builder.build(); } + private Random random; - - @SuppressWarnings("unused") - private RenderBlocks renderBlocks; - private RenderItem itemRenderer; + private ModelChest model; private static float[][] shifts = { { 0.3F, 0.45F, 0.3F }, { 0.7F, 0.45F, 0.3F }, { 0.3F, 0.45F, 0.7F }, { 0.7F, 0.45F, 0.7F }, { 0.3F, 0.1F, 0.3F }, { 0.7F, 0.1F, 0.3F }, { 0.3F, 0.1F, 0.7F }, { 0.7F, 0.1F, 0.7F }, { 0.5F, 0.32F, 0.5F }, }; - + public TileEntityIronChestRenderer() { model = new ModelChest(); random = new Random(); - renderBlocks = new RenderBlocks(); - itemRenderer = new RenderItem() { + /*itemRenderer = new RenderItem(null, null) { @Override public byte getMiniBlockCount(ItemStack stack, byte original) { return SignedBytes.saturatedCast(Math.min(stack.stackSize / 32, 15) + 1); @@ -85,10 +84,11 @@ import cpw.mods.ironchest.TileEntityIronChest; return false; } }; - itemRenderer.setRenderManager(RenderManager.instance); + itemRenderer.setRenderManager(RenderManager.instance);*/ } - /*public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick) { + public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick) + { if (tile == null) { return; } @@ -97,13 +97,13 @@ import cpw.mods.ironchest.TileEntityIronChest; if (tile != null && tile.hasWorldObj()) { facing = tile.getFacing(); type = tile.getType(); - int typ = tile.getWorldObj().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord); - type = IronChestType.values()[typ]; + IBlockState state = tile.getWorld().getBlockState(tile.getPos()); + type = (IronChestType)state.getValue(BlockIronChest.VARIANT_PROP); } bindTexture(locations.get(type)); glPushMatrix(); - glEnable(32826 /* GL_RESCALE_NORMAL_EXT *//*); - /*glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); + glColor4f(1.0F, 1.0F, 1.0F, 1.0F); glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); glScalef(1.0F, -1F, -1F); glTranslatef(0.5F, 0.5F, 0.5F); @@ -128,10 +128,10 @@ import cpw.mods.ironchest.TileEntityIronChest; model.chestLid.rotateAngleX = -((lidangle * 3.141593F) / 2.0F); // Render the chest itself model.renderAll(); - glDisable(32826 /* GL_RESCALE_NORMAL_EXT *//*); - /*glPopMatrix(); + glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); + glPopMatrix(); glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - if (type.isTransparent() && tile.getDistanceFrom(this.field_147501_a.field_147560_j, this.field_147501_a.field_147561_k, this.field_147501_a.field_147558_l) < 128d) { + if (type.isTransparent() && tile.getDistanceSq(this.rendererDispatcher.field_147560_j, this.rendererDispatcher.field_147561_k, this.rendererDispatcher.field_147558_l) < 128d) { random.setSeed(254L); float shiftX; float shiftY; @@ -144,9 +144,9 @@ import cpw.mods.ironchest.TileEntityIronChest; blockScale = 0.85F; } glPushMatrix(); - glDisable(2896 /* GL_LIGHTING *//*); - /*glTranslatef((float) x, (float) y, (float) z); - EntityItem customitem = new EntityItem(field_147501_a.field_147550_f); + glDisable(2896 /* GL_LIGHTING */); + glTranslatef((float) x, (float) y, (float) z); + EntityItem customitem = new EntityItem(this.getWorld()); customitem.hoverStart = 0f; for (ItemStack item : tile.getTopItemStacks()) { if (shift > shifts.length) { @@ -165,20 +165,19 @@ import cpw.mods.ironchest.TileEntityIronChest; glRotatef(timeD, 0.0F, 1.0F, 0.0F); glScalef(blockScale, blockScale, blockScale); customitem.setEntityItemStack(item); - itemRenderer.doRender(customitem, 0, 0, 0, 0, 0); + //itemRenderer.doRender(customitem, 0, 0, 0, 0, 0); glPopMatrix(); } - glEnable(2896 /* GL_LIGHTING *//*); - /*glPopMatrix(); + glEnable(2896 /* GL_LIGHTING */); + glPopMatrix(); glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } } - - /*@Override - public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float partialTick) + + @Override + public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float partialTick, int p_180535_9_) { render((TileEntityIronChest) tileentity, x, y, z, partialTick); } - private ModelChest model; -}*/ +} From e53f48b08f9f966af97be137eb649c55ccb7b149 Mon Sep 17 00:00:00 2001 From: Adubbz Date: Fri, 26 Sep 2014 21:42:37 +1000 Subject: [PATCH 51/80] Trying (without luck) to get the inventory models rendering --- .../cpw/mods/ironchest/BlockIronChest.java | 20 +++++++++---------- .../java/cpw/mods/ironchest/IronChest.java | 2 ++ .../cpw/mods/ironchest/IronChestType.java | 4 ++-- .../mods/ironchest/client/ClientProxy.java | 2 +- .../client/IronChestRenderHelper.java | 16 +++++++++------ .../client/TileEntityIronChestRenderer.java | 5 ++++- .../models/block/BlockIronChest.json | 6 ------ .../ironchest/models/item/BlockIronChest.json | 9 +-------- 8 files changed, 30 insertions(+), 34 deletions(-) delete mode 100755 src/main/resources/assets/ironchest/models/block/BlockIronChest.json diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index da717e2..bc543a8 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -40,13 +40,13 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class BlockIronChest extends BlockContainer { - public static final PropertyEnum VARIANT_PROP = PropertyEnum.func_177709_a("variant", IronChestType.class); + public static final PropertyEnum VARIANT_PROP = PropertyEnum.create("variant", IronChestType.class); public BlockIronChest() { super(Material.iron); - this.setDefaultBlockState(this.blockState.getBaseState().setProperty(VARIANT_PROP, IronChestType.IRON)); + this.setDefaultBlockState(this.blockState.getBaseState().withProperty(VARIANT_PROP, IronChestType.IRON)); this.setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); this.setHardness(3.0F); @@ -66,6 +66,12 @@ public class BlockIronChest extends BlockContainer return false; } + @Override + public int getRenderType() + { + return 2; + } + @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState blockState, EntityPlayer player, EnumFacing direction, float p_180639_6_, float p_180639_7_, float p_180639_8_) { @@ -112,13 +118,13 @@ public class BlockIronChest extends BlockContainer @Override public IBlockState getBlockStateFromMeta(int meta) { - return this.getDefaultBlockState().setProperty(VARIANT_PROP, IronChestType.values()[IronChestType.validateMeta(meta)]); + return this.getDefaultBlockState().withProperty(VARIANT_PROP, IronChestType.values()[meta]); } @Override public int getMetaFromBlockState(IBlockState blockState) { - return IronChestType.validateMeta(((IronChestType)blockState.getValue(VARIANT_PROP)).ordinal()); + return ((IronChestType)blockState.getValue(VARIANT_PROP)).ordinal(); } @Override @@ -127,12 +133,6 @@ public class BlockIronChest extends BlockContainer return new BlockState(this, new IProperty[] { VARIANT_PROP }); } - /*@Override - public int getRenderType() - { - return 22; - }*/ - /*@Override public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 958ba47..83bc6ea 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -58,6 +58,8 @@ public class IronChest ChestChangerType.buildItems(); ironChestBlock = new BlockIronChest(); GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); + Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().func_178123_a(ironChestBlock); + ModelHelper.loadInventoryModel(ironChestBlock, "ironchest:BlockIronChest"); for (IronChestType typ : IronChestType.values()) { diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 09694a5..9849323 100755 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -67,7 +67,7 @@ public enum IronChestType implements IStringSerializable } @Override - public String getID() + public String getName() { return name().toLowerCase(); } @@ -182,7 +182,7 @@ public enum IronChestType implements IStringSerializable public static int validateMeta(int i) { - if (i < values().length && values()[i] != IronChestType.WOOD) + if (i < values().length && values()[i].size > 0) { return i; } diff --git a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java index a56853d..9ff1c48 100755 --- a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -28,7 +28,7 @@ public class ClientProxy extends CommonProxy @Override public void registerRenderInformation() { - //tileEntityRendererChestHelper.instance = new IronChestRenderHelper(); + TileEntityRendererChestHelper.instance = new IronChestRenderHelper(); } @Override diff --git a/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java index dd27f42..fd44c88 100755 --- a/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java +++ b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -15,6 +15,7 @@ import java.util.Map; import net.minecraft.block.Block; import net.minecraft.client.renderer.tileentity.TileEntityRendererChestHelper; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.item.ItemStack; import com.google.common.collect.Maps; @@ -22,27 +23,30 @@ import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; -/*public class IronChestRenderHelper extends TileEntityRendererChestHelper { +public class IronChestRenderHelper extends TileEntityRendererChestHelper +{ private Map itemRenders = Maps.newHashMap(); public IronChestRenderHelper() { for (IronChestType typ : IronChestType.values()) { - itemRenders.put(typ.ordinal(), (TileEntityIronChest) IronChest.ironChestBlock.createTileEntity(null, typ.ordinal())); + itemRenders.put(typ.ordinal(), (TileEntityIronChest) IronChest.ironChestBlock.createNewTileEntity(null, typ.ordinal())); } } @Override - public void renderChest(Block block, int i, float f) + public void renderChest(ItemStack itemStack) { + Block block = Block.getBlockFromItem(itemStack.getItem()); + if (block == IronChest.ironChestBlock) { - TileEntityRendererDispatcher.instance.renderTileEntityAt(itemRenders.get(i), 0.0D, 0.0D, 0.0D, 0.0F); + TileEntityRendererDispatcher.instance.renderTileEntityAt(itemRenders.get(itemStack.getMetadata()), 0.0D, 0.0D, 0.0D, 0.0F); } else { - super.renderChest(block, i, f); + super.renderChest(itemStack); } } -}*/ +} diff --git a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 8f6c2ab..a3866c9 100755 --- a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -37,6 +37,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import cpw.mods.ironchest.BlockIronChest; +import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.MappableItemStackWrapper; import cpw.mods.ironchest.TileEntityIronChest; @@ -94,12 +95,14 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer } int facing = 3; IronChestType type = tile.getType(); - if (tile != null && tile.hasWorldObj()) { + + if (tile != null && tile.hasWorldObj() && tile.getWorld().getBlockState(tile.getPos()).getBlock() == IronChest.ironChestBlock) { facing = tile.getFacing(); type = tile.getType(); IBlockState state = tile.getWorld().getBlockState(tile.getPos()); type = (IronChestType)state.getValue(BlockIronChest.VARIANT_PROP); } + bindTexture(locations.get(type)); glPushMatrix(); glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); diff --git a/src/main/resources/assets/ironchest/models/block/BlockIronChest.json b/src/main/resources/assets/ironchest/models/block/BlockIronChest.json deleted file mode 100755 index 8d6a8b4..0000000 --- a/src/main/resources/assets/ironchest/models/block/BlockIronChest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "blocks/clay" - } -} diff --git a/src/main/resources/assets/ironchest/models/item/BlockIronChest.json b/src/main/resources/assets/ironchest/models/item/BlockIronChest.json index d055f0b..9935acc 100755 --- a/src/main/resources/assets/ironchest/models/item/BlockIronChest.json +++ b/src/main/resources/assets/ironchest/models/item/BlockIronChest.json @@ -1,10 +1,3 @@ { - "parent": "ironchest:block/BlockIronChest", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } + "parent": "builtin/entity" } From a84311f0d38f05c5fd6b7622e456fde663dfdcd3 Mon Sep 17 00:00:00 2001 From: Adubbz Date: Sat, 27 Sep 2014 11:31:58 +1000 Subject: [PATCH 52/80] Inventory rendering now works correctly --- .../cpw/mods/ironchest/ChestChangerType.java | 2 +- .../java/cpw/mods/ironchest/IronChest.java | 7 ++- .../cpw/mods/ironchest/RegistryHelper.java | 58 +++++++++++++++++++ .../mods/ironchest/TileEntityIronChest.java | 8 +-- .../mods/ironchest/client/ClientProxy.java | 9 +++ .../client/IronChestRenderHelper.java | 4 +- .../mods/ironchest/client/ModelHelper.java | 28 ++++++--- .../ironchest/blockstates/BlockIronChest.json | 5 -- 8 files changed, 99 insertions(+), 22 deletions(-) create mode 100644 src/main/java/cpw/mods/ironchest/RegistryHelper.java delete mode 100755 src/main/resources/assets/ironchest/blockstates/BlockIronChest.json diff --git a/src/main/java/cpw/mods/ironchest/ChestChangerType.java b/src/main/java/cpw/mods/ironchest/ChestChangerType.java index cac424b..ebf2e95 100755 --- a/src/main/java/cpw/mods/ironchest/ChestChangerType.java +++ b/src/main/java/cpw/mods/ironchest/ChestChangerType.java @@ -64,7 +64,7 @@ public enum ChestChangerType { { item = new ItemChestChanger(this); GameRegistry.registerItem(item, itemName); - ModelHelper.loadInventoryModel(item, "ironchest:" + itemName); + ModelHelper.registerItem(item, "ironchest:" + itemName); return item; } diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 83bc6ea..1b34369 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -19,6 +19,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.init.Blocks; import net.minecraft.item.Item; +import net.minecraft.util.RegistrySimple; import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; @@ -50,6 +51,8 @@ public class IronChest PacketHandler.INSTANCE.ordinal(); } + private static boolean run = false; + @EventHandler public void load(FMLInitializationEvent evt) { @@ -57,9 +60,9 @@ public class IronChest //Minecraft.getRenderItem() returns null before this stage ChestChangerType.buildItems(); ironChestBlock = new BlockIronChest(); - GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); + RegistryHelper.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); + Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().func_178123_a(ironChestBlock); - ModelHelper.loadInventoryModel(ironChestBlock, "ironchest:BlockIronChest"); for (IronChestType typ : IronChestType.values()) { diff --git a/src/main/java/cpw/mods/ironchest/RegistryHelper.java b/src/main/java/cpw/mods/ironchest/RegistryHelper.java new file mode 100644 index 0000000..24b3089 --- /dev/null +++ b/src/main/java/cpw/mods/ironchest/RegistryHelper.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ +package cpw.mods.ironchest; + +import java.lang.reflect.Constructor; +import java.util.Iterator; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraftforge.fml.common.FMLLog; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.LoaderException; +import net.minecraftforge.fml.common.LoaderState; +import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.minecraftforge.fml.common.registry.GameData; +import net.minecraftforge.fml.common.registry.GameRegistry; + +import org.apache.logging.log4j.Level; + +import com.google.common.collect.ObjectArrays; + +public class RegistryHelper +{ + /** + * A temporary workaround whilst GameRegistry hasn't been fully updated to support 1.8 + */ + public static Block registerBlock(Block block, Class itemclass, String name, Object... itemCtorArgs) + { + block = GameRegistry.registerBlock(block, itemclass, name, itemCtorArgs); + Item associatedItem = GameRegistry.findItem("ironchest", name); + + Map itemBlockMap = (Map)ObfuscationReflectionHelper.getPrivateValue(Item.class, null, "field_179220_a"); + + if (!itemBlockMap.containsKey(block)) itemBlockMap.put(block, associatedItem); + + Iterator iterator = block.getBlockState().getValidStates().iterator(); + + while (iterator.hasNext()) + { + IBlockState iblockstate = (IBlockState)iterator.next(); + int id = Block.blockRegistry.getIDForObject(block) << 4 | block.getMetaFromBlockState(iblockstate); + Block.field_176229_d.func_148746_a(iblockstate, id); + } + + return block; + } +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 8eebc33..558412d 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -208,13 +208,13 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl } @Override - public String getName() + public String getCommandSenderName() { - return this.hasCustomName() ? this.customName : type.name(); + return this.hasName() ? this.customName : type.name(); } @Override - public boolean hasCustomName() + public boolean hasName() { return this.customName != null && this.customName.length() > 0; } @@ -271,7 +271,7 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl nbttagcompound.setTag("Items", nbttaglist); nbttagcompound.setByte("facing", (byte)facing); - if (this.hasCustomName()) + if (this.hasName()) { nbttagcompound.setString("CustomName", this.customName); } diff --git a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java index 9ff1c48..ea88561 100755 --- a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -20,6 +20,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.client.registry.ClientRegistry; import cpw.mods.ironchest.CommonProxy; +import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; @@ -28,6 +29,14 @@ public class ClientProxy extends CommonProxy @Override public void registerRenderInformation() { + for (IronChestType chestType : IronChestType.values()) + { + if (chestType != IronChestType.WOOD) + { + ModelHelper.registerBlock(IronChest.ironChestBlock, chestType.ordinal(), "ironchest:BlockIronChest"); + } + } + TileEntityRendererChestHelper.instance = new IronChestRenderHelper(); } diff --git a/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java index fd44c88..232fda9 100755 --- a/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java +++ b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -36,7 +36,7 @@ public class IronChestRenderHelper extends TileEntityRendererChestHelper } @Override - public void renderChest(ItemStack itemStack) + public void renderByItem(ItemStack itemStack) { Block block = Block.getBlockFromItem(itemStack.getItem()); @@ -46,7 +46,7 @@ public class IronChestRenderHelper extends TileEntityRendererChestHelper } else { - super.renderChest(itemStack); + super.renderByItem(itemStack); } } } diff --git a/src/main/java/cpw/mods/ironchest/client/ModelHelper.java b/src/main/java/cpw/mods/ironchest/client/ModelHelper.java index b3f5612..9fb7a35 100644 --- a/src/main/java/cpw/mods/ironchest/client/ModelHelper.java +++ b/src/main/java/cpw/mods/ironchest/client/ModelHelper.java @@ -1,7 +1,18 @@ +/******************************************************************************* + * Copyright (c) 2012 cpw. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * cpw - initial API and implementation + ******************************************************************************/ package cpw.mods.ironchest.client; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemModelMesher; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraftforge.fml.relauncher.Side; @@ -10,23 +21,24 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class ModelHelper { - public static void loadInventoryModel(Item item, int metadata, String itemName) + public static void registerItem(Item item, int metadata, String itemName) { - Minecraft.getMinecraft().getRenderItem().getItemModelMesher().loadItemModel(item, metadata, new ModelResourceLocation(itemName, "inventory")); + ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher(); + mesher.register(item, metadata, new ModelResourceLocation(itemName, "inventory")); } - public static void loadInventoryModel(Block block, int metadata, String blockName) + public static void registerBlock(Block block, int metadata, String blockName) { - loadInventoryModel(Item.getItemFromBlock(block), metadata, blockName); + registerItem(Item.getItemFromBlock(block), metadata, blockName); } - public static void loadInventoryModel(Block block, String blockName) + public static void registerBlock(Block block, String blockName) { - loadInventoryModel(block, 0, blockName); + registerBlock(block, 0, blockName); } - public static void loadInventoryModel(Item item, String itemName) + public static void registerItem(Item item, String itemName) { - loadInventoryModel(item, 0, itemName); + registerItem(item, 0, itemName); } } diff --git a/src/main/resources/assets/ironchest/blockstates/BlockIronChest.json b/src/main/resources/assets/ironchest/blockstates/BlockIronChest.json deleted file mode 100755 index 5b108aa..0000000 --- a/src/main/resources/assets/ironchest/blockstates/BlockIronChest.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "ironchest:BlockIronChest" } - } -} From f256d4060cdc6a688c27c6583a8961ae05a207de Mon Sep 17 00:00:00 2001 From: Adubbz Date: Sat, 27 Sep 2014 13:28:15 +1000 Subject: [PATCH 53/80] Crystal chests now render their contents again --- .../ironchest/client/TileEntityIronChestRenderer.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index a3866c9..e2ca52d 100755 --- a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -24,7 +24,9 @@ import java.util.Map; import java.util.Random; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelChest; +import net.minecraft.client.renderer.entity.RenderEntityItem; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -57,7 +59,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer } private Random random; - private RenderItem itemRenderer; + private RenderEntityItem itemRenderer; private ModelChest model; private static float[][] shifts = { { 0.3F, 0.45F, 0.3F }, { 0.7F, 0.45F, 0.3F }, { 0.3F, 0.45F, 0.7F }, { 0.7F, 0.45F, 0.7F }, { 0.3F, 0.1F, 0.3F }, @@ -67,7 +69,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { model = new ModelChest(); random = new Random(); - /*itemRenderer = new RenderItem(null, null) { + itemRenderer = new RenderEntityItem(Minecraft.getMinecraft().getRenderManager(), Minecraft.getMinecraft().getRenderItem()); /*{ @Override public byte getMiniBlockCount(ItemStack stack, byte original) { return SignedBytes.saturatedCast(Math.min(stack.stackSize / 32, 15) + 1); @@ -84,8 +86,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer public boolean shouldSpreadItems() { return false; } - }; - itemRenderer.setRenderManager(RenderManager.instance);*/ + };*/ } public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick) @@ -168,7 +169,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer glRotatef(timeD, 0.0F, 1.0F, 0.0F); glScalef(blockScale, blockScale, blockScale); customitem.setEntityItemStack(item); - //itemRenderer.doRender(customitem, 0, 0, 0, 0, 0); + itemRenderer.doRender(customitem, 0, 0, 0, 0, 0); glPopMatrix(); } glEnable(2896 /* GL_LIGHTING */); From 7f2e8e8c3042dc33334109cd3845e2a8276f470a Mon Sep 17 00:00:00 2001 From: Adubbz Date: Sat, 27 Sep 2014 14:09:22 +1000 Subject: [PATCH 54/80] Fixed chests having incorrect drops --- src/main/java/cpw/mods/ironchest/BlockIronChest.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index bc543a8..1757b68 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -13,7 +13,6 @@ package cpw.mods.ironchest; import java.util.List; import java.util.Random; -import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; @@ -24,7 +23,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; @@ -181,11 +179,11 @@ public class BlockIronChest extends BlockContainer } } - /*@Override - public int damageDropped(int i) + @Override + public int damageDropped(IBlockState state) { - return i; - }*/ + return IronChestType.validateMeta(((IronChestType)state.getValue(VARIANT_PROP)).ordinal()); + } @Override public void breakBlock(World world, BlockPos pos, IBlockState blockState) From 0e3aeb00517b39e206fef062cb367170d4a05d8d Mon Sep 17 00:00:00 2001 From: Adubbz Date: Sat, 27 Sep 2014 14:16:39 +1000 Subject: [PATCH 55/80] Fixed weird lighting when chests are placed near banners. Props to Tahg for picking this one up (and finding the fix!). --- .../cpw/mods/ironchest/client/TileEntityIronChestRenderer.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index e2ca52d..a28bacd 100755 --- a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -106,7 +106,6 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer bindTexture(locations.get(type)); glPushMatrix(); - glEnable(32826 /* GL_RESCALE_NORMAL_EXT */); glColor4f(1.0F, 1.0F, 1.0F, 1.0F); glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); glScalef(1.0F, -1F, -1F); @@ -132,7 +131,6 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer model.chestLid.rotateAngleX = -((lidangle * 3.141593F) / 2.0F); // Render the chest itself model.renderAll(); - glDisable(32826 /* GL_RESCALE_NORMAL_EXT */); glPopMatrix(); glColor4f(1.0F, 1.0F, 1.0F, 1.0F); if (type.isTransparent() && tile.getDistanceSq(this.rendererDispatcher.field_147560_j, this.rendererDispatcher.field_147561_k, this.rendererDispatcher.field_147558_l) < 128d) { From 4e1b452bde84c537e9cb90c980e18800899522ba Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Tue, 30 Sep 2014 20:53:12 -0400 Subject: [PATCH 56/80] update all mappings but one for latest FML --- src/main/java/cpw/mods/ironchest/BlockIronChest.java | 8 ++++---- src/main/java/cpw/mods/ironchest/ItemIronChest.java | 2 +- src/main/java/cpw/mods/ironchest/RegistryHelper.java | 4 ++-- .../java/cpw/mods/ironchest/TileEntityIronChest.java | 9 +++++---- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index 1757b68..b6d8ba3 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -44,7 +44,7 @@ public class BlockIronChest extends BlockContainer { super(Material.iron); - this.setDefaultBlockState(this.blockState.getBaseState().withProperty(VARIANT_PROP, IronChestType.IRON)); + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT_PROP, IronChestType.IRON)); this.setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); this.setHardness(3.0F); @@ -114,13 +114,13 @@ public class BlockIronChest extends BlockContainer } @Override - public IBlockState getBlockStateFromMeta(int meta) + public IBlockState getStateFromMeta(int meta) { - return this.getDefaultBlockState().withProperty(VARIANT_PROP, IronChestType.values()[meta]); + return this.getDefaultState().withProperty(VARIANT_PROP, IronChestType.values()[meta]); } @Override - public int getMetaFromBlockState(IBlockState blockState) + public int getMetaFromState(IBlockState blockState) { return ((IronChestType)blockState.getValue(VARIANT_PROP)).ordinal(); } diff --git a/src/main/java/cpw/mods/ironchest/ItemIronChest.java b/src/main/java/cpw/mods/ironchest/ItemIronChest.java index 79d25ee..4b3f841 100755 --- a/src/main/java/cpw/mods/ironchest/ItemIronChest.java +++ b/src/main/java/cpw/mods/ironchest/ItemIronChest.java @@ -20,7 +20,7 @@ public class ItemIronChest extends ItemBlock { super(block); - this.setMaxDurability(0); + this.setMaxDamage(0); this.setHasSubtypes(true); } diff --git a/src/main/java/cpw/mods/ironchest/RegistryHelper.java b/src/main/java/cpw/mods/ironchest/RegistryHelper.java index 24b3089..f9a21c8 100644 --- a/src/main/java/cpw/mods/ironchest/RegistryHelper.java +++ b/src/main/java/cpw/mods/ironchest/RegistryHelper.java @@ -49,8 +49,8 @@ public class RegistryHelper while (iterator.hasNext()) { IBlockState iblockstate = (IBlockState)iterator.next(); - int id = Block.blockRegistry.getIDForObject(block) << 4 | block.getMetaFromBlockState(iblockstate); - Block.field_176229_d.func_148746_a(iblockstate, id); + int id = Block.blockRegistry.getIDForObject(block) << 4 | block.getMetaFromState(iblockstate); + Block.BLOCK_STATE_IDS.put(iblockstate, id); } return block; diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 558412d..3e9123c 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -208,13 +208,13 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl } @Override - public String getCommandSenderName() + public String getName() { - return this.hasName() ? this.customName : type.name(); + return this.hasCustomName() ? this.customName : type.name(); } @Override - public boolean hasName() + public boolean hasCustomName() { return this.customName != null && this.customName.length() > 0; } @@ -271,7 +271,7 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl nbttagcompound.setTag("Items", nbttaglist); nbttagcompound.setByte("facing", (byte)facing); - if (this.hasName()) + if (this.hasCustomName()) { nbttagcompound.setString("CustomName", this.customName); } @@ -570,4 +570,5 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl { return "IronChest:" + type.name(); } + } From ca80c91f2fcdd168545e0c85a40c717c22e8199e Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Wed, 1 Oct 2014 22:20:58 -0400 Subject: [PATCH 57/80] update build.gradle to use 1.8 FML --- build.gradle | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index a24a928..2979a84 100755 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ buildscript { } // Apply the forge plugin - this adds all the magic for automatically obfuscating, deobfuscating etc -apply plugin: 'forge' +apply plugin: 'fml' // This is a simple flatdir repository for "uploadArchives" when you don't have a remote repo to target repositories { @@ -37,7 +37,8 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { - version = "1.7.10-10.13.0.1150" + version = "1.8-7.10.93.1001-1.8" + mappings = 'snapshot_20140930' } // This wrangles the resources for the jar files- stuff like textures and languages From ccaed698845a3c4c9b0e9e277958d50905872ffb Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Wed, 1 Oct 2014 23:03:27 -0400 Subject: [PATCH 58/80] fix naming, remove some excess imports --- src/main/java/cpw/mods/ironchest/BlockIronChest.java | 2 +- src/main/java/cpw/mods/ironchest/RegistryHelper.java | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index b6d8ba3..a93b0c1 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -59,7 +59,7 @@ public class BlockIronChest extends BlockContainer } @Override - public boolean renderAsNormalBlock() + public boolean isFullCube() { return false; } diff --git a/src/main/java/cpw/mods/ironchest/RegistryHelper.java b/src/main/java/cpw/mods/ironchest/RegistryHelper.java index f9a21c8..c403719 100644 --- a/src/main/java/cpw/mods/ironchest/RegistryHelper.java +++ b/src/main/java/cpw/mods/ironchest/RegistryHelper.java @@ -10,7 +10,6 @@ ******************************************************************************/ package cpw.mods.ironchest; -import java.lang.reflect.Constructor; import java.util.Iterator; import java.util.Map; @@ -18,17 +17,9 @@ import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; -import net.minecraftforge.fml.common.FMLLog; -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.LoaderException; -import net.minecraftforge.fml.common.LoaderState; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; -import net.minecraftforge.fml.common.registry.GameData; import net.minecraftforge.fml.common.registry.GameRegistry; -import org.apache.logging.log4j.Level; - -import com.google.common.collect.ObjectArrays; public class RegistryHelper { From beb5ebb2e1bc3a12eb258bd86823b1c7dae3510f Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Mon, 6 Oct 2014 16:32:07 -0400 Subject: [PATCH 59/80] update stuff in prep for release --- build.gradle | 2 +- .../cpw/mods/ironchest/IronChestType.java | 27 ++++++++++++++++--- .../cpw/mods/ironchest/RegistryHelper.java | 2 +- .../mods/ironchest/client/ClientProxy.java | 6 ++--- .../client/IronChestRenderHelper.java | 4 +-- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 2979a84..0ba7742 100755 --- a/build.gradle +++ b/build.gradle @@ -37,7 +37,7 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { - version = "1.8-7.10.93.1001-1.8" + version = "1.8-7.10.99.1005-1.8" mappings = 'snapshot_20140930' } diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 9849323..78ad873 100755 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -15,6 +15,7 @@ import java.util.Arrays; import java.util.List; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; @@ -114,7 +115,7 @@ public enum IronChestType implements IStringSerializable { generateRecipesForType(blockResult, previous, typ); ItemStack chest = new ItemStack(blockResult, 1, typ.ordinal()); - if (typ.isValidForCreativeMode()) GameRegistry.registerCustomItemStack(typ.friendlyName, chest); + //if (typ.isValidForCreativeMode()) GameRegistry.registerCustomItemStack(typ.friendlyName, chest);//TODO fix this!! if (typ.tieredChest) previous = chest; } } @@ -151,13 +152,33 @@ public enum IronChestType implements IStringSerializable { return Blocks.dirt; } + else if (mat.equals("ingotIron"))//TODO get rid of this when forge is out + { + return Items.iron_ingot; + } + else if (mat.equals("ingotGold"))//TODO get rid of this when forge is out + { + return Items.gold_ingot; + } + else if (mat.equals("gemDiamond"))//TODO get rid of this when forge is out + { + return Items.diamond; + } + else if (mat.equals("blockGlass"))//TODO get rid of this when forge is out + { + return Blocks.glass; + } + else if(mat.equals("plankWood"))//TODO get rid of this when forge is out + { + return Blocks.planks; + } return mat; } public static void addRecipe(ItemStack is, Object... parts) { - //ShapedOreRecipe oreRecipe = new ShapedOreRecipe(is, parts); - //GameRegistry.addRecipe(oreRecipe); + //ShapedOreRecipe oreRecipe = new ShapedOreRecipe(is, parts);//TODO re-enable this as shaped instead use GameRegistry.addRecipe(oreRecipe); + //GameRegistry.addRecipe(is, parts); } public int getRowCount() diff --git a/src/main/java/cpw/mods/ironchest/RegistryHelper.java b/src/main/java/cpw/mods/ironchest/RegistryHelper.java index c403719..d0ef8c1 100644 --- a/src/main/java/cpw/mods/ironchest/RegistryHelper.java +++ b/src/main/java/cpw/mods/ironchest/RegistryHelper.java @@ -31,7 +31,7 @@ public class RegistryHelper block = GameRegistry.registerBlock(block, itemclass, name, itemCtorArgs); Item associatedItem = GameRegistry.findItem("ironchest", name); - Map itemBlockMap = (Map)ObfuscationReflectionHelper.getPrivateValue(Item.class, null, "field_179220_a"); + Map itemBlockMap = (Map)ObfuscationReflectionHelper.getPrivateValue(Item.class, null, "BLOCK_TO_ITEM", "field_179220_a"); if (!itemBlockMap.containsKey(block)) itemBlockMap.put(block, associatedItem); diff --git a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java index ea88561..9c45f41 100755 --- a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -11,7 +11,7 @@ package cpw.mods.ironchest.client; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.tileentity.TileEntityRendererChestHelper; +import net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer; import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; @@ -36,8 +36,8 @@ public class ClientProxy extends CommonProxy ModelHelper.registerBlock(IronChest.ironChestBlock, chestType.ordinal(), "ironchest:BlockIronChest"); } } - - TileEntityRendererChestHelper.instance = new IronChestRenderHelper(); + + TileEntityItemStackRenderer.instance = new IronChestRenderHelper(); } @Override diff --git a/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java index 232fda9..4c0ca28 100755 --- a/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java +++ b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java @@ -13,7 +13,7 @@ package cpw.mods.ironchest.client; import java.util.Map; import net.minecraft.block.Block; -import net.minecraft.client.renderer.tileentity.TileEntityRendererChestHelper; +import net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.item.ItemStack; @@ -23,7 +23,7 @@ import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; -public class IronChestRenderHelper extends TileEntityRendererChestHelper +public class IronChestRenderHelper extends TileEntityItemStackRenderer { private Map itemRenders = Maps.newHashMap(); From 77d988937f912fad9c2ea73570a6efc3faa02d66 Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Wed, 26 Nov 2014 06:55:24 -0500 Subject: [PATCH 60/80] update to forge --- build.gradle | 4 +-- .../java/cpw/mods/ironchest/IronChest.java | 15 ++--------- .../cpw/mods/ironchest/IronChestType.java | 25 +++---------------- .../cpw/mods/ironchest/ItemChestChanger.java | 21 +++++++++------- .../cpw/mods/ironchest/RegistryHelper.java | 14 +++-------- 5 files changed, 22 insertions(+), 57 deletions(-) diff --git a/build.gradle b/build.gradle index 0ba7742..a82f6d0 100755 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ buildscript { } // Apply the forge plugin - this adds all the magic for automatically obfuscating, deobfuscating etc -apply plugin: 'fml' +apply plugin: 'forge' // This is a simple flatdir repository for "uploadArchives" when you don't have a remote repo to target repositories { @@ -37,7 +37,7 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { - version = "1.8-7.10.99.1005-1.8" + version = "1.8-11.14.0.1239-1.8" mappings = 'snapshot_20140930' } diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 1b34369..70b1885 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -10,28 +10,17 @@ ******************************************************************************/ package cpw.mods.ironchest; -import java.util.HashMap; -import java.util.Map.Entry; - -import cpw.mods.ironchest.client.ModelHelper; -import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.util.RegistrySimple; -import net.minecraftforge.fml.client.FMLClientHandler; -import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; -import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.oredict.OreDictionary; @Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:FML@[7.2,)") public class IronChest @@ -69,7 +58,7 @@ public class IronChest GameRegistry.registerTileEntityWithAlternatives(typ.clazz, "IronChest." + typ.name(), typ.name()); proxy.registerTileEntitySpecialRenderer(typ); } - //OreDictionary.registerOre("chestWood", Blocks.chest); + OreDictionary.registerOre("chestWood", Blocks.chest); IronChestType.registerBlocksAndRecipes(ironChestBlock); ChestChangerType.generateRecipes(); NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy); diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index 78ad873..c2f14f9 100755 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -23,6 +23,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagByte; import net.minecraft.util.IStringSerializable; import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.oredict.ShapedOreRecipe; public enum IronChestType implements IStringSerializable { @@ -152,33 +153,13 @@ public enum IronChestType implements IStringSerializable { return Blocks.dirt; } - else if (mat.equals("ingotIron"))//TODO get rid of this when forge is out - { - return Items.iron_ingot; - } - else if (mat.equals("ingotGold"))//TODO get rid of this when forge is out - { - return Items.gold_ingot; - } - else if (mat.equals("gemDiamond"))//TODO get rid of this when forge is out - { - return Items.diamond; - } - else if (mat.equals("blockGlass"))//TODO get rid of this when forge is out - { - return Blocks.glass; - } - else if(mat.equals("plankWood"))//TODO get rid of this when forge is out - { - return Blocks.planks; - } return mat; } public static void addRecipe(ItemStack is, Object... parts) { - //ShapedOreRecipe oreRecipe = new ShapedOreRecipe(is, parts);//TODO re-enable this as shaped instead use GameRegistry.addRecipe(oreRecipe); - //GameRegistry.addRecipe(is, parts); + ShapedOreRecipe oreRecipe = new ShapedOreRecipe(is, parts); + GameRegistry.addRecipe(oreRecipe); } public int getRowCount() diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java index 7d380f4..df19706 100755 --- a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -10,6 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest; +import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -17,6 +18,8 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.relauncher.Side; @@ -35,11 +38,11 @@ public class ItemChestChanger extends Item this.setCreativeTab(CreativeTabs.tabMisc); } - /*@Override - public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int X, int Y, int Z, int side, float hitX, float hitY, float hitZ) + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) { if (world.isRemote) return false; - TileEntity te = world.getTileEntity(X, Y, Z); + TileEntity te = world.getTileEntity(pos); TileEntityIronChest newchest; if (te != null && te instanceof TileEntityIronChest) { @@ -67,7 +70,7 @@ public class ItemChestChanger extends Item ItemStack[] chestContents = ObfuscationReflectionHelper.getPrivateValue(TileEntityChest.class, tec, 0); System.arraycopy(chestContents, 0, newchest.chestContents, 0, Math.min(newSize, chestContents.length)); BlockIronChest block = IronChest.ironChestBlock; - block.dropContent(newSize, tec, world, tec.xCoord, tec.yCoord, tec.zCoord); + block.dropContent(newSize, tec, world, tec.getPos()); newchest.setFacing((byte) tec.getBlockMetadata()); newchest.sortTopStacks(); for (int i = 0; i < Math.min(newSize, chestContents.length); i++) @@ -75,24 +78,24 @@ public class ItemChestChanger extends Item chestContents[i] = null; } // Clear the old block out - world.setBlock(X, Y, Z, Blocks.air, 0, 3); + world.setBlockState(pos, Blocks.air.getDefaultState(), 3); // Force the Chest TE to reset it's knowledge of neighbouring blocks tec.updateContainingBlockInfo(); // Force the Chest TE to update any neighbours so they update next // tick tec.checkForAdjacentChests(); // And put in our block instead - world.setBlock(X, Y, Z, block, newchest.getType().ordinal(), 3); + world.setBlockState(pos, block.getStateFromMeta(newchest.getType().ordinal()), 3); } else { return false; } - world.setTileEntity(X, Y, Z, newchest); - world.setBlockMetadataWithNotify(X, Y, Z, newchest.getType().ordinal(), 3); + world.setTileEntity(pos, newchest); + world.setBlockState(pos, IronChest.ironChestBlock.getStateFromMeta(newchest.getType().ordinal()), 3); stack.stackSize = 0; return true; - }*/ + } public int getTargetChestOrdinal(int sourceOrdinal) { diff --git a/src/main/java/cpw/mods/ironchest/RegistryHelper.java b/src/main/java/cpw/mods/ironchest/RegistryHelper.java index d0ef8c1..53d9a58 100644 --- a/src/main/java/cpw/mods/ironchest/RegistryHelper.java +++ b/src/main/java/cpw/mods/ironchest/RegistryHelper.java @@ -23,27 +23,19 @@ import net.minecraftforge.fml.common.registry.GameRegistry; public class RegistryHelper { - /** - * A temporary workaround whilst GameRegistry hasn't been fully updated to support 1.8 - */ public static Block registerBlock(Block block, Class itemclass, String name, Object... itemCtorArgs) { block = GameRegistry.registerBlock(block, itemclass, name, itemCtorArgs); - Item associatedItem = GameRegistry.findItem("ironchest", name); - - Map itemBlockMap = (Map)ObfuscationReflectionHelper.getPrivateValue(Item.class, null, "BLOCK_TO_ITEM", "field_179220_a"); - - if (!itemBlockMap.containsKey(block)) itemBlockMap.put(block, associatedItem); - + Iterator iterator = block.getBlockState().getValidStates().iterator(); - + while (iterator.hasNext()) { IBlockState iblockstate = (IBlockState)iterator.next(); int id = Block.blockRegistry.getIDForObject(block) << 4 | block.getMetaFromState(iblockstate); Block.BLOCK_STATE_IDS.put(iblockstate, id); } - + return block; } } From 4e8a047082fa85b1f854afd7ffbfed65665b750d Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Tue, 2 Dec 2014 14:34:29 -0500 Subject: [PATCH 61/80] update to latest forge & mappings --- build.gradle | 3 +-- src/main/java/cpw/mods/ironchest/TileEntityIronChest.java | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index a82f6d0..d746c42 100755 --- a/build.gradle +++ b/build.gradle @@ -37,8 +37,7 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { - version = "1.8-11.14.0.1239-1.8" - mappings = 'snapshot_20140930' + version = "1.8-11.14.0.1251-1.8" } // This wrangles the resources for the jar files- stuff like textures and languages diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 3e9123c..1f3d111 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -24,10 +24,8 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.Packet; import net.minecraft.server.gui.IUpdatePlayerListBox; -import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityLockable; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.IChatComponent; public class TileEntityIronChest extends TileEntityLockable implements IUpdatePlayerListBox, IInventory { @@ -551,7 +549,7 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl } @Override - public void clearInventory() + public void clear() { for (int i = 0; i < this.chestContents.length; ++i) { From 9a26003f868b1e7c9d86658cc1192531dc82c697 Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Tue, 2 Dec 2014 18:25:03 -0200 Subject: [PATCH 62/80] Changes and stuff --- .../cpw/mods/ironchest/BlockIronChest.java | 49 +++++----- .../cpw/mods/ironchest/ChestChangerType.java | 6 +- .../java/cpw/mods/ironchest/IronChest.java | 8 +- .../mods/ironchest/IronChestAIOcelotSit.java | 12 ++- .../cpw/mods/ironchest/IronChestType.java | 7 +- .../cpw/mods/ironchest/ItemChestChanger.java | 3 - .../ironchest/OcelotsSitOnChestsHandler.java | 6 +- .../mods/ironchest/TileEntityIronChest.java | 25 +++-- .../client/TileEntityIronChestRenderer.java | 95 +++++++++---------- 9 files changed, 107 insertions(+), 104 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index a93b0c1..d9cdeb5 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -10,6 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest; +import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -20,6 +21,7 @@ import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -32,10 +34,14 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.MathHelper; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import com.google.common.collect.Lists; + public class BlockIronChest extends BlockContainer { public static final PropertyEnum VARIANT_PROP = PropertyEnum.create("variant", IronChestType.class); @@ -80,10 +86,10 @@ public class BlockIronChest extends BlockContainer return true; } - /*if (world.isSideSolid(i, j + 1, k, ForgeDirection.DOWN)) + if (world.isSideSolid(pos.add(0, 1, 0), EnumFacing.DOWN)) { return true; - }*/ + } if (world.isRemote) { @@ -131,15 +137,15 @@ public class BlockIronChest extends BlockContainer return new BlockState(this, new IProperty[] { VARIANT_PROP }); } - /*@Override - public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) + @Override + public ArrayList getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { ArrayList items = Lists.newArrayList(); - ItemStack stack = new ItemStack(this,1,metadata); - IronChestType.values()[IronChestType.validateMeta(metadata)].adornItemDrop(stack); + ItemStack stack = new ItemStack(this,1,getMetaFromState(state)); + IronChestType.values()[IronChestType.validateMeta(getMetaFromState(state))].adornItemDrop(stack); items.add(stack); return items; - }*/ + } @Override public void onBlockAdded(World world, BlockPos pos, IBlockState blockState) @@ -234,20 +240,20 @@ public class BlockIronChest extends BlockContainer } } - /*@Override - public float getExplosionResistance(Entity par1Entity, World world, int x, int y, int z, double explosionX, double explosionY, double explosionZ) + @Override + public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion) { - TileEntity te = world.getTileEntity(x, y, z); + TileEntity te = world.getTileEntity(pos); if (te instanceof TileEntityIronChest) { TileEntityIronChest teic = (TileEntityIronChest) te; if (teic.getType().isExplosionResistant()) { - return 10000f; + return 10000F; } } - return super.getExplosionResistance(par1Entity, world, x, y, z, explosionX, explosionY, explosionZ); - }*/ + return super.getExplosionResistance(world, pos, exploder, explosion); + } @Override public boolean hasComparatorInputOverride() { @@ -265,30 +271,29 @@ public class BlockIronChest extends BlockContainer return 0; } - /*private static final ForgeDirection[] validRotationAxes = new ForgeDirection[] { UP, DOWN }; + private static final EnumFacing[] validRotationAxes = new EnumFacing[] { EnumFacing.UP, EnumFacing.DOWN }; @Override - public ForgeDirection[] getValidRotations(World worldObj, int x, int y, int z) + public EnumFacing[] getValidRotations(World worldObj, BlockPos pos) { return validRotationAxes; } @Override - public boolean rotateBlock(World worldObj, int x, int y, int z, ForgeDirection axis) + public boolean rotateBlock(World worldObj, BlockPos pos, EnumFacing axis) { if (worldObj.isRemote) { return false; } - if (axis == UP || axis == DOWN) + if (axis == EnumFacing.UP || axis == EnumFacing.DOWN) { - TileEntity tileEntity = worldObj.getTileEntity(x, y, z); + TileEntity tileEntity = worldObj.getTileEntity(pos); if (tileEntity instanceof TileEntityIronChest) { TileEntityIronChest icte = (TileEntityIronChest) tileEntity; - icte.rotateAround(axis); + icte.rotateAround(); } return true; } return false; - }*/ - -} + } +} \ No newline at end of file diff --git a/src/main/java/cpw/mods/ironchest/ChestChangerType.java b/src/main/java/cpw/mods/ironchest/ChestChangerType.java index ebf2e95..1e6b4b3 100755 --- a/src/main/java/cpw/mods/ironchest/ChestChangerType.java +++ b/src/main/java/cpw/mods/ironchest/ChestChangerType.java @@ -14,14 +14,10 @@ import static cpw.mods.ironchest.IronChestType.IRON; import static cpw.mods.ironchest.IronChestType.OBSIDIAN; import static cpw.mods.ironchest.IronChestType.SILVER; import static cpw.mods.ironchest.IronChestType.WOOD; -import cpw.mods.ironchest.client.ModelHelper; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.fml.relauncher.Side; +import cpw.mods.ironchest.client.ModelHelper; public enum ChestChangerType { IRONGOLD(IRON, GOLD, "ironGoldUpgrade", "Iron to Gold Chest Upgrade", "mmm", "msm", "mmm"), diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 70b1885..1ddd1a6 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -12,6 +12,7 @@ package cpw.mods.ironchest; import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; @@ -40,8 +41,6 @@ public class IronChest PacketHandler.INSTANCE.ordinal(); } - private static boolean run = false; - @EventHandler public void load(FMLInitializationEvent evt) { @@ -63,9 +62,6 @@ public class IronChest ChestChangerType.generateRecipes(); NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy); proxy.registerRenderInformation(); -// if (OCELOTS_SITONCHESTS) -// { -// MinecraftForge.EVENT_BUS.register(new OcelotsSitOnChestsHandler()); -// } + MinecraftForge.EVENT_BUS.register(new OcelotsSitOnChestsHandler()); } } diff --git a/src/main/java/cpw/mods/ironchest/IronChestAIOcelotSit.java b/src/main/java/cpw/mods/ironchest/IronChestAIOcelotSit.java index 07e41f8..b704b65 100755 --- a/src/main/java/cpw/mods/ironchest/IronChestAIOcelotSit.java +++ b/src/main/java/cpw/mods/ironchest/IronChestAIOcelotSit.java @@ -2,6 +2,8 @@ package cpw.mods.ironchest; import net.minecraft.entity.ai.EntityAIOcelotSit; import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.util.BlockPos; +import net.minecraft.world.World; public class IronChestAIOcelotSit extends EntityAIOcelotSit { @@ -10,13 +12,13 @@ public class IronChestAIOcelotSit extends EntityAIOcelotSit super(par1EntityOcelot, par2); } -/* @Override - protected boolean func_151486_a(World world, int x, int y, int z) + @Override + protected boolean func_179488_a(World world, BlockPos pos) { - if (world.getBlock(x, y, z) == IronChest.ironChestBlock) + if (world.getBlockState(pos).getBlock() == IronChest.ironChestBlock) { return true; } - return super.func_151486_a(world, x, y, z); + return super.func_179488_a(world, pos); } -*/} +} diff --git a/src/main/java/cpw/mods/ironchest/IronChestType.java b/src/main/java/cpw/mods/ironchest/IronChestType.java index c2f14f9..6dd83b3 100755 --- a/src/main/java/cpw/mods/ironchest/IronChestType.java +++ b/src/main/java/cpw/mods/ironchest/IronChestType.java @@ -15,7 +15,6 @@ import java.util.Arrays; import java.util.List; import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; @@ -204,9 +203,6 @@ public enum IronChestType implements IStringSerializable return this == OBSIDIAN; } - private static String[] sideNames = { "top", "front", "side" }; - private static int[] sideMapping = { 0, 0, 2, 1, 2, 2, 2 }; - public Slot makeSlot(IInventory chestInventory, int index, int x, int y) { return new ValidatingSlot(chestInventory, index, x, y, this); @@ -216,6 +212,7 @@ public enum IronChestType implements IStringSerializable { return itemFilter == null || itemstack == null || itemstack.getItem() == itemFilter; } + public void adornItemDrop(ItemStack item) { if (this == DIRTCHEST9000) @@ -223,4 +220,4 @@ public enum IronChestType implements IStringSerializable item.setTagInfo("dirtchest", new NBTTagByte((byte) 1)); } } -} +} \ No newline at end of file diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java index df19706..50781ac 100755 --- a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -10,7 +10,6 @@ ******************************************************************************/ package cpw.mods.ironchest; -import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -22,8 +21,6 @@ import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; public class ItemChestChanger extends Item { diff --git a/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java b/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java index 135f4f5..ba6d2bd 100755 --- a/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java +++ b/src/main/java/cpw/mods/ironchest/OcelotsSitOnChestsHandler.java @@ -5,9 +5,11 @@ import java.util.List; import net.minecraft.entity.ai.EntityAIOcelotSit; import net.minecraft.entity.ai.EntityAITasks; import net.minecraft.entity.passive.EntityOcelot; +import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -/*public class OcelotsSitOnChestsHandler { +public class OcelotsSitOnChestsHandler { + @SubscribeEvent public void changeSittingTaskForOcelots(LivingEvent.LivingUpdateEvent evt) { @@ -24,4 +26,4 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; } } } -}*/ +} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 1f3d111..8bf2617 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -26,6 +26,7 @@ import net.minecraft.network.Packet; import net.minecraft.server.gui.IUpdatePlayerListBox; import net.minecraft.tileentity.TileEntityLockable; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumFacing; public class TileEntityIronChest extends TileEntityLockable implements IUpdatePlayerListBox, IInventory { @@ -519,13 +520,16 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl return type.acceptsStack(itemstack); } - - - /*void rotateAround(ForgeDirection axis) + void rotateAround() { - setFacing((byte)ForgeDirection.getOrientation(facing).getRotation(axis).ordinal()); - worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, IronChest.ironChestBlock, 2, getFacing()); - }*/ + facing++; + if(facing > EnumFacing.EAST.ordinal()) + { + facing = EnumFacing.NORTH.ordinal(); + } + setFacing(facing); + worldObj.addBlockEvent(pos, IronChest.ironChestBlock, 2, facing); + } public void wasPlaced(EntityLivingBase entityliving, ItemStack itemStack) { @@ -568,5 +572,10 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl { return "IronChest:" + type.name(); } - -} + + @Override + public boolean canRenderBreaking() + { + return true; + } +} \ No newline at end of file diff --git a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index a28bacd..223c915 100755 --- a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -10,25 +10,14 @@ ******************************************************************************/ package cpw.mods.ironchest.client; -import static org.lwjgl.opengl.GL11.glColor4f; -import static org.lwjgl.opengl.GL11.glDisable; -import static org.lwjgl.opengl.GL11.glEnable; -import static org.lwjgl.opengl.GL11.glPopMatrix; -import static org.lwjgl.opengl.GL11.glPushMatrix; -import static org.lwjgl.opengl.GL11.glRotatef; -import static org.lwjgl.opengl.GL11.glScalef; -import static org.lwjgl.opengl.GL11.glTranslatef; - -import java.util.HashMap; import java.util.Map; import java.util.Random; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelChest; +import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.entity.RenderEntityItem; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; @@ -37,17 +26,15 @@ import net.minecraft.util.ResourceLocation; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; +import com.google.common.primitives.SignedBytes; import cpw.mods.ironchest.BlockIronChest; import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.IronChestType; -import cpw.mods.ironchest.MappableItemStackWrapper; import cpw.mods.ironchest.TileEntityIronChest; public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { - private static Map renderList = new HashMap(); - private static Map locations; static { @@ -69,16 +56,12 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer { model = new ModelChest(); random = new Random(); - itemRenderer = new RenderEntityItem(Minecraft.getMinecraft().getRenderManager(), Minecraft.getMinecraft().getRenderItem()); /*{ + itemRenderer = new RenderEntityItem(Minecraft.getMinecraft().getRenderManager(), Minecraft.getMinecraft().getRenderItem()){ @Override - public byte getMiniBlockCount(ItemStack stack, byte original) { + public int func_177078_a(ItemStack stack) { return SignedBytes.saturatedCast(Math.min(stack.stackSize / 32, 15) + 1); } @Override - public byte getMiniItemCount(ItemStack stack, byte original) { - return SignedBytes.saturatedCast(Math.min(stack.stackSize / 32, 7) + 1); - } - @Override public boolean shouldBob() { return false; } @@ -86,10 +69,10 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer public boolean shouldSpreadItems() { return false; } - };*/ + }; } - public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick) + public void render(TileEntityIronChest tile, double x, double y, double z, float partialTick, int breakStage) { if (tile == null) { return; @@ -104,12 +87,23 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer type = (IronChestType)state.getValue(BlockIronChest.VARIANT_PROP); } - bindTexture(locations.get(type)); - glPushMatrix(); - glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F); - glScalef(1.0F, -1F, -1F); - glTranslatef(0.5F, 0.5F, 0.5F); + if (breakStage >= 0) + { + bindTexture(DESTROY_STAGES[breakStage]); + GlStateManager.matrixMode(5890); + GlStateManager.pushMatrix(); + GlStateManager.scale(4.0F, 4.0F, 1.0F); + GlStateManager.translate(0.0625F, 0.0625F, 0.0625F); + GlStateManager.matrixMode(5888); + } else + bindTexture(locations.get(type)); + GlStateManager.pushMatrix(); + if(type == IronChestType.CRYSTAL) + GlStateManager.disableCull(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.translate((float) x, (float) y + 1.0F, (float) z + 1.0F); + GlStateManager.scale(1.0F, -1F, -1F); + GlStateManager.translate(0.5F, 0.5F, 0.5F); int k = 0; if (facing == 2) { k = 180; @@ -123,16 +117,25 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer if (facing == 5) { k = -90; } - glRotatef(k, 0.0F, 1.0F, 0.0F); - glTranslatef(-0.5F, -0.5F, -0.5F); + GlStateManager.rotate(k, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(-0.5F, -0.5F, -0.5F); float lidangle = tile.prevLidAngle + (tile.lidAngle - tile.prevLidAngle) * partialTick; lidangle = 1.0F - lidangle; lidangle = 1.0F - lidangle * lidangle * lidangle; model.chestLid.rotateAngleX = -((lidangle * 3.141593F) / 2.0F); // Render the chest itself model.renderAll(); - glPopMatrix(); - glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + if (breakStage >= 0) + { + GlStateManager.matrixMode(5890); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + } + if(type == IronChestType.CRYSTAL) + GlStateManager.enableCull(); + GlStateManager.popMatrix(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + if (type.isTransparent() && tile.getDistanceSq(this.rendererDispatcher.field_147560_j, this.rendererDispatcher.field_147561_k, this.rendererDispatcher.field_147558_l) < 128d) { random.setSeed(254L); float shiftX; @@ -145,9 +148,8 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer shift = 8; blockScale = 0.85F; } - glPushMatrix(); - glDisable(2896 /* GL_LIGHTING */); - glTranslatef((float) x, (float) y, (float) z); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y, (float) z); EntityItem customitem = new EntityItem(this.getWorld()); customitem.hoverStart = 0f; for (ItemStack item : tile.getTopItemStacks()) { @@ -162,24 +164,21 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer shiftY = shifts[shift][1]; shiftZ = shifts[shift][2]; shift++; - glPushMatrix(); - glTranslatef(shiftX, shiftY, shiftZ); - glRotatef(timeD, 0.0F, 1.0F, 0.0F); - glScalef(blockScale, blockScale, blockScale); + GlStateManager.pushMatrix(); + GlStateManager.translate(shiftX, shiftY, shiftZ); + GlStateManager.rotate(timeD, 0.0F, 1.0F, 0.0F); + GlStateManager.scale(blockScale, blockScale, blockScale); customitem.setEntityItemStack(item); itemRenderer.doRender(customitem, 0, 0, 0, 0, 0); - glPopMatrix(); + GlStateManager.popMatrix(); } - glEnable(2896 /* GL_LIGHTING */); - glPopMatrix(); - glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); } } @Override - public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float partialTick, int p_180535_9_) + public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float partialTick, int breakStage) { - render((TileEntityIronChest) tileentity, x, y, z, partialTick); + render((TileEntityIronChest) tileentity, x, y, z, partialTick, breakStage); } - -} +} \ No newline at end of file From 887c6ca1c1cc4a8ea86a76a8ee1d9202622ab403 Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Mon, 12 Jan 2015 23:13:32 -0500 Subject: [PATCH 63/80] fix server side crash --- src/main/java/cpw/mods/ironchest/ChestChangerType.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/ChestChangerType.java b/src/main/java/cpw/mods/ironchest/ChestChangerType.java index 1e6b4b3..e6c6dc7 100755 --- a/src/main/java/cpw/mods/ironchest/ChestChangerType.java +++ b/src/main/java/cpw/mods/ironchest/ChestChangerType.java @@ -16,8 +16,10 @@ import static cpw.mods.ironchest.IronChestType.SILVER; import static cpw.mods.ironchest.IronChestType.WOOD; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.registry.GameRegistry; import cpw.mods.ironchest.client.ModelHelper; +import net.minecraftforge.fml.relauncher.Side; public enum ChestChangerType { IRONGOLD(IRON, GOLD, "ironGoldUpgrade", "Iron to Gold Chest Upgrade", "mmm", "msm", "mmm"), @@ -60,8 +62,8 @@ public enum ChestChangerType { { item = new ItemChestChanger(this); GameRegistry.registerItem(item, itemName); - ModelHelper.registerItem(item, "ironchest:" + itemName); - + if(FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) + ModelHelper.registerItem(item, "ironchest:" + itemName); return item; } From d725492ff0b7da6a578f53342a7faa56836d2f83 Mon Sep 17 00:00:00 2001 From: Mitchell Date: Mon, 26 Jan 2015 19:13:38 -0400 Subject: [PATCH 64/80] Possible fix server startup crash Can't test this because when compiling on my computer I get some error to do with git (I don't understand it) If someone wants to test it please do so, I just know the Minecraft class is client side only so I'm guessing that's the reason servers are continuing to crash on startup. --- src/main/java/cpw/mods/ironchest/IronChest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 1ddd1a6..c190510 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -22,6 +22,8 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.relauncher.Side; @Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:FML@[7.2,)") public class IronChest @@ -50,7 +52,7 @@ public class IronChest ironChestBlock = new BlockIronChest(); RegistryHelper.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); - Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().func_178123_a(ironChestBlock); + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().func_178123_a(ironChestBlock); for (IronChestType typ : IronChestType.values()) { From b4dd5d1a676505a72f7c109e5061353305bb8333 Mon Sep 17 00:00:00 2001 From: Mitchell Date: Wed, 28 Jan 2015 19:19:38 -0400 Subject: [PATCH 65/80] Fix chests not keeping content on update I'm not sure how much of this code is actually needed but after changing many parts it seems to make the chests keep their contents. Also made it so instead of setting the stack size to 0, if the player is in creative it remains the same, if not it subtracts 1 from the stack size (incase somehow they get a stack of more than 1) All upgrades appear to work and all contents seem to remain in chest. This fixes #31.1 --- .../cpw/mods/ironchest/ItemChestChanger.java | 90 ++++++++----------- 1 file changed, 36 insertions(+), 54 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java index 50781ac..62515a6 100755 --- a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -38,60 +38,42 @@ public class ItemChestChanger extends Item @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) { - if (world.isRemote) return false; - TileEntity te = world.getTileEntity(pos); - TileEntityIronChest newchest; - if (te != null && te instanceof TileEntityIronChest) - { - TileEntityIronChest ironchest = (TileEntityIronChest) te; - newchest = ironchest.applyUpgradeItem(this); - if (newchest == null) - { - return false; - } - } - else if (te != null && te instanceof TileEntityChest) - { - TileEntityChest tec = (TileEntityChest) te; - if (tec.numPlayersUsing > 0) - { - return false; - } - if (!getType().canUpgrade(IronChestType.WOOD)) - { - return false; - } - // Force old TE out of the world so that adjacent chests can update - newchest = IronChestType.makeEntity(getTargetChestOrdinal(IronChestType.WOOD.ordinal())); - int newSize = newchest.chestContents.length; - ItemStack[] chestContents = ObfuscationReflectionHelper.getPrivateValue(TileEntityChest.class, tec, 0); - System.arraycopy(chestContents, 0, newchest.chestContents, 0, Math.min(newSize, chestContents.length)); - BlockIronChest block = IronChest.ironChestBlock; - block.dropContent(newSize, tec, world, tec.getPos()); - newchest.setFacing((byte) tec.getBlockMetadata()); - newchest.sortTopStacks(); - for (int i = 0; i < Math.min(newSize, chestContents.length); i++) - { - chestContents[i] = null; - } - // Clear the old block out - world.setBlockState(pos, Blocks.air.getDefaultState(), 3); - // Force the Chest TE to reset it's knowledge of neighbouring blocks - tec.updateContainingBlockInfo(); - // Force the Chest TE to update any neighbours so they update next - // tick - tec.checkForAdjacentChests(); - // And put in our block instead - world.setBlockState(pos, block.getStateFromMeta(newchest.getType().ordinal()), 3); - } - else - { - return false; - } - world.setTileEntity(pos, newchest); - world.setBlockState(pos, IronChest.ironChestBlock.getStateFromMeta(newchest.getType().ordinal()), 3); - stack.stackSize = 0; - return true; + if (world.isRemote) return false; + TileEntity te = world.getTileEntity(pos); + TileEntityIronChest newchest = new TileEntityIronChest(); + ItemStack[] chestContents = new ItemStack[27]; + if (te != null) { + if (te instanceof TileEntityIronChest) { + chestContents = ((TileEntityIronChest) te).chestContents; + newchest = IronChestType.makeEntity(this.getTargetChestOrdinal(this.type.ordinal())); + if (newchest == null) return false; + } else if (te instanceof TileEntityChest) { + if (((TileEntityChest) te).numPlayersUsing > 0) return false; + if (!getType().canUpgrade(IronChestType.WOOD)) return false; + chestContents = new ItemStack[((TileEntityChest) te).getSizeInventory()]; + for (int i = 0; i < chestContents.length; i ++) chestContents[i] = ((TileEntityChest) te).getStackInSlot(i); + newchest = IronChestType.makeEntity(IronChestType.IRON.ordinal()); + } + } + + te.updateContainingBlockInfo(); + if (te instanceof TileEntityChest) ((TileEntityChest) te).checkForAdjacentChests(); + + world.removeTileEntity(pos); + world.setBlockToAir(pos); + + world.setTileEntity(pos, newchest); + world.setBlockState(pos, IronChest.ironChestBlock.getStateFromMeta(newchest.getType().ordinal()), 3); + + world.markBlockForUpdate(pos); + + TileEntity te2 = world.getTileEntity(pos); + if (te2 instanceof TileEntityIronChest) { + ((TileEntityIronChest) te2).setContents(chestContents); + } + + stack.stackSize = player.capabilities.isCreativeMode ? stack.stackSize : stack.stackSize - 1; + return true; } public int getTargetChestOrdinal(int sourceOrdinal) From a29c12ab849da94625d991337db2bd877fc030a4 Mon Sep 17 00:00:00 2001 From: Mitchell Date: Wed, 28 Jan 2015 19:24:09 -0400 Subject: [PATCH 66/80] setContents method, remove applyUpgradeItem applyUpgradeItem is no longer needed because it's now being completely done from ItemChestChanger setContents added for ItemChestChanger --- .../mods/ironchest/TileEntityIronChest.java | 33 +++++++------------ 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 8bf2617..064a7a0 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -59,6 +59,16 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl { return chestContents; } + + public void setContents(ItemStack[] contents) { + chestContents = new ItemStack[getSizeInventory()]; + for (int i = 0; i < contents.length; i ++) { + if (i < chestContents.length) { + chestContents[i] = contents[i]; + } + } + inventoryTouched = true; + } @Override public int getSizeInventory() @@ -402,27 +412,6 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl this.facing = facing2; } - public TileEntityIronChest applyUpgradeItem(ItemChestChanger itemChestChanger) - { - if (numUsingPlayers > 0) - { - return null; - } - if (!itemChestChanger.getType().canUpgrade(this.getType())) - { - return null; - } - TileEntityIronChest newEntity = IronChestType.makeEntity(itemChestChanger.getTargetChestOrdinal(getType().ordinal())); - int newSize = newEntity.chestContents.length; - System.arraycopy(chestContents, 0, newEntity.chestContents, 0, Math.min(newSize, chestContents.length)); - BlockIronChest block = IronChest.ironChestBlock; - block.dropContent(newSize, this, this.worldObj, pos); - newEntity.setFacing(facing); - newEntity.sortTopStacks(); - newEntity.ticksSinceSync = -1; - return newEntity; - } - public ItemStack[] getTopItemStacks() { return topStacks; @@ -578,4 +567,4 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl { return true; } -} \ No newline at end of file +} From e53c319b9bb3b8ace69e7cab86cb695079571607 Mon Sep 17 00:00:00 2001 From: Mitchell Date: Thu, 29 Jan 2015 10:39:59 -0400 Subject: [PATCH 67/80] Remove unused imports --- src/main/java/cpw/mods/ironchest/ItemChestChanger.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java index 62515a6..d04343f 100755 --- a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -20,7 +20,6 @@ import net.minecraft.tileentity.TileEntityChest; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; public class ItemChestChanger extends Item { From 3f69b703cd759398d7e45d43fae4b7cfa5231375 Mon Sep 17 00:00:00 2001 From: Mitchell Date: Thu, 29 Jan 2015 10:40:56 -0400 Subject: [PATCH 68/80] Remove unused imports --- src/main/java/cpw/mods/ironchest/RegistryHelper.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/RegistryHelper.java b/src/main/java/cpw/mods/ironchest/RegistryHelper.java index 53d9a58..770f608 100644 --- a/src/main/java/cpw/mods/ironchest/RegistryHelper.java +++ b/src/main/java/cpw/mods/ironchest/RegistryHelper.java @@ -11,13 +11,10 @@ package cpw.mods.ironchest; import java.util.Iterator; -import java.util.Map; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; -import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.common.registry.GameRegistry; From 82c2dcc995b82ed2ec507f74f36f7cff26f04970 Mon Sep 17 00:00:00 2001 From: 61352151511 Date: Thu, 29 Jan 2015 12:47:46 -0400 Subject: [PATCH 69/80] Remove unused imports, re-add invtweaks, update to new mcp mappings --- .../java/invtweaks/api/container/ChestContainer.java | 10 ++++++++++ .../java/cpw/mods/ironchest/ContainerIronChest.java | 5 +++-- src/main/java/cpw/mods/ironchest/IronChest.java | 2 +- src/main/java/cpw/mods/ironchest/ItemChestChanger.java | 1 - .../java/cpw/mods/ironchest/client/ClientProxy.java | 2 -- .../ironchest/client/TileEntityIronChestRenderer.java | 2 +- 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/api/java/invtweaks/api/container/ChestContainer.java b/src/api/java/invtweaks/api/container/ChestContainer.java index 4722921..dc27377 100755 --- a/src/api/java/invtweaks/api/container/ChestContainer.java +++ b/src/api/java/invtweaks/api/container/ChestContainer.java @@ -12,6 +12,9 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface ChestContainer { + // Set to true if the Inventory Tweaks sorting buttons should be shown for this container. + boolean showButtons() default true; + // Size of a chest row int rowSize() default 9; @@ -25,4 +28,11 @@ public @interface ChestContainer { @Target(ElementType.METHOD) public @interface RowSizeCallback { } + + // Annotation for method to get size of a chest row if it is not a fixed size for this container class + // Signature int func() + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + public @interface IsLargeCallback { + } } \ No newline at end of file diff --git a/src/main/java/cpw/mods/ironchest/ContainerIronChest.java b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java index 2257aeb..6c32beb 100755 --- a/src/main/java/cpw/mods/ironchest/ContainerIronChest.java +++ b/src/main/java/cpw/mods/ironchest/ContainerIronChest.java @@ -10,6 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest; +import invtweaks.api.container.ChestContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -17,7 +18,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -//@ChestContainer(isLargeChest = true) +@ChestContainer(isLargeChest = true) public class ContainerIronChest extends Container { private IronChestType type; private EntityPlayer player; @@ -117,7 +118,7 @@ public class ContainerIronChest extends Container { return player; } - //@ChestContainer.RowSizeCallback + @ChestContainer.RowSizeCallback public int getNumColumns() { return type.getRowLength(); } diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index c190510..6ecfe73 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -52,7 +52,7 @@ public class IronChest ironChestBlock = new BlockIronChest(); RegistryHelper.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().func_178123_a(ironChestBlock); + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().registerBuiltInBlocks(ironChestBlock); for (IronChestType typ : IronChestType.values()) { diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java index d04343f..f8a34c3 100755 --- a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -12,7 +12,6 @@ package cpw.mods.ironchest; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java index 9c45f41..09ad48a 100755 --- a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -10,9 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest.client; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer; -import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; diff --git a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java index 223c915..b6235ee 100755 --- a/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java +++ b/src/main/java/cpw/mods/ironchest/client/TileEntityIronChestRenderer.java @@ -136,7 +136,7 @@ public class TileEntityIronChestRenderer extends TileEntitySpecialRenderer GlStateManager.popMatrix(); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - if (type.isTransparent() && tile.getDistanceSq(this.rendererDispatcher.field_147560_j, this.rendererDispatcher.field_147561_k, this.rendererDispatcher.field_147558_l) < 128d) { + if (type.isTransparent() && tile.getDistanceSq(this.rendererDispatcher.entityX, this.rendererDispatcher.entityY, this.rendererDispatcher.entityZ) < 128d) { random.setSeed(254L); float shiftX; float shiftY; From b6e2f384ae13b2f7bb88aea38a22409ea67b2025 Mon Sep 17 00:00:00 2001 From: 61352151511 Date: Thu, 29 Jan 2015 12:48:02 -0400 Subject: [PATCH 70/80] Update forge version to latest --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d746c42..f9d5767 100755 --- a/build.gradle +++ b/build.gradle @@ -37,7 +37,7 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { - version = "1.8-11.14.0.1251-1.8" + version = "1.8-11.14.0.1292-1.8" } // This wrangles the resources for the jar files- stuff like textures and languages From c1912bc4750fb8a4c8f6054a6e649de992375ee5 Mon Sep 17 00:00:00 2001 From: 61352151511 Date: Thu, 29 Jan 2015 12:58:38 -0400 Subject: [PATCH 71/80] Reformat --- .../cpw/mods/ironchest/ItemChestChanger.java | 83 +++++++++++-------- .../mods/ironchest/TileEntityIronChest.java | 21 +++-- 2 files changed, 59 insertions(+), 45 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java index f8a34c3..84ab992 100755 --- a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -34,44 +34,55 @@ public class ItemChestChanger extends Item } @Override - public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) + public boolean onItemUseFirst (ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) { - if (world.isRemote) return false; - TileEntity te = world.getTileEntity(pos); - TileEntityIronChest newchest = new TileEntityIronChest(); - ItemStack[] chestContents = new ItemStack[27]; - if (te != null) { - if (te instanceof TileEntityIronChest) { - chestContents = ((TileEntityIronChest) te).chestContents; - newchest = IronChestType.makeEntity(this.getTargetChestOrdinal(this.type.ordinal())); - if (newchest == null) return false; - } else if (te instanceof TileEntityChest) { - if (((TileEntityChest) te).numPlayersUsing > 0) return false; - if (!getType().canUpgrade(IronChestType.WOOD)) return false; - chestContents = new ItemStack[((TileEntityChest) te).getSizeInventory()]; - for (int i = 0; i < chestContents.length; i ++) chestContents[i] = ((TileEntityChest) te).getStackInSlot(i); - newchest = IronChestType.makeEntity(IronChestType.IRON.ordinal()); - } - } - - te.updateContainingBlockInfo(); - if (te instanceof TileEntityChest) ((TileEntityChest) te).checkForAdjacentChests(); - - world.removeTileEntity(pos); - world.setBlockToAir(pos); - - world.setTileEntity(pos, newchest); - world.setBlockState(pos, IronChest.ironChestBlock.getStateFromMeta(newchest.getType().ordinal()), 3); - - world.markBlockForUpdate(pos); - - TileEntity te2 = world.getTileEntity(pos); - if (te2 instanceof TileEntityIronChest) { - ((TileEntityIronChest) te2).setContents(chestContents); - } + if (world.isRemote) + return false; + TileEntity te = world.getTileEntity(pos); + TileEntityIronChest newchest = new TileEntityIronChest(); + ItemStack[] chestContents = new ItemStack[27]; + if (te != null) + { + if (te instanceof TileEntityIronChest) + { + chestContents = ((TileEntityIronChest) te).chestContents; + newchest = IronChestType.makeEntity(this.getTargetChestOrdinal(this.type.ordinal())); + if (newchest == null) + return false; + } + else if (te instanceof TileEntityChest) + { + if (((TileEntityChest) te).numPlayersUsing > 0) + return false; + if (!getType().canUpgrade(IronChestType.WOOD)) + return false; + chestContents = new ItemStack[((TileEntityChest) te).getSizeInventory()]; + for (int i = 0; i < chestContents.length; i++) + chestContents[i] = ((TileEntityChest) te).getStackInSlot(i); + newchest = IronChestType.makeEntity(IronChestType.IRON.ordinal()); + } + } - stack.stackSize = player.capabilities.isCreativeMode ? stack.stackSize : stack.stackSize - 1; - return true; + te.updateContainingBlockInfo(); + if (te instanceof TileEntityChest) + ((TileEntityChest) te).checkForAdjacentChests(); + + world.removeTileEntity(pos); + world.setBlockToAir(pos); + + world.setTileEntity(pos, newchest); + world.setBlockState(pos, IronChest.ironChestBlock.getStateFromMeta(newchest.getType().ordinal()), 3); + + world.markBlockForUpdate(pos); + + TileEntity te2 = world.getTileEntity(pos); + if (te2 instanceof TileEntityIronChest) + { + ((TileEntityIronChest) te2).setContents(chestContents); + } + + stack.stackSize = player.capabilities.isCreativeMode ? stack.stackSize : stack.stackSize - 1; + return true; } public int getTargetChestOrdinal(int sourceOrdinal) diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 064a7a0..217eceb 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -60,15 +60,18 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl return chestContents; } - public void setContents(ItemStack[] contents) { - chestContents = new ItemStack[getSizeInventory()]; - for (int i = 0; i < contents.length; i ++) { - if (i < chestContents.length) { - chestContents[i] = contents[i]; - } - } - inventoryTouched = true; - } + public void setContents (ItemStack[] contents) + { + chestContents = new ItemStack[getSizeInventory()]; + for (int i = 0; i < contents.length; i++) + { + if (i < chestContents.length) + { + chestContents[i] = contents[i]; + } + } + inventoryTouched = true; + } @Override public int getSizeInventory() From 431f2cf03999e2b19791f32c2781c0453699eb45 Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Thu, 29 Jan 2015 23:23:27 -0500 Subject: [PATCH 72/80] update mappings to latest --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index f9d5767..e9fb91b 100755 --- a/build.gradle +++ b/build.gradle @@ -38,6 +38,7 @@ archivesBaseName = "ironchest" // Setup the forge minecraft plugin data. Specify the preferred forge/minecraft version here minecraft { version = "1.8-11.14.0.1292-1.8" + mappings = "snapshot_20150129" } // This wrangles the resources for the jar files- stuff like textures and languages From a24e28f7ea423c2a3a65bc2677981957a34e29d7 Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Sun, 22 Mar 2015 15:50:29 -0400 Subject: [PATCH 73/80] add curse upload capabilities --- build.gradle | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/build.gradle b/build.gradle index e9fb91b..246e503 100755 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,10 @@ buildscript { } // Apply the forge plugin - this adds all the magic for automatically obfuscating, deobfuscating etc + apply plugin: 'forge' +apply plugin: "curseforge" + // This is a simple flatdir repository for "uploadArchives" when you don't have a remote repo to target repositories { @@ -99,6 +102,19 @@ artifacts { archives sourceJar, deobfJar } +curse { + dependsOn "createCurseChangelog" + + projectId = "228756" + apiKey = "$System.env.curse_api_key" + changelog = "See github for changes" + releaseType = "beta" + + additionalArtifact deobfJar + additionalArtifact sourceJar +} + + // Configure an upload task. this is setup for uploading to files.minecraftforge.net. There are other examples around uploadArchives { dependsOn 'reobf' From f64fb40b15836d3b8cc032ac132b7e39e3b47f72 Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Sun, 22 Mar 2015 15:53:15 -0400 Subject: [PATCH 74/80] remove stray dependency from curse change log task --- build.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/build.gradle b/build.gradle index 246e503..419e4a4 100755 --- a/build.gradle +++ b/build.gradle @@ -103,8 +103,6 @@ artifacts { } curse { - dependsOn "createCurseChangelog" - projectId = "228756" apiKey = "$System.env.curse_api_key" changelog = "See github for changes" From f5b98a42f8f1bff47c89d38c997510fe40a60945 Mon Sep 17 00:00:00 2001 From: ganymedes01 Date: Wed, 27 May 2015 18:17:59 -0300 Subject: [PATCH 75/80] Bunch of fixes and cleanups. See description for details -Removed unnecessary classes and files (like unused textures) -Use the vanilla packet system instead of a custom one (which ended up fixing chest rotations reseting every time the game was restarted) -Render chests as items without hackery (Not very pretty... but I'm not really sure what forge wants us to do if not what I did) --- 18 Mappings.txt | 52 ----- .../cpw/mods/ironchest/BlockIronChest.java | 62 +++--- .../java/cpw/mods/ironchest/IronChest.java | 20 +- .../ironchest/MappableItemStackWrapper.java | 33 --- .../cpw/mods/ironchest/PacketHandler.java | 203 ------------------ .../cpw/mods/ironchest/RegistryHelper.java | 38 ---- .../mods/ironchest/TileEntityIronChest.java | 188 +++++++++------- .../mods/ironchest/client/ClientProxy.java | 22 +- .../client/IronChestRenderHelper.java | 52 ----- .../ironchest/models/item/BlockIronChest.json | 3 - .../ironchest/models/item/chest_copper.json | 40 ++++ .../ironchest/models/item/chest_crystal.json | 40 ++++ .../ironchest/models/item/chest_diamond.json | 40 ++++ .../models/item/chest_dirtchest9000.json | 40 ++++ .../ironchest/models/item/chest_gold.json | 40 ++++ .../ironchest/models/item/chest_iron.json | 40 ++++ .../ironchest/models/item/chest_obsidian.json | 40 ++++ .../ironchest/models/item/chest_silver.json | 40 ++++ .../textures/blocks/copper_front.png | Bin 679 -> 0 bytes .../ironchest/textures/blocks/copper_side.png | Bin 661 -> 0 bytes .../ironchest/textures/blocks/copper_top.png | Bin 546 -> 0 bytes .../textures/blocks/crystal_front.png | Bin 396 -> 0 bytes .../textures/blocks/crystal_side.png | Bin 396 -> 0 bytes .../ironchest/textures/blocks/crystal_top.png | Bin 382 -> 0 bytes .../textures/blocks/diamond_front.png | Bin 762 -> 0 bytes .../textures/blocks/diamond_side.png | Bin 719 -> 0 bytes .../ironchest/textures/blocks/diamond_top.png | Bin 572 -> 0 bytes .../textures/blocks/dirtchest9000_front.png | Bin 3194 -> 0 bytes .../textures/blocks/dirtchest9000_side.png | Bin 3202 -> 0 bytes .../textures/blocks/dirtchest9000_top.png | Bin 3212 -> 0 bytes .../ironchest/textures/blocks/gold_front.png | Bin 784 -> 0 bytes .../ironchest/textures/blocks/gold_side.png | Bin 726 -> 0 bytes .../ironchest/textures/blocks/gold_top.png | Bin 572 -> 0 bytes .../ironchest/textures/blocks/iron_front.png | Bin 787 -> 0 bytes .../ironchest/textures/blocks/iron_side.png | Bin 726 -> 0 bytes .../ironchest/textures/blocks/iron_top.png | Bin 572 -> 0 bytes .../textures/blocks/obsidian_front.png | Bin 586 -> 0 bytes .../textures/blocks/obsidian_side.png | Bin 593 -> 0 bytes .../textures/blocks/obsidian_top.png | Bin 604 -> 0 bytes .../textures/blocks/silver_front.png | Bin 625 -> 0 bytes .../ironchest/textures/blocks/silver_side.png | Bin 608 -> 0 bytes .../ironchest/textures/blocks/silver_top.png | Bin 527 -> 0 bytes 42 files changed, 480 insertions(+), 513 deletions(-) delete mode 100644 18 Mappings.txt delete mode 100755 src/main/java/cpw/mods/ironchest/MappableItemStackWrapper.java delete mode 100755 src/main/java/cpw/mods/ironchest/PacketHandler.java delete mode 100644 src/main/java/cpw/mods/ironchest/RegistryHelper.java delete mode 100755 src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java delete mode 100755 src/main/resources/assets/ironchest/models/item/BlockIronChest.json create mode 100755 src/main/resources/assets/ironchest/models/item/chest_copper.json create mode 100755 src/main/resources/assets/ironchest/models/item/chest_crystal.json create mode 100755 src/main/resources/assets/ironchest/models/item/chest_diamond.json create mode 100755 src/main/resources/assets/ironchest/models/item/chest_dirtchest9000.json create mode 100755 src/main/resources/assets/ironchest/models/item/chest_gold.json create mode 100755 src/main/resources/assets/ironchest/models/item/chest_iron.json create mode 100755 src/main/resources/assets/ironchest/models/item/chest_obsidian.json create mode 100755 src/main/resources/assets/ironchest/models/item/chest_silver.json delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/copper_front.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/copper_side.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/copper_top.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/crystal_front.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/crystal_side.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/crystal_top.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/diamond_front.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/diamond_side.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/diamond_top.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/gold_front.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/gold_side.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/gold_top.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/iron_front.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/iron_side.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/iron_top.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/obsidian_front.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/obsidian_side.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/obsidian_top.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/silver_front.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/silver_side.png delete mode 100755 src/main/resources/assets/ironchest/textures/blocks/silver_top.png diff --git a/18 Mappings.txt b/18 Mappings.txt deleted file mode 100644 index c22f284..0000000 --- a/18 Mappings.txt +++ /dev/null @@ -1,52 +0,0 @@ -—MAPPINGS NOW IN MCPBOT— - -—————————— -FIXES -—————————— -—GameData— - - private int registerBlock(Block block, String name, int idHint) - { - // handle ItemBlock-before-Block registrations - ItemBlock itemBlock = null; - - for (Item item : iItemRegistry.typeSafeIterable()) // find matching ItemBlock - { - if (item instanceof ItemBlock && ((ItemBlock) item).blockInstance == block) - { - itemBlock = (ItemBlock) item; - break; - } - } - - if (itemBlock != null) // has ItemBlock, adjust id and clear the slot already occupied by the corresponding item - { - idHint = iItemRegistry.getId(itemBlock); - FMLLog.fine("Found matching ItemBlock %s for Block %s at id %d", itemBlock, block, idHint); - freeSlot(idHint, block); // temporarily free the slot occupied by the Item for the block registration - } - - // add - int blockId = iBlockRegistry.add(idHint, name, block, availabilityMap); - - if (itemBlock != null) // verify - { - if (blockId != idHint) throw new IllegalStateException(String.format("Block at itemblock id %d insertion failed, got id %d.", idHint, blockId)); - verifyItemBlockName(itemBlock); - } - - //Hackery added by me which probably shouldn't be done - Iterator iterator1 = block.getBlockState().getValidStates().iterator(); - - while (iterator1.hasNext()) - { - IBlockState iblockstate = (IBlockState)iterator1.next(); - int i = blockRegistry.getIDForObject(block) << 4 | block.getMetaFromBlockState(iblockstate); - Block.field_176229_d.func_148746_a(iblockstate, i); - } - //End hackery - - useSlot(blockId); - ((RegistryDelegate.Delegate) block.delegate).setName(name); - return blockId; - } \ No newline at end of file diff --git a/src/main/java/cpw/mods/ironchest/BlockIronChest.java b/src/main/java/cpw/mods/ironchest/BlockIronChest.java index d9cdeb5..a34cf1c 100755 --- a/src/main/java/cpw/mods/ironchest/BlockIronChest.java +++ b/src/main/java/cpw/mods/ironchest/BlockIronChest.java @@ -49,9 +49,9 @@ public class BlockIronChest extends BlockContainer public BlockIronChest() { super(Material.iron); - + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT_PROP, IronChestType.IRON)); - + this.setBlockBounds(0.0625F, 0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); this.setHardness(3.0F); this.setUnlocalizedName("IronChest"); @@ -69,13 +69,7 @@ public class BlockIronChest extends BlockContainer { return false; } - - @Override - public int getRenderType() - { - return 2; - } - + @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState blockState, EntityPlayer player, EnumFacing direction, float p_180639_6_, float p_180639_7_, float p_180639_8_) { @@ -99,13 +93,13 @@ public class BlockIronChest extends BlockContainer player.openGui(IronChest.instance, ((TileEntityIronChest) te).getType().ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); return true; } - + @Override public TileEntity createNewTileEntity(World world, int metadata) { return IronChestType.makeEntity(metadata); } - + @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) @@ -118,7 +112,7 @@ public class BlockIronChest extends BlockContainer } } } - + @Override public IBlockState getStateFromMeta(int meta) { @@ -128,9 +122,9 @@ public class BlockIronChest extends BlockContainer @Override public int getMetaFromState(IBlockState blockState) { - return ((IronChestType)blockState.getValue(VARIANT_PROP)).ordinal(); + return ((IronChestType) blockState.getValue(VARIANT_PROP)).ordinal(); } - + @Override protected BlockState createBlockState() { @@ -141,7 +135,7 @@ public class BlockIronChest extends BlockContainer public ArrayList getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { ArrayList items = Lists.newArrayList(); - ItemStack stack = new ItemStack(this,1,getMetaFromState(state)); + ItemStack stack = new ItemStack(this, 1, getMetaFromState(state)); IronChestType.values()[IronChestType.validateMeta(getMetaFromState(state))].adornItemDrop(stack); items.add(stack); return items; @@ -158,7 +152,7 @@ public class BlockIronChest extends BlockContainer public void onBlockPlacedBy(World world, BlockPos pos, IBlockState blockState, EntityLivingBase entityliving, ItemStack itemStack) { byte chestFacing = 0; - int facing = MathHelper.floor_double((double) ((entityliving.rotationYaw * 4F) / 360F) + 0.5D) & 3; + int facing = MathHelper.floor_double((entityliving.rotationYaw * 4F) / 360F + 0.5D) & 3; if (facing == 0) { chestFacing = 2; @@ -188,7 +182,7 @@ public class BlockIronChest extends BlockContainer @Override public int damageDropped(IBlockState state) { - return IronChestType.validateMeta(((IronChestType)state.getValue(VARIANT_PROP)).ordinal()); + return IronChestType.validateMeta(((IronChestType) state.getValue(VARIANT_PROP)).ordinal()); } @Override @@ -206,7 +200,7 @@ public class BlockIronChest extends BlockContainer public void dropContent(int newSize, IInventory chest, World world, BlockPos pos) { Random random = world.rand; - + for (int l = newSize; l < chest.getSizeInventory(); l++) { ItemStack itemstack = chest.getStackInSlot(l); @@ -225,8 +219,7 @@ public class BlockIronChest extends BlockContainer i1 = itemstack.stackSize; } itemstack.stackSize -= i1; - EntityItem entityitem = new EntityItem(world, (float) pos.getX() + f, (float) pos.getY() + (newSize > 0 ? 1 : 0) + f1, (float) pos.getZ() + f2, - new ItemStack(itemstack.getItem(), i1, itemstack.getMetadata())); + EntityItem entityitem = new EntityItem(world, pos.getX() + f, (float) pos.getY() + (newSize > 0 ? 1 : 0) + f1, pos.getZ() + f2, new ItemStack(itemstack.getItem(), i1, itemstack.getMetadata())); float f3 = 0.05F; entityitem.motionX = (float) random.nextGaussian() * f3; entityitem.motionY = (float) random.nextGaussian() * f3 + 0.2F; @@ -243,20 +236,21 @@ public class BlockIronChest extends BlockContainer @Override public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion) { - TileEntity te = world.getTileEntity(pos); - if (te instanceof TileEntityIronChest) - { - TileEntityIronChest teic = (TileEntityIronChest) te; - if (teic.getType().isExplosionResistant()) - { - return 10000F; - } - } - return super.getExplosionResistance(world, pos, exploder, explosion); + TileEntity te = world.getTileEntity(pos); + if (te instanceof TileEntityIronChest) + { + TileEntityIronChest teic = (TileEntityIronChest) te; + if (teic.getType().isExplosionResistant()) + { + return 10000F; + } + } + return super.getExplosionResistance(world, pos, exploder, explosion); } @Override - public boolean hasComparatorInputOverride() { + public boolean hasComparatorInputOverride() + { return true; } @@ -266,12 +260,13 @@ public class BlockIronChest extends BlockContainer TileEntity te = world.getTileEntity(pos); if (te instanceof IInventory) { - return Container.calcRedstoneFromInventory((IInventory)te); + return Container.calcRedstoneFromInventory((IInventory) te); } return 0; } private static final EnumFacing[] validRotationAxes = new EnumFacing[] { EnumFacing.UP, EnumFacing.DOWN }; + @Override public EnumFacing[] getValidRotations(World worldObj, BlockPos pos) { @@ -288,7 +283,8 @@ public class BlockIronChest extends BlockContainer if (axis == EnumFacing.UP || axis == EnumFacing.DOWN) { TileEntity tileEntity = worldObj.getTileEntity(pos); - if (tileEntity instanceof TileEntityIronChest) { + if (tileEntity instanceof TileEntityIronChest) + { TileEntityIronChest icte = (TileEntityIronChest) tileEntity; icte.rotateAround(); } diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index 6ecfe73..cf6cf97 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -10,8 +10,6 @@ ******************************************************************************/ package cpw.mods.ironchest; -import net.minecraft.client.Minecraft; -import net.minecraft.init.Blocks; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; @@ -21,12 +19,9 @@ import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.oredict.OreDictionary; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.relauncher.Side; @Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:FML@[7.2,)") -public class IronChest +public class IronChest { public static BlockIronChest ironChestBlock; @SidedProxy(clientSide = "cpw.mods.ironchest.client.ClientProxy", serverSide = "cpw.mods.ironchest.CommonProxy") @@ -39,27 +34,22 @@ public class IronChest { Version.init(event.getVersionProperties()); event.getModMetadata().version = Version.fullVersionString(); - - PacketHandler.INSTANCE.ordinal(); } @EventHandler public void load(FMLInitializationEvent evt) { - //Registration has been moved to init to account for the registration of inventory models - //Minecraft.getRenderItem() returns null before this stage + // Registration has been moved to init to account for the registration of inventory models + // Minecraft.getRenderItem() returns null before this stage ChestChangerType.buildItems(); ironChestBlock = new BlockIronChest(); - RegistryHelper.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); - - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().registerBuiltInBlocks(ironChestBlock); - + GameRegistry.registerBlock(ironChestBlock, ItemIronChest.class, "BlockIronChest"); + for (IronChestType typ : IronChestType.values()) { GameRegistry.registerTileEntityWithAlternatives(typ.clazz, "IronChest." + typ.name(), typ.name()); proxy.registerTileEntitySpecialRenderer(typ); } - OreDictionary.registerOre("chestWood", Blocks.chest); IronChestType.registerBlocksAndRecipes(ironChestBlock); ChestChangerType.generateRecipes(); NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy); diff --git a/src/main/java/cpw/mods/ironchest/MappableItemStackWrapper.java b/src/main/java/cpw/mods/ironchest/MappableItemStackWrapper.java deleted file mode 100755 index 95a8a40..0000000 --- a/src/main/java/cpw/mods/ironchest/MappableItemStackWrapper.java +++ /dev/null @@ -1,33 +0,0 @@ -package cpw.mods.ironchest; - -import net.minecraft.item.ItemStack; - -public class MappableItemStackWrapper { - private ItemStack wrap; - - public MappableItemStackWrapper(ItemStack toWrap) - { - wrap = toWrap; - } - - @Override - public boolean equals(Object obj) - { - if (!(obj instanceof MappableItemStackWrapper)) return false; - MappableItemStackWrapper isw = (MappableItemStackWrapper) obj; - if (wrap.getHasSubtypes()) - { - return isw.wrap.isItemEqual(wrap); - } - else - { - return isw.wrap == wrap; - } - } - - @Override - public int hashCode() - { - return System.identityHashCode(wrap); - } -} diff --git a/src/main/java/cpw/mods/ironchest/PacketHandler.java b/src/main/java/cpw/mods/ironchest/PacketHandler.java deleted file mode 100755 index da04a4d..0000000 --- a/src/main/java/cpw/mods/ironchest/PacketHandler.java +++ /dev/null @@ -1,203 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 cpw. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * cpw - initial API and implementation - ******************************************************************************/ -package cpw.mods.ironchest; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; - -import java.util.EnumMap; - -import net.minecraft.item.ItemStack; -import net.minecraft.network.Packet; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.common.network.ByteBufUtils; -import net.minecraftforge.fml.common.network.FMLEmbeddedChannel; -import net.minecraftforge.fml.common.network.FMLIndexedMessageToMessageCodec; -import net.minecraftforge.fml.common.network.NetworkRegistry; -import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -/** - * Handles the packet wrangling for IronChest - * @author cpw - * - */ -public enum PacketHandler { - INSTANCE; - - /** - * Our channel "pair" from {@link NetworkRegistry} - */ - private EnumMap channels; - - /** - * Make our packet handler, and add an {@link IronChestCodec} always - */ - private PacketHandler() - { - // request a channel pair for IronChest from the network registry - // Add the IronChestCodec as a member of both channel pipelines - this.channels = NetworkRegistry.INSTANCE.newChannel("IronChest", new IronChestCodec()); - if (FMLCommonHandler.instance().getSide() == Side.CLIENT) - { - addClientHandler(); - } - } - - /** - * This is only called on the client side - it adds an - * {@link IronChestMessageHandler} to the client side pipeline, since the - * only place we expect to handle messages is on the client. - */ - @SideOnly(Side.CLIENT) - private void addClientHandler() { - FMLEmbeddedChannel clientChannel = this.channels.get(Side.CLIENT); - // These two lines find the existing codec (Ironchestcodec) and insert our message handler after it - // in the pipeline - String codec = clientChannel.findChannelHandlerNameForType(IronChestCodec.class); - clientChannel.pipeline().addAfter(codec, "ClientHandler", new IronChestMessageHandler()); - } - - /** - * This class simply handles the {@link IronChestMessage} when it's received - * at the client side It can contain client only code, because it's only run - * on the client. - * - * @author cpw - * - */ - private static class IronChestMessageHandler extends SimpleChannelInboundHandler - { - @Override - protected void channelRead0(ChannelHandlerContext ctx, IronChestMessage msg) throws Exception - { - World world = IronChest.proxy.getClientWorld(); - TileEntity te = world.getTileEntity(new BlockPos(msg.x, msg.y, msg.z)); - if (te instanceof TileEntityIronChest) - { - TileEntityIronChest icte = (TileEntityIronChest) te; - icte.setFacing(msg.facing); - icte.handlePacketData(msg.type, msg.itemStacks); - } - } - } - - /** - * This is our "message". In fact, {@link FMLIndexedMessageToMessageCodec} - * can handle many messages on the same channel at once, using a - * discriminator byte. But for IronChest, we only need the one message, so - * we have just this. - * - * @author cpw - * - */ - public static class IronChestMessage - { - int x; - int y; - int z; - int type; - int facing; - ItemStack[] itemStacks; - } - - /** - * This is the codec that automatically transforms the - * {@link FMLProxyPacket} which wraps the client and server custom payload - * packets into a message we care about. - * - * @author cpw - * - */ - private class IronChestCodec extends FMLIndexedMessageToMessageCodec - { - /** - * We register our discriminator bytes here. We only have the one type, so we only - * register one. - */ - public IronChestCodec() - { - addDiscriminator(0, IronChestMessage.class); - } - @Override - public void encodeInto(ChannelHandlerContext ctx, IronChestMessage msg, ByteBuf target) throws Exception - { - target.writeInt(msg.x); - target.writeInt(msg.y); - target.writeInt(msg.z); - int typeAndFacing = ((msg.type & 0x0F) | ((msg.facing & 0x0F) << 4)) & 0xFF; - target.writeByte(typeAndFacing); - target.writeBoolean(msg.itemStacks != null); - if (msg.itemStacks != null) - { - for (ItemStack i: msg.itemStacks) - { - ByteBufUtils.writeItemStack(target, i); - } - } - } - - @Override - public void decodeInto(ChannelHandlerContext ctx, ByteBuf dat, IronChestMessage msg) - { - msg.x = dat.readInt(); - msg.y = dat.readInt(); - msg.z = dat.readInt(); - int typDat = dat.readByte(); - msg.type = (byte)(typDat & 0xf); - msg.facing = (byte)((typDat >> 4) & 0xf); - boolean hasStacks = dat.readBoolean(); - msg.itemStacks = new ItemStack[0]; - if (hasStacks) - { - msg.itemStacks = new ItemStack[8]; - for (int i = 0; i < msg.itemStacks.length; i++) - { - msg.itemStacks[i] = ByteBufUtils.readItemStack(dat); - } - } - } - - } - - /** - * This is a utility method called to transform a packet from a custom - * packet into a "system packet". We're called from - * {@link TileEntity#getDescriptionPacket()} in this case, but there are - * others. All network packet methods in minecraft have been adapted to - * handle {@link FMLProxyPacket} but general purpose objects can't be - * handled sadly. - * - * This method uses the {@link IronChestCodec} to transform a custom packet - * {@link IronChestMessage} into an {@link FMLProxyPacket} by using the - * utility method {@link FMLEmbeddedChannel#generatePacketFrom(Object)} on - * the channel to do exactly that. - * - * @param tileEntityIronChest - * @return - */ - public static Packet getPacket(TileEntityIronChest tileEntityIronChest) - { - IronChestMessage msg = new IronChestMessage(); - msg.x = tileEntityIronChest.getPos().getX(); - msg.y = tileEntityIronChest.getPos().getY(); - msg.z = tileEntityIronChest.getPos().getZ(); - msg.type = tileEntityIronChest.getType().ordinal(); - msg.facing = tileEntityIronChest.getFacing(); - msg.itemStacks = tileEntityIronChest.buildItemStackDataList(); - return INSTANCE.channels.get(Side.SERVER).generatePacketFrom(msg); - } -} diff --git a/src/main/java/cpw/mods/ironchest/RegistryHelper.java b/src/main/java/cpw/mods/ironchest/RegistryHelper.java deleted file mode 100644 index 770f608..0000000 --- a/src/main/java/cpw/mods/ironchest/RegistryHelper.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 cpw. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * cpw - initial API and implementation - ******************************************************************************/ -package cpw.mods.ironchest; - -import java.util.Iterator; - -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.ItemBlock; -import net.minecraftforge.fml.common.registry.GameRegistry; - - -public class RegistryHelper -{ - public static Block registerBlock(Block block, Class itemclass, String name, Object... itemCtorArgs) - { - block = GameRegistry.registerBlock(block, itemclass, name, itemCtorArgs); - - Iterator iterator = block.getBlockState().getValidStates().iterator(); - - while (iterator.hasNext()) - { - IBlockState iblockstate = (IBlockState)iterator.next(); - int id = Block.blockRegistry.getIDForObject(block) << 4 | block.getMetaFromState(iblockstate); - Block.BLOCK_STATE_IDS.put(iblockstate, id); - } - - return block; - } -} diff --git a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java index 217eceb..7f2a005 100755 --- a/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java +++ b/src/main/java/cpw/mods/ironchest/TileEntityIronChest.java @@ -22,13 +22,16 @@ import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.server.gui.IUpdatePlayerListBox; import net.minecraft.tileentity.TileEntityLockable; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.util.Constants; -public class TileEntityIronChest extends TileEntityLockable implements IUpdatePlayerListBox, IInventory +public class TileEntityIronChest extends TileEntityLockable implements IUpdatePlayerListBox, IInventory { private int ticksSinceSync = -1; public float prevLidAngle; @@ -37,7 +40,7 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl private IronChestType type; public ItemStack[] chestContents; private ItemStack[] topStacks; - private int facing; + private byte facing; private boolean inventoryTouched; private boolean hadStuff; private String customName; @@ -59,8 +62,8 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl { return chestContents; } - - public void setContents (ItemStack[] contents) + + public void setContents(ItemStack[] contents) { chestContents = new ItemStack[getSizeInventory()]; for (int i = 0; i < contents.length; i++) @@ -142,19 +145,18 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl return; } hadStuff = true; - Arrays.sort(tempCopy, new Comparator() { + Arrays.sort(tempCopy, new Comparator() + { @Override public int compare(ItemStack o1, ItemStack o2) { if (o1 == null) { return 1; - } - else if (o2 == null) + } else if (o2 == null) { return -1; - } - else + } else { return o2.stackSize - o1.stackSize; } @@ -201,8 +203,7 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl } markDirty(); return itemstack1; - } - else + } else { return null; } @@ -218,19 +219,19 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl } markDirty(); } - + @Override public String getName() { return this.hasCustomName() ? this.customName : type.name(); } - + @Override public boolean hasCustomName() { return this.customName != null && this.customName.length() > 0; } - + public void setCustomName(String name) { this.customName = name; @@ -240,17 +241,15 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl public void readFromNBT(NBTTagCompound nbttagcompound) { super.readFromNBT(nbttagcompound); - - //10 - TAG_COMPOUND - NBTTagList nbttaglist = nbttagcompound.getTagList("Items", 10); + + NBTTagList nbttaglist = nbttagcompound.getTagList("Items", Constants.NBT.TAG_COMPOUND); this.chestContents = new ItemStack[getSizeInventory()]; - - //8 - TAG_STRING - if (nbttagcompound.hasKey("CustomName", 8)) + + if (nbttagcompound.hasKey("CustomName", Constants.NBT.TAG_STRING)) { this.customName = nbttagcompound.getString("CustomName"); } - + for (int i = 0; i < nbttaglist.tagCount(); i++) { NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); @@ -281,8 +280,8 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl } nbttagcompound.setTag("Items", nbttaglist); - nbttagcompound.setByte("facing", (byte)facing); - + nbttagcompound.setByte("facing", facing); + if (this.hasCustomName()) { nbttagcompound.setString("CustomName", this.customName); @@ -306,7 +305,7 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl { return false; } - return entityplayer.getDistanceSq((double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D) <= 64D; + return entityplayer.getDistanceSq(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D) <= 64D; } @Override @@ -318,10 +317,12 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl this.numUsingPlayers = 0; float var1 = 5.0F; @SuppressWarnings("unchecked") - List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB((double)((float)pos.getX() - var1), (double)((float)pos.getY() - var1), (double)((float)pos.getZ() - var1), (double)((float)(pos.getX() + 1) + var1), (double)((float)(pos.getY() + 1) + var1), (double)((float)(pos.getZ() + 1) + var1))); + List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB(pos.getX() - var1, pos.getY() - var1, pos.getZ() - var1, pos.getX() + 1 + var1, pos.getY() + 1 + var1, pos.getZ() + 1 + var1)); - for (EntityPlayer var4 : var2) { - if (var4.openContainer instanceof ContainerIronChest) { + for (EntityPlayer var4 : var2) + { + if (var4.openContainer instanceof ContainerIronChest) + { ++this.numUsingPlayers; } } @@ -342,9 +343,9 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl float f = 0.1F; if (numUsingPlayers > 0 && lidAngle == 0.0F) { - double d = (double) pos.getX() + 0.5D; - double d1 = (double) pos.getZ() + 0.5D; - worldObj.playSoundEffect(d, (double) pos.getY() + 0.5D, d1, "random.chestopen", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); + double d = pos.getX() + 0.5D; + double d1 = pos.getZ() + 0.5D; + worldObj.playSoundEffect(d, pos.getY() + 0.5D, d1, "random.chestopen", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); } if (numUsingPlayers == 0 && lidAngle > 0.0F || numUsingPlayers > 0 && lidAngle < 1.0F) { @@ -352,8 +353,7 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl if (numUsingPlayers > 0) { lidAngle += f; - } - else + } else { lidAngle -= f; } @@ -364,9 +364,9 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl float f2 = 0.5F; if (lidAngle < f2 && f1 >= f2) { - double d2 = (double) pos.getX() + 0.5D; - double d3 = (double) pos.getZ() + 0.5D; - worldObj.playSoundEffect(d2, (double) pos.getY() + 0.5D, d3, "random.chestclosed", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); + double d2 = pos.getX() + 0.5D; + double d3 = pos.getZ() + 0.5D; + worldObj.playSoundEffect(d2, pos.getY() + 0.5D, d3, "random.chestclosed", 0.5F, worldObj.rand.nextFloat() * 0.1F + 0.9F); } if (lidAngle < 0.0F) { @@ -381,12 +381,10 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl if (i == 1) { numUsingPlayers = j; - } - else if (i == 2) + } else if (i == 2) { facing = (byte) j; - } - else if (i == 3) + } else if (i == 3) { facing = (byte) (j & 0x7); numUsingPlayers = (j & 0xF8) >> 3; @@ -397,7 +395,10 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl @Override public void openInventory(EntityPlayer player) { - if (worldObj == null) return; + if (worldObj == null) + { + return; + } numUsingPlayers++; worldObj.addBlockEvent(pos, IronChest.ironChestBlock, 1, numUsingPlayers); } @@ -405,12 +406,15 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl @Override public void closeInventory(EntityPlayer player) { - if (worldObj == null) return; + if (worldObj == null) + { + return; + } numUsingPlayers--; worldObj.addBlockEvent(pos, IronChest.ironChestBlock, 1, numUsingPlayers); } - public void setFacing(int facing2) + public void setFacing(byte facing2) { this.facing = facing2; } @@ -436,30 +440,65 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl @Override public Packet getDescriptionPacket() { - return PacketHandler.getPacket(this); + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("type", getType().ordinal()); + nbt.setByte("facing", facing); + ItemStack[] stacks = buildItemStackDataList(); + if (stacks != null) + { + NBTTagList nbttaglist = new NBTTagList(); + for (int i = 0; i < stacks.length; i++) + { + if (stacks[i] != null) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setByte("Slot", (byte) i); + stacks[i].writeToNBT(nbttagcompound1); + nbttaglist.appendTag(nbttagcompound1); + } + } + nbt.setTag("stacks", nbttaglist); + } + + return new S35PacketUpdateTileEntity(pos, 0, nbt); } - public void handlePacketData(int typeData, ItemStack[] intData) + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - TileEntityIronChest chest = this; - if (this.type.ordinal() != typeData) + if (pkt.getTileEntityType() == 0) { - chest = updateFromMetadata(typeData); - } - if (IronChestType.values()[typeData].isTransparent() && intData != null) - { - int pos = 0; - for (int i = 0; i < chest.topStacks.length; i++) + NBTTagCompound nbt = pkt.getNbtCompound(); + type = IronChestType.values()[nbt.getInteger("type")]; + facing = nbt.getByte("facing"); + + NBTTagList tagList = nbt.getTagList("stacks", Constants.NBT.TAG_COMPOUND); + ItemStack[] stacks = new ItemStack[topStacks.length]; + + for (int i = 0; i < stacks.length; i++) { - if (intData[pos] != null) + NBTTagCompound nbt1 = tagList.getCompoundTagAt(i); + int j = nbt1.getByte("Slot") & 0xff; + if (j >= 0 && j < stacks.length) { - chest.topStacks[i] = intData[pos]; + stacks[j] = ItemStack.loadItemStackFromNBT(nbt1); } - else + } + + if (type.isTransparent() && stacks != null) + { + int pos = 0; + for (int i = 0; i < topStacks.length; i++) { - chest.topStacks[i] = null; + if (stacks[pos] != null) + { + topStacks[i] = stacks[pos]; + } else + { + topStacks[i] = null; + } + pos++; } - pos ++; } } } @@ -475,8 +514,7 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl if (is != null) { sortList[pos++] = is; - } - else + } else { sortList[pos++] = null; } @@ -494,31 +532,25 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl ItemStack var2 = this.chestContents[par1]; this.chestContents[par1] = null; return var2; - } - else + } else { return null; } } - public void setMaxStackSize(int size) - { - - } - @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { return type.acceptsStack(itemstack); } - void rotateAround() + public void rotateAround() { - facing++; - if(facing > EnumFacing.EAST.ordinal()) - { - facing = EnumFacing.NORTH.ordinal(); - } + facing++; + if (facing > EnumFacing.EAST.ordinal()) + { + facing = (byte) EnumFacing.NORTH.ordinal(); + } setFacing(facing); worldObj.addBlockEvent(pos, IronChest.ironChestBlock, 2, facing); } @@ -527,7 +559,9 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl { } - public void removeAdornments() {} + public void removeAdornments() + { + } @Override public int getField(int id) @@ -536,7 +570,9 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl } @Override - public void setField(int id, int value) {} + public void setField(int id, int value) + { + } @Override public int getFieldCount() @@ -564,10 +600,10 @@ public class TileEntityIronChest extends TileEntityLockable implements IUpdatePl { return "IronChest:" + type.name(); } - + @Override public boolean canRenderBreaking() { - return true; + return true; } } diff --git a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java index 09ad48a..1967404 100755 --- a/src/main/java/cpw/mods/ironchest/client/ClientProxy.java +++ b/src/main/java/cpw/mods/ironchest/client/ClientProxy.java @@ -10,8 +10,12 @@ ******************************************************************************/ package cpw.mods.ironchest.client; -import net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemModelMesher; +import net.minecraft.client.resources.model.ModelBakery; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.world.World; @@ -22,20 +26,23 @@ import cpw.mods.ironchest.IronChest; import cpw.mods.ironchest.IronChestType; import cpw.mods.ironchest.TileEntityIronChest; -public class ClientProxy extends CommonProxy +public class ClientProxy extends CommonProxy { @Override public void registerRenderInformation() - { + { + Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getBlockModelShapes().registerBuiltInBlocks(IronChest.ironChestBlock); + + ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher(); for (IronChestType chestType : IronChestType.values()) { if (chestType != IronChestType.WOOD) { - ModelHelper.registerBlock(IronChest.ironChestBlock, chestType.ordinal(), "ironchest:BlockIronChest"); + Item chestItem = Item.getItemFromBlock(IronChest.ironChestBlock); + mesher.register(chestItem, chestType.ordinal(), new ModelResourceLocation("ironchest:chest_" + chestType.getName().toLowerCase(), "inventory")); + ModelBakery.addVariantName(chestItem, "ironchest:chest_" + chestType.getName().toLowerCase()); } } - - TileEntityItemStackRenderer.instance = new IronChestRenderHelper(); } @Override @@ -57,8 +64,7 @@ public class ClientProxy extends CommonProxy if (te != null && te instanceof TileEntityIronChest) { return GUIChest.GUI.buildGUI(IronChestType.values()[ID], player.inventory, (TileEntityIronChest) te); - } - else + } else { return null; } diff --git a/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java b/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java deleted file mode 100755 index 4c0ca28..0000000 --- a/src/main/java/cpw/mods/ironchest/client/IronChestRenderHelper.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 cpw. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * cpw - initial API and implementation - ******************************************************************************/ -package cpw.mods.ironchest.client; - -import java.util.Map; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer; -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; -import net.minecraft.item.ItemStack; - -import com.google.common.collect.Maps; - -import cpw.mods.ironchest.IronChest; -import cpw.mods.ironchest.IronChestType; -import cpw.mods.ironchest.TileEntityIronChest; - -public class IronChestRenderHelper extends TileEntityItemStackRenderer -{ - private Map itemRenders = Maps.newHashMap(); - - public IronChestRenderHelper() - { - for (IronChestType typ : IronChestType.values()) - { - itemRenders.put(typ.ordinal(), (TileEntityIronChest) IronChest.ironChestBlock.createNewTileEntity(null, typ.ordinal())); - } - } - - @Override - public void renderByItem(ItemStack itemStack) - { - Block block = Block.getBlockFromItem(itemStack.getItem()); - - if (block == IronChest.ironChestBlock) - { - TileEntityRendererDispatcher.instance.renderTileEntityAt(itemRenders.get(itemStack.getMetadata()), 0.0D, 0.0D, 0.0D, 0.0F); - } - else - { - super.renderByItem(itemStack); - } - } -} diff --git a/src/main/resources/assets/ironchest/models/item/BlockIronChest.json b/src/main/resources/assets/ironchest/models/item/BlockIronChest.json deleted file mode 100755 index 9935acc..0000000 --- a/src/main/resources/assets/ironchest/models/item/BlockIronChest.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "builtin/entity" -} diff --git a/src/main/resources/assets/ironchest/models/item/chest_copper.json b/src/main/resources/assets/ironchest/models/item/chest_copper.json new file mode 100755 index 0000000..488cab4 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/chest_copper.json @@ -0,0 +1,40 @@ +{ + "textures": { + "texture": "ironchest:model/copperchest" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 10, 15 ], + "faces": { + "down": { "uv": [ 7, 4.75, 10.5, 8.25 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 4.75, 7, 8.25 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8.25, 7, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 8.25, 14, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.25, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.25, 3.5, 10.75 ], "texture": "#texture" } + } + }, + { "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 7, 0, 10.5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" } + } + }, + { "from": [ 7, 7, 0 ], + "to": [ 9, 11, 1 ], + "faces": { + "down": { "uv": [ 0, 0.75, 1.25, 0.5 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0.25, 0.75, 0.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0.25, 1.5, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 0.75, 0.25, 1, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0.25, 0.25, 1.25 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/main/resources/assets/ironchest/models/item/chest_crystal.json b/src/main/resources/assets/ironchest/models/item/chest_crystal.json new file mode 100755 index 0000000..ff0c823 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/chest_crystal.json @@ -0,0 +1,40 @@ +{ + "textures": { + "texture": "ironchest:model/crystalchest" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 10, 15 ], + "faces": { + "down": { "uv": [ 7, 4.75, 10.5, 8.25 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 4.75, 7, 8.25 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8.25, 7, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 8.25, 14, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.25, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.25, 3.5, 10.75 ], "texture": "#texture" } + } + }, + { "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 7, 0, 10.5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" } + } + }, + { "from": [ 7, 7, 0 ], + "to": [ 9, 11, 1 ], + "faces": { + "down": { "uv": [ 0, 0.75, 1.25, 0.5 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0.25, 0.75, 0.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0.25, 1.5, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 0.75, 0.25, 1, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0.25, 0.25, 1.25 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/main/resources/assets/ironchest/models/item/chest_diamond.json b/src/main/resources/assets/ironchest/models/item/chest_diamond.json new file mode 100755 index 0000000..8950515 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/chest_diamond.json @@ -0,0 +1,40 @@ +{ + "textures": { + "texture": "ironchest:model/diamondchest" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 10, 15 ], + "faces": { + "down": { "uv": [ 7, 4.75, 10.5, 8.25 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 4.75, 7, 8.25 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8.25, 7, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 8.25, 14, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.25, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.25, 3.5, 10.75 ], "texture": "#texture" } + } + }, + { "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 7, 0, 10.5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" } + } + }, + { "from": [ 7, 7, 0 ], + "to": [ 9, 11, 1 ], + "faces": { + "down": { "uv": [ 0, 0.75, 1.25, 0.5 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0.25, 0.75, 0.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0.25, 1.5, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 0.75, 0.25, 1, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0.25, 0.25, 1.25 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/main/resources/assets/ironchest/models/item/chest_dirtchest9000.json b/src/main/resources/assets/ironchest/models/item/chest_dirtchest9000.json new file mode 100755 index 0000000..d2947cd --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/chest_dirtchest9000.json @@ -0,0 +1,40 @@ +{ + "textures": { + "texture": "ironchest:model/dirtchest" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 10, 15 ], + "faces": { + "down": { "uv": [ 7, 4.75, 10.5, 8.25 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 4.75, 7, 8.25 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8.25, 7, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 8.25, 14, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.25, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.25, 3.5, 10.75 ], "texture": "#texture" } + } + }, + { "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 7, 0, 10.5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" } + } + }, + { "from": [ 7, 7, 0 ], + "to": [ 9, 11, 1 ], + "faces": { + "down": { "uv": [ 0, 0.75, 1.25, 0.5 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0.25, 0.75, 0.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0.25, 1.5, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 0.75, 0.25, 1, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0.25, 0.25, 1.25 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/main/resources/assets/ironchest/models/item/chest_gold.json b/src/main/resources/assets/ironchest/models/item/chest_gold.json new file mode 100755 index 0000000..5260625 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/chest_gold.json @@ -0,0 +1,40 @@ +{ + "textures": { + "texture": "ironchest:model/goldchest" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 10, 15 ], + "faces": { + "down": { "uv": [ 7, 4.75, 10.5, 8.25 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 4.75, 7, 8.25 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8.25, 7, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 8.25, 14, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.25, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.25, 3.5, 10.75 ], "texture": "#texture" } + } + }, + { "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 7, 0, 10.5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" } + } + }, + { "from": [ 7, 7, 0 ], + "to": [ 9, 11, 1 ], + "faces": { + "down": { "uv": [ 0, 0.75, 1.25, 0.5 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0.25, 0.75, 0.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0.25, 1.5, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 0.75, 0.25, 1, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0.25, 0.25, 1.25 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/main/resources/assets/ironchest/models/item/chest_iron.json b/src/main/resources/assets/ironchest/models/item/chest_iron.json new file mode 100755 index 0000000..2c63365 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/chest_iron.json @@ -0,0 +1,40 @@ +{ + "textures": { + "texture": "ironchest:model/ironchest" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 10, 15 ], + "faces": { + "down": { "uv": [ 7, 4.75, 10.5, 8.25 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 4.75, 7, 8.25 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8.25, 7, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 8.25, 14, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.25, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.25, 3.5, 10.75 ], "texture": "#texture" } + } + }, + { "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 7, 0, 10.5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" } + } + }, + { "from": [ 7, 7, 0 ], + "to": [ 9, 11, 1 ], + "faces": { + "down": { "uv": [ 0, 0.75, 1.25, 0.5 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0.25, 0.75, 0.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0.25, 1.5, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 0.75, 0.25, 1, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0.25, 0.25, 1.25 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/main/resources/assets/ironchest/models/item/chest_obsidian.json b/src/main/resources/assets/ironchest/models/item/chest_obsidian.json new file mode 100755 index 0000000..b13d018 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/chest_obsidian.json @@ -0,0 +1,40 @@ +{ + "textures": { + "texture": "ironchest:model/obsidianchest" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 10, 15 ], + "faces": { + "down": { "uv": [ 7, 4.75, 10.5, 8.25 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 4.75, 7, 8.25 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8.25, 7, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 8.25, 14, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.25, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.25, 3.5, 10.75 ], "texture": "#texture" } + } + }, + { "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 7, 0, 10.5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" } + } + }, + { "from": [ 7, 7, 0 ], + "to": [ 9, 11, 1 ], + "faces": { + "down": { "uv": [ 0, 0.75, 1.25, 0.5 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0.25, 0.75, 0.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0.25, 1.5, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 0.75, 0.25, 1, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0.25, 0.25, 1.25 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/main/resources/assets/ironchest/models/item/chest_silver.json b/src/main/resources/assets/ironchest/models/item/chest_silver.json new file mode 100755 index 0000000..43fdd95 --- /dev/null +++ b/src/main/resources/assets/ironchest/models/item/chest_silver.json @@ -0,0 +1,40 @@ +{ + "textures": { + "texture": "ironchest:model/silverchest" + }, + "elements": [ + { "from": [ 1, 0, 1 ], + "to": [ 15, 10, 15 ], + "faces": { + "down": { "uv": [ 7, 4.75, 10.5, 8.25 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 4.75, 7, 8.25 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 8.25, 7, 10.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 8.25, 14, 10.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 8.25, 10.5, 10.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 8.25, 3.5, 10.75 ], "texture": "#texture" } + } + }, + { "from": [ 1, 9, 1 ], + "to": [ 15, 14, 15 ], + "faces": { + "down": { "uv": [ 7, 0, 10.5, 3.5 ], "texture": "#texture" }, + "up": { "uv": [ 3.5, 0, 7, 3.5 ], "texture": "#texture" }, + "north": { "uv": [ 3.5, 3.5, 7, 4.75 ], "texture": "#texture" }, + "south": { "uv": [ 10.5, 3.5, 14, 4.75 ], "texture": "#texture" }, + "west": { "uv": [ 7, 3.5, 10.5, 4.75 ], "texture": "#texture" }, + "east": { "uv": [ 0, 3.5, 3.5, 4.75 ], "texture": "#texture" } + } + }, + { "from": [ 7, 7, 0 ], + "to": [ 9, 11, 1 ], + "faces": { + "down": { "uv": [ 0, 0.75, 1.25, 0.5 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0.25, 0.75, 0.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.25, 0.25, 0.75, 1.25 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0.25, 1.5, 1.25 ], "texture": "#texture" }, + "west": { "uv": [ 0.75, 0.25, 1, 1.25 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0.25, 0.25, 1.25 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/main/resources/assets/ironchest/textures/blocks/copper_front.png b/src/main/resources/assets/ironchest/textures/blocks/copper_front.png deleted file mode 100755 index 8ca415c5ae6d61aff4d347b0793ca30e2bb4dd86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 679 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lvott z6XJTX)@^UO{j<|spPbnE$JRYMwBo_O#V;@JdwF5c?JZO8?VR)Y$m)B$=HA^t zvM=sLcjWQT@M9gJ|NsBzz8+);bS-0&x4Vn!y=^zMfgH{PkH}&M25w;x zW@MN(M*=9g(bL5-MB;Mnx!Xcb3L*}H`l206r!5g#7&&X2M#sPZ+e=H9vEM$-oPN+C z;+oa%O>^SkrR{cRkf^@l+VW$!trZJ{BA;@J&CxG1EGmp24E#8E$NcndV7T%6!Nn7W zLFS)5^;%9a8vWOs)F9BXNPwX~-Ba7^Wp`LaW#(QI1O$~b=8 zhAC^Wd|nuow$qTO>OtB(OO^xfcKVBdtT@AT!97(C>Rd$4i#D zMwB?`=jNv7l`uFLr6!i7rYMwWmSiZnd-?{1H}Z)C6{&(0r2wU@lEEq%j0_Bobq#>X zGQ`l-%GAQj&_vh3)XKns?cL{26b-rgDVb@NPz{E45bDP46hOx7_4S6Fo+k-*%fF5l$aLa z6XJTX)@^UO{j<|spPbnE$JRYMwBo_O#V;@JdwF5ci}Snh?V5Xc`;1qY58mHB z|Mr$Cw>M9Ies;&B!z=IYob&YLru%yq+}bqp*2W2UwobjVw(I)pjw{O=FE6gSIKS-T zypl@`D=#mqzA(4={Op2rGjh&O%Q`b9{mkUl)00w8^(UO@i9S0uJSXW)|qW{#O$BVJUv!ia(=Ag%WdKiMf72V^Xdgo=Ijdcxx$TGyx)XLPt%FsmDz|_jXfbHGq zP81Ef`6-!cl~4_ax<*DJhK5!~25=4KTTjLVH3))iNXyJg%}dNpwJHHJ7>wf$b~*D` Q0wozdUHx3vIVCg!0L|wRIRF3v diff --git a/src/main/resources/assets/ironchest/textures/blocks/copper_top.png b/src/main/resources/assets/ironchest/textures/blocks/copper_top.png deleted file mode 100755 index 09a84886bc2e187d872f7213611e06eec16085e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lyD93 z32{AG>-PBAx+lliKRL1S+3BrMPi}gCcE^kJyI)?|^Z3Z>2m2Pkytwbx<%9Qj&3$xu z<-MJA?rxv)@ZhrhdluZ@GUe8$iMKXR`2YWZj$xWC&_Ko{Z+925nu{wWfgH{PkH}&M z25w;xW@MN(M*=9=>FMGaB5^sj-+C8Sf;UEKBP2(iR;nCB+;3+62fPet>an1bm+#Zhi@7T1QTzo z8*~eN|8h-RPS++#Y}u3ru3M&cTj&2abhx_u>*D$8u0E^ReA?4@ufDiPbN#=n`gimH zGr733YGfAhegQg4vcxr_#5q4VH#M(>!MP|ku_QG`p**uBL&4qCHz2%`PaLR76{IKy zC}oulR>5FoU}&ss07RA{hNf1g7FLEPx(23J1_o^JK6j#M$jwj5Osj-yFw`|N3NbXa xGBSW`DBpTA9;iVOWJ6kJPHJ9aZmLxYkilRaZ+O!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=Y7G zC&U#Ks7)k|4ie28U-i(m6ET1IZHC zh!W@g+}zZ>5(ej@)Wnk16ovB4k_-iRPv3y>Mm}+%B2|#06rhwiMgp(B|rv)X}nRu0iowWNd`|>KbLh*2~7Y9cWCVZ diff --git a/src/main/resources/assets/ironchest/textures/blocks/crystal_side.png b/src/main/resources/assets/ironchest/textures/blocks/crystal_side.png deleted file mode 100755 index 842cc18f2af1361649fa194d602a0fb79a42e563..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=Y7G zC&U#Ks7)k|4ie28U-i(m6ET1IZHC zh!W@g+}zZ>5(ej@)Wnk16ovB4k_-iRPv3y>Mm}+%B2|#06rhwiMgp(B|rv)X}rO{bH%5Dk_?`%elF{r5}E)L>1nJ0 diff --git a/src/main/resources/assets/ironchest/textures/blocks/crystal_top.png b/src/main/resources/assets/ironchest/textures/blocks/crystal_top.png deleted file mode 100755 index ce8ef6307c684e7bbe2175666f0c4adc36e8e505..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YhS zC&U#aiAhqkfIczlvOfV1%r`+p|P$35Lt#8np&A!SQ(n=8kkxc z7_hzj+=-$gH$NpatrDuiP}j&P#L&>n$N;XPeCx@0pawyZ4QZJ45bDP46hOx7_4S6Fo+k-*%fF5lz156 z6XMFa_zA4cneKtUF(` zY=6yh=pFlkx2(I~uo=4rhT!WHAE+w=f7ZGR&GI0Tevy>Eak7aXI$faj_-?0f&nWVjHx>lGZnf?sn`y8FGb0eSJnd!>$(^ttQ%w>~K`lg+Gx)x-%CVA?HulhMFDqrEnta~BRZ~eBX zn`Fo@Tp-GR_+o|8+_SvRN*?!%;fJbb%fe%*Pdb9)uO2uKu1DomT>zHtY~VFi|&qIn4% z9~cb-dFER%wXg_zTy{}#(E3{+@{8%v5qWh!{+dld4@s7|MwB?`=jNv7l`uFLr6!i7 zrYMwWmSiZnd-?{1H}Z)C6{&(0r2wU@lEEq%j0_Bobq#>XGQ`l-%GAQj&_vh3)XKns z?cL{26b-rgDVb@NPz{E45bDP46hOx7_4S6Fo+k-*%fF5l-L{K z6XMFa_zAF`{tMK(;pg-zXyK$?fK!i@r$22Pkt!g`=)UBoBZ8xhR=Vf zKm4xp;G4{?uaY;u2w(mzaQ+kT>5n|8KJcIY$angqz`0M{Cq8f;d(UzB9mm0U?EBxc z?R(3%_YK>gH>^8fvuuCOap)cUfw!!?-mva?&9e0s%eGg{n_seQdBwcxCG*CY|NsA= z_2Sh`php;!yxm>wJX07R138=p9+AZi4BWyX%*Zfnjs#F}pQnpsh{WaCb0@``40u>C z1Qlp>M6t^-h>E7K2uR`h@PB{mE57(mCw87xYAIPP=u|4|wesR?{x*)Dnfo_oz>&6OoPc2oaZzmW1P%hHEyvIYZrNedIw4iBIcWHF( zVUSt6#*pJe!>dhA%d{95wn^RE7RGTQ>wkY%{Fyrv5#CeezX5$BS>hT|;+&tGo0?a` z;9QiNSdyBeP@Y+mq2TW68xY>eCk|Ak3R08;l(I?&t6(rPFf`UR03yo}LsKhL3oAnt zT?11q0|T~qpF2@BIal$@O1TaS?83{1OWYyF311? diff --git a/src/main/resources/assets/ironchest/textures/blocks/diamond_top.png b/src/main/resources/assets/ironchest/textures/blocks/diamond_top.png deleted file mode 100755 index 08c3bb536ec965230594a72ff4283a8c7688e9e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5ln4y) z32|jy{KV<)FPC?}Jm3HJ|M=VI<8RLozXL!0c7OLPv$nc2qP=E>KO zcfN1Ycs}E0Y0mSR3k%t|@AzbKfByTwpY3nxv2`)2gsTFbC|TkfQR1ARo128bg=d#Wzp$PzOFx9#M diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_front.png deleted file mode 100755 index 4e1e1fdd307ba264954c8c52e8d9d20737923625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3194 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 diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_side.png deleted file mode 100755 index ebda19fd06b24959429d20ffb2f6fc6d9220cad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3202 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 diff --git a/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png b/src/main/resources/assets/ironchest/textures/blocks/dirtchest9000_top.png deleted file mode 100755 index a92c5f17eb6c7855a2f9baa3a6f7fd454b5b81e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3212 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 diff --git a/src/main/resources/assets/ironchest/textures/blocks/gold_side.png b/src/main/resources/assets/ironchest/textures/blocks/gold_side.png deleted file mode 100755 index f06fb4f7ea158ed4505c76a3217a4e7b816ba7cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lsFvV z6XM$1$xvCxaO+LL&DY*HUOHZTZgKUQ$)(3y=N~BD|5SAEL)P8*$!G3Jp1djY;B(c5 zhbm|9N*}w*f8;Xnop&*ppXi>xEq>yL(CxQjH(t4(yDxw0mgwP2JcllFAH2YI_MYtV zYl26w@a;d#vF8-qwj(T?_A#y9$+%_*vl12+{?6T8{>-23`^ECELzJje-*>L zl??M%Fw9-fFl#ZxjD-x-7ceYd$FOh>!|WvtGZ!&ToyRb3KEvcW3{&PZOq$IwX%@r8 znGFB`|G&q%80a+y#w2fd7l(g0V{QOBoCO|{#S9GG!XV7ZFl&wkP;kGei(`ny<=At_ znVJlE8Xg7}h_J3@W`A&uH#91><>SBn)GuxIMZbzT70;SDt@zg)l(ps7Ts@}bXZclI zuD*@tFxxyc^IJx>!ImE!2UB`_R~pW=>U&zivQ|>@m(TU*$C6IQp8p)%a<$}bugp2~ zb^GsDaqRx9Xu;-KU?s2L&VA@-)!w^@J#6NkkI-tl{#(>7f1-w@dS;J;i;9qq*V0Wf zN=q^)IZe}E$;AWovN-1|8|D@!t`)DDRtYUwv-Q9GR{mQF67w#3UsM5lMY6;-qQp5r zH#aq}gu%HeHL)Z$MWH;iBtya7(>EZzkxv|`NEM_g1t?{e3|7HlWMF8lYXC%+A%><_ zrWRI)Cb|ZuRt5%a?>={;Xvob^$xN$+YB1C_G72#?v@$Y)Ybf7(G9IWw5M)DIW=?8e dVs5Hc36Q~H7;mui_-&B&44$rjF6*2UngDe%88iR@ diff --git a/src/main/resources/assets/ironchest/textures/blocks/gold_top.png b/src/main/resources/assets/ironchest/textures/blocks/gold_top.png deleted file mode 100755 index a29e9f378a0499c1c2188819f166f07a336d5a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5ln4y) z32|-hWVrgwU*V}KyuD`Ik^DgG@`{a8cvaUQexbRTr{->e` zpR3N?k-Ypw_w;S?6E}n|K2kq>PxjO;(W6)R4qxIqbdmf2|NlJe-K>FzGbVYvyGWI$ zKQRJwI14-?iy0WWg+Z8+Vb&Z8px|^*7sn8Z%c=d2V$B8|E~YaX7*)50-M;sK5$o^$HS?&j<( zuu+AvM^QGnCJhTe>cWiRZiFqM3=2+qs|EJo)a8;laB}-f*N}Tg^b5rw57@Uhz z6H8K46v{J8G8EiBeFMT9`NV;WR6&YTfKpb;U=<8T28PDE20&yPVrXh*YGGw)qHADk zWnjSe?sF%KhTQy=%(P0V218vVqYy(wD45bDP46hOx7_4S6Fo+k-*%fF5l=u+f z6XM#|)mK&Da{KMOTW{XpeD(VJi4k@n9(?|M|Kq3opFZ7q_4>lYhsUm6 zKYIQ8nLBr{K6`%l?!8mDZa@6;<<9%}J5QWkym8a~wd>aH*?Zu^#gjL09lv(t=#^_X zU%x(j_3EPa>s$Kz>pD6n&Y8Pm@4iD9FWq_f{^sj9=N~*gef!Rl%U2Iyx^n2^<#YER zoVb4T*wyO?&Ry7h`t0_j$2adkv~JhlwLAB0+HS<=ip1own%tgy)EL^%|{ia20H_TbOa@OMI)8;RpzF^6exeKSxTQqsj zg2}VzPntFF|NsB<&wES;`kgV!+ug-KFU`>t$l)yTh%9Dc;1&j9Muu5)B!GhFJzX3_ zBreCEi;Qk^5NZF&7~)dAeT{_9X;B?rLvx8lwn)Cy-~U_4>VK_0clCXJF~?3{C6};u zCpX1tgvdb^-|yYKHTQS^_PhDtICdX?SWy&H_RVHK zcgq7Ii+8Q9O}`VLC>uQ6B;c;+GN+(LgG;$X_@HZ-Vv6MhMaOwZ8YVb#xlVMN$C%Pu z@_)q_{)#<{y!J2L5`bQlEOCt}an8@pP0cG|a4t$sEJ;mKD945bDP46hOx7_4S6Fo+k-*%fF5lsFvV z6XM#|)mK&Da{KMOTW{XpeD(VJi4k@n9(?|M|Kq27A3mPFd+*e(+Yi5d zx%lYuxqJ7IU%PSi%C)=iKU{hG?983JCvV=m^X~o4*Kf{0czF8uog$t(8bH= z?mswj{pPW&*AJY#u=n)Y?MIJq-hXJ_uDxq_?%BBa!1~?$HtjpOdi$=GTedIVuzB&i zjSE(hamd#kWbjkWni`H(KvvlRG#mlG7Up#%mk|}c+PMx=C z@|*>eXV0HBYu^9={~zsjlK^^$G0EHA#o^!0m>WP2XMsm#F#`j)FbFd;%$fsIvES3h zF+}2W?78DiO$Iy-4}%IsSl2SMKRCu48kO4e@n3%Gm$v$%UqzgXXHA?|{Ob+M+Hz~I z9#itO{HiTi-$rwoZJwF=Eu-3C%MXr&DLuU_4QE>QJuP5aE2;R)=lb(wNhf2^e~xXr zTJpA6=A8Mu{dcQ4cK=nhU~??6lGktNKJ>F{@7=>5HuKI$XtiAbE$Ws(QA1Kavq!;2 zMaaf$>82Q^C7F|)rfIL_;#s(cL7a1y4RZ?<*NWFntArM;+4|poEB~zoiFud2FRB2& zB3a@ZQR1ARo128bg=d#Wzp$PzxDn%Fo diff --git a/src/main/resources/assets/ironchest/textures/blocks/iron_top.png b/src/main/resources/assets/ironchest/textures/blocks/iron_top.png deleted file mode 100755 index 30efea4db7ec6109c23529a720c54f8fbfd446ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5ln4y) z32|-f>bv&*#q}32Z@zkc`|Z11Z{FT~{pQZQ_cva?y8Hgay$>JnfBbay+4GB!9zXc} z`Qeu@XYby-^7Pr6J9kgsymjgElXLeUoW6bM*wyPtE?+%->B|5A|98JOX9pV2nB?v5 zB2}9H#0bdYEbxddW?PSeGyc!^MFgZ zo3pRLMis^$MI{+Fr&y+vY&9p1r6)H1Yg}bLGtxcJP(Dv?>ADyup6`Z>W+p~%=YC@I z!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z%2yAjF;}# z{Q(L}mbgZgIOpf)rskC}I2WZRmZYXAlxLP?D7bt2281{Ai31f$ffNPjrgnPbV&Ok^(rG_tLmt<~flF14XWCd@uAJi6 zts&&0qtT(ty|0P2{z!cBqbaMn%_71B-~2ds-7n}As&g3o5L=Hktj zIk)8mdJ2_RtjOarn)6*+!RNEqv%SZA3)wW^26;tZ+Aa~LU*>Dke#GmUJj*98#%Go) zVMd~%D_oBTN%3B1Dcl@lvRLMCm)(oD&6i|iFRlKvM@_@{#NmdMcKt8zv-B{E%NtZ2 z<8NR7z_DW5Cp(#kpEA0{mo_EnOWeHwcAoPL4GE|9rA%8K=U5l9mc_^%;!rs?Ptqsk z+dL)rgxs)sn`er%m&$%no!zrXY;KY3ynDxQi?8}olocsvE4^)IIltSrnUWmkFKf7%-uO$?r{elF{r5}E*9!Q8_D diff --git a/src/main/resources/assets/ironchest/textures/blocks/obsidian_side.png b/src/main/resources/assets/ironchest/textures/blocks/obsidian_side.png deleted file mode 100755 index dc8d227eb9c8e438cddddbc293bfbbcdb7d564b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00009 za7bBm000XT000XT0n*)m`~Uy|8FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X z4i^9b02*{fSaefwW^{L9a%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0004eNkl3j0)bSDgcvFYCT0f2z{KC-U-Q@&6&vF8%DOxIzFwcQ z);3Kuo6XLnh=?&pYn|u$X0s{F5)+xv=Y8MvQek-C8&f4X=R`*5hAgv>H?JrOSynzB z-W5WSF>>6$VS}pbs%k+b`ZV0u^~%}>NG5d@DY?eDSnYvx9?#416AuvSQU#Ho(|fPJ zqR{J~l3xBlfEg&{{o1)RkR|~ltuYpbk>XTkmI>^sx~?M$nYArgEv{+3_q(Q98&jae zPofAtu=MW$9S#O6^N-GLfia=;@EX3j$aBGtuftDqraohez~1x22VJppY8=Dnqyd1| zVNg5-Y{$dN?;K^9MNuf$BlZ1rF_dLPVis)KUi}JygPs;cS7B+Df?0$d)MdD|+w9d8 frRzF+QA&LSk)KHy<3b}!00000NkvXXu0mjfJ9hDl diff --git a/src/main/resources/assets/ironchest/textures/blocks/obsidian_top.png b/src/main/resources/assets/ironchest/textures/blocks/obsidian_top.png deleted file mode 100755 index 4f531cc5b6f6e57570eec1d2d7d06559661aee2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00009 za7bBm000XT000XT0n*)m`~Uy|8FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X z4i^9b02*{fSaefwW^{L9a%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0004pNklSOA%=>9iGhg$F);D}e+7?iK&(Bzvh4HSd!MFh zn(1^pnM}4(M8sN~=XqI{o6V-KYo17!Wy3IFX?S=)sLm5adQRsCF4j7c!TTLh4K@bB z$y#wPd?%=?$jJBO&0A#QJ{CpIoj8VXjGCrh&u_tQc~JEzUrt{9`Z1$>rfu6)8Quu2 z%h@%QgWp?QaXIc^!PD_WbsO?QAR|{)01HCz*Y`0ET0G*PDB5<}b)8{AL?C*M1J45bDP46hOx7_4S6Fo+k-*%fF5l&A~v z32~jiVEUvv6R%vqa_QQ|i&rmPxN`o?#WN?)p15)Q#`Rm*4<0*s?DVm7m(LwPbNuj$ z!#D5Tyms^2&iy;qY+kc+!^(|2Hts*Nf7QlSvlh>qHhsD`Cy<+`}C2JNhUcG4f`eln&Eu6n%{{R2~V^-%r0lI`S$=lsU z^VIfM6(EPRz$3Dlfq`2Xgc%uT&5-~K&i8b243W4Td+wr8lY#(iK!;F_w{GhpAKl20 z|Mzd`_T?{4Zo=Ijdcxx$TGyx z)XLPt%FsmDz|_jXfbHGqP81Ef`6-!cl~4_ax<*DJhK5!~25=4KTTjLVH3))iNXyJg g%}dNpwJHHJ7);`g0+}i<03{hbUHx3vIVCg!0HN*r<^TWy diff --git a/src/main/resources/assets/ironchest/textures/blocks/silver_side.png b/src/main/resources/assets/ironchest/textures/blocks/silver_side.png deleted file mode 100755 index d4df07738c55bf926f233ebfd1b0bd5ae8766fe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lqd@D z32~jiVEUvv6R%vqa_QQ|i&rmPxN`o?#WN?)p15)Q#`Rm*kDoby_{8CxcWxd$cJSKG zYiBQ=J$CxofujfZAK8EC_@UhgcWv9dZS$_p8+UBnv~$yj?Hkr@UAKDE>Qx(8tysTe z$(qHBS1($*Vde7m%NDI#xNzly`77rC|No!w?8|vT+ZmI*-Ca}1 z9Bz^P$UQL3oO9t6yMB$Qd)qQX7H_$>$SIqrCCqELV0FM zhJw4NZ$Nk>pEyvFDo9ZZP|7M9tb)PFz|dIN0EjF@3{9;}EvyVpbPY_c3=G)beeOij zkei>9nN|taV5nqKJWzum$cD7coYcI;+*GR)AcMgq-e5nE45bDP46hOx7_4S6Fo+k-*%fF5l&}f# z32~jiVETnC=PzEpaOv8`E7z}FyLs*Ut?TD5pF45(#EsiGZr-_h{LJyQm(CtLeeCdw z!>2EtK6vclfujfZAKCx^|NnlWnVo}?8-`Ablc`wlW_n(^j^XLCFe&S&X$SuEE2Xu;LiEBiObAE1a zYF-J0b5UwyNotBhd1gt5g1e`0KzJjcI8c!)NKpz<$|@PGg2BkZ&{)?1h%7@4O|48V ztPD+b4NR>J4A|a%?nKd$o1c=IRteQ$sB2^tVrXb(WB}JtzV&20P=g@IhP2F_)V##p cRI3sogTW-;@C3JJ7EqGG)78&qol`;+04ig{9{>OV From 706d51a21b9300e9f8eb4573773e58df0752336d Mon Sep 17 00:00:00 2001 From: The_Fireplace Date: Thu, 30 Jul 2015 17:02:00 -0500 Subject: [PATCH 76/80] Fixed #48 --- src/main/java/cpw/mods/ironchest/ItemChestChanger.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java index 84ab992..b98aacd 100755 --- a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -59,7 +59,7 @@ public class ItemChestChanger extends Item chestContents = new ItemStack[((TileEntityChest) te).getSizeInventory()]; for (int i = 0; i < chestContents.length; i++) chestContents[i] = ((TileEntityChest) te).getStackInSlot(i); - newchest = IronChestType.makeEntity(IronChestType.IRON.ordinal()); + newchest = IronChestType.makeEntity(this.getTargetChestOrdinal(this.type.ordinal())); } } From a3899f4034cb0530a64bec069812700e3e85e9f5 Mon Sep 17 00:00:00 2001 From: The_Fireplace Date: Thu, 30 Jul 2015 17:02:25 -0500 Subject: [PATCH 77/80] Fixed #29 --- src/main/java/cpw/mods/ironchest/ChestChangerType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cpw/mods/ironchest/ChestChangerType.java b/src/main/java/cpw/mods/ironchest/ChestChangerType.java index e6c6dc7..ba3ce49 100755 --- a/src/main/java/cpw/mods/ironchest/ChestChangerType.java +++ b/src/main/java/cpw/mods/ironchest/ChestChangerType.java @@ -75,7 +75,7 @@ public enum ChestChangerType { { Object targetMaterial = IronChestType.translateOreName(targetMat); Object sourceMaterial = IronChestType.translateOreName(sourceMat); - IronChestType.addRecipe(new ItemStack(item), recipe, 'm', targetMaterial, 's', sourceMaterial, 'G', Blocks.glass, 'O', Blocks.obsidian); + IronChestType.addRecipe(new ItemStack(item), recipe, 'm', targetMaterial, 's', sourceMaterial, 'G', "blockGlass", 'O', Blocks.obsidian); } } } From 34036bdff1353f7316090eec54b8a6fea2a42898 Mon Sep 17 00:00:00 2001 From: The_Fireplace Date: Thu, 30 Jul 2015 17:03:00 -0500 Subject: [PATCH 78/80] Fixed #47 and #45 --- src/main/java/cpw/mods/ironchest/ChestChangerType.java | 4 ++++ src/main/java/cpw/mods/ironchest/ItemChestChanger.java | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/main/java/cpw/mods/ironchest/ChestChangerType.java b/src/main/java/cpw/mods/ironchest/ChestChangerType.java index ba3ce49..c4a1f0c 100755 --- a/src/main/java/cpw/mods/ironchest/ChestChangerType.java +++ b/src/main/java/cpw/mods/ironchest/ChestChangerType.java @@ -47,6 +47,10 @@ public enum ChestChangerType { this.descriptiveName = descriptiveName; this.recipe = recipe; } + + public IronChestType getSource(){ + return source; + } public boolean canUpgrade(IronChestType from) { diff --git a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java index b98aacd..96d048a 100755 --- a/src/main/java/cpw/mods/ironchest/ItemChestChanger.java +++ b/src/main/java/cpw/mods/ironchest/ItemChestChanger.java @@ -10,6 +10,7 @@ ******************************************************************************/ package cpw.mods.ironchest; +import net.minecraft.block.BlockChest; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -38,6 +39,15 @@ public class ItemChestChanger extends Item { if (world.isRemote) return false; + if(this.type.canUpgrade(IronChestType.WOOD)){ + if(!(world.getBlockState(pos).getBlock() instanceof BlockChest)){ + return false; + } + }else{ + if(world.getBlockState(pos) != IronChest.ironChestBlock.getStateFromMeta(IronChestType.valueOf(type.getSource().getName().toUpperCase()).ordinal())){ + return false; + } + } TileEntity te = world.getTileEntity(pos); TileEntityIronChest newchest = new TileEntityIronChest(); ItemStack[] chestContents = new ItemStack[27]; From e750348aa6cd2e0fb885c79c298d65459807f44b Mon Sep 17 00:00:00 2001 From: Zach Date: Sat, 21 Nov 2015 13:52:32 -0500 Subject: [PATCH 79/80] allow running in 1.8.8 --- src/main/java/cpw/mods/ironchest/IronChest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cpw/mods/ironchest/IronChest.java b/src/main/java/cpw/mods/ironchest/IronChest.java index cf6cf97..a3f5f70 100755 --- a/src/main/java/cpw/mods/ironchest/IronChest.java +++ b/src/main/java/cpw/mods/ironchest/IronChest.java @@ -20,7 +20,7 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; -@Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:FML@[7.2,)") +@Mod(modid = "IronChest", name = "Iron Chests", dependencies = "required-after:FML@[7.2,)", acceptedMinecraftVersions="[1.8,1.8.8]") public class IronChest { public static BlockIronChest ironChestBlock; From df068767510b8c3d5e4f5dff52188321b8f5db90 Mon Sep 17 00:00:00 2001 From: Zach Date: Sun, 22 Nov 2015 12:11:13 -0500 Subject: [PATCH 80/80] remove curseforge plugin from FG 1.2 --- build.gradle | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/build.gradle b/build.gradle index 419e4a4..f21facc 100755 --- a/build.gradle +++ b/build.gradle @@ -19,8 +19,6 @@ buildscript { // Apply the forge plugin - this adds all the magic for automatically obfuscating, deobfuscating etc apply plugin: 'forge' -apply plugin: "curseforge" - // This is a simple flatdir repository for "uploadArchives" when you don't have a remote repo to target repositories { @@ -102,17 +100,6 @@ artifacts { archives sourceJar, deobfJar } -curse { - projectId = "228756" - apiKey = "$System.env.curse_api_key" - changelog = "See github for changes" - releaseType = "beta" - - additionalArtifact deobfJar - additionalArtifact sourceJar -} - - // Configure an upload task. this is setup for uploading to files.minecraftforge.net. There are other examples around uploadArchives { dependsOn 'reobf'